Πώς εφαρμόζουμε το τελευταίο patch (PSU) σε βάση δεδομένων της Oracle
- Πώς ενεργοποιούμε το Unified Auditing σε Oracle Database - 7 Οκτώβριος 2024
- Τι είναι η PostgreSQL και πως κάνουμε μία πλήρης εγκατάσταση - 2 Σεπτέμβριος 2024
- Πώς ρυθμίζουμε το replication του GoldenGate ώστε να διαβάζει από το Standby του Oracle Data Guard - 2 Αύγουστος 2024
Στο άρθρο θα αναλύσουμε τη διαδικασία του patch set update (PSU) σε Oracle Database. Η διαδικασία γίνεται μέσω των δύο εργαλείων της Oracle το OPatch και το Datapatch. Το OPatch είναι ένα εργαλείο που επιτρέπει την εφαρμογή και απεγκατάσταση patches σε λογισμικό (binaries) της Oracle . Από την άλλη το Datapatch εφαρμόζει τις ενημερώσεις αυτές στη βάση δεδομένων και ποιό συγκεκριμένα στο data dictionary (συστημικά views και πίνακες).
Πώς κατεβάσουμε το patch set update
Μέσα από το support portal της Oracle συνδεόμαστε στο κάτωθι link.
*Χρειάζεται να έχουμε λογαριασμό που να διαθέτει το δικαίωμα να κατεβάσει PSU (επί πληρωμή), αν η έκδοση έχει βγει σε Extended Support π.χ. 12.1 έχει ειδικό κόστος.
https://support.oracle.com/portal/
Επιλέγουμε Patches & Updates, Advanced, Product Oracle Database Enterprise και τη Release που έχουμε.
Εκεί θα μας φορτώσει μια λίστα, την κάνουμε order με τη στήλη updated και ψάχνουμε το latest patch set update για το λειτουργικό που έχουμε.
Στην επόμενη οθόνη μπορούμε να βρούμε πληροφορίες για το patch το οποίο περιέχει cumulative και όλα τα προηγούμενα.
Επιλέγουμε το λειτουργικό και Download:
Έχουμε τη δυνατότητα ή να το κατεβάσουμε και να το μεταφέρουμε με ftp στον server ή να χρησιμοποιήσουμε το wget.sh το οποίο θα μας το κατεβάσει απευθείας στον server με χρήση ssh.
Η προετοιμασία
Έχουμε κατεβάσει το PSU στον φάκελο “Downloads”:
[oracle@dp-gr Downloads]$ ls -ltr
total 2155088
drwxrwxr-x+ 7 oracle oracle 4096 Jul 7 2014 database
-rw-rw-r--. 1 oracle oracle 2206794758 Jul 8 15:14 p31113348_121020_Linux-x86-64.zip
-rwxrwxr-x. 1 opc opc 1949 Sep 21 2020 wget.sh
Τσεκάρουμε τι version έχει το εργαλείο OPatch, δεν γίνεται να εφαρμόσουμε τα patch με παλιά έκδοση:
[oracle@dp-gr Downloads]$ $ORACLE_HOME/OPatch/opatch version
OPatch Version: 12.1.0.1.3
Βλέπουμε ότι είναι παλιά οπότε θα διαγράψουμε το φάκελο του και θα κατεβάσουμε το latest.
Μεταφέρουμε το .zip του PSU στο ORACLE_HOME και το κάνουμε unzip.
Ταυτόχρονα σβήνουμε και τον φάκελο του OPatch που βρίσκεται στο ORACLE_HOME αφού θα αντικατασταθεί:
[oracle@dp-gr Downloads]$ cp p31* $ORACLE_HOME/
[oracle@dp-gr Downloads]$ cd $ORACLE_HOME
[oracle@dp-gr db_1]$ rm -rf OPatch
[oracle@dp-gr db_1]$ unzip p31113348_121020_Linux-x86-64.zip
Πώς κάνουμε εγκατάσταση το latest OPatch
Συνδεόμαστε στο κάτωθι σύνδεσμο:
https://updates.oracle.com/download/6880880.html
Επιλέγουμε η σωστή release και λειτουργικό (προσοχή με 32 και 64bit):
Αφού κατέβει το κάνουμε και αυτό copy στο ORACLE_HOME και unzip:
[oracle@dp-gr Downloads]$ cp p688* $ORACLE_HOME/
[oracle@dp-gr Downloads]$ cd $ORACLE_HOME
[oracle@dp-gr db_1]$ unzip p6880880_121010_LINUX.zip
Σβήνουμε τα zip που δεν τα χρειαζόμαστε πλέον:
[oracle@dp-gr db_1]$ rm -rf *.zip
Τώρα θα δούμε ότι έχουμε την καινούργια version του OPatch:
[oracle@dp-gr db_1]$ $ORACLE_HOME/OPatch/opatch version
OPatch Version: 12.2.0.1.21
OPatch succeeded
Η διαδικασία
Πάμε στον φάκελο με το id του PSU που βρίσκεται στο ORACLE_HOME:
[oracle@dp-gr db_1]$ cd 31113348
Κάνουμε έλεγχο αν υπάρχει κάποιο conflict με άλλα patches:
[oracle@dp-gr 31113348]$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Oracle Interim Patch Installer version 12.2.0.1.21
Copyright (c) 2020, Oracle Corporation. All rights reserved.
PREREQ session
Oracle Home : /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1
Central Inventory : /home/oracle/oracle/app/oraInventory
from : /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1/oraInst.loc
OPatch version : 12.2.0.1.21
OUI version : 12.1.0.2.0
Log file location : /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1/cfgtoollogs/opatch/opatch2020-09-21_13-27-13PM_1.log
Invoking prereq "checkconflictagainstohwithdetail"
Prereq "checkConflictAgainstOHWithDetail" passed.
OPatch succeeded.
Είναι ώρα να σταματήσουμε τον listener ώστε να μην μπορεί να συνδεθεί άλλος εξωτερικός χρήστης και έπειτα να κλείσουμε την βάση:
[oracle@dp-gr 31113348]$ lsnrctl stop
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 21-SEP-2020 13:29:22
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dp-gr)(PORT=1521)))
The command completed successfully
[oracle@dp-gr 31113348]$ sqlplus / as sysdba
SQL> shutdown immediate;
Κάνουμε έναν τελευταίο έλεγχο στα αρχεία:
** Αν αποτύχει με /sbin/fuser και το όνομα του αρχείου βρίσκουμε ποιο process το κάνει use και το κάνουμε kill.
[oracle@dp-gr 31113348]$ $ORACLE_HOME/OPatch/opatch prereq CheckActiveFilesAndExecutables -ph ./
Oracle Interim Patch Installer version 12.2.0.1.21
Copyright (c) 2020, Oracle Corporation. All rights reserved.
PREREQ session
Oracle Home : /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1
Central Inventory : /home/oracle/oracle/app/oraInventory
from : /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1/oraInst.loc
OPatch version : 12.2.0.1.21
OUI version : 12.1.0.2.0
Log file location : /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1/cfgtoollogs/opatch/opatch2020-09-21_13-32-03PM_1.log
Invoking prereq "checkactivefilesandexecutables"
Prereq "checkActiveFilesAndExecutables" for patch 20299023 passed.
.
.
.
Prereq "checkActiveFilesAndExecutables" for patch 31113348 passed.
OPatch succeeded.
Με την εντολή opatch apply ξεκινάει επιτέλους το patching:
[oracle@dp-gr 31113348]$ $ORACLE_HOME/OPatch/opatch apply
Oracle Interim Patch Installer version 12.2.0.1.21
Copyright (c) 2020, Oracle Corporation. All rights reserved.
Oracle Home : /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1
Central Inventory : /home/oracle/oracle/app/oraInventory
from : /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1/oraInst.loc
OPatch version : 12.2.0.1.21
OUI version : 12.1.0.2.0
Log file location : /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1/cfgtoollogs/opatch/opatch2020-09-21_13-41-15PM_1.log
Verifying environment and performing prerequisite checks...
OPatch continues with these patches: 19769480 20299023 20831110 21359755 21948354 22291127 23054246 24006101 24732082 25171037 25755742 26609783 26713565 26925311 27338041 27547329 28259833 28729169 29141015 29494060 29918340 30340202 30700212 31113348
Do you want to proceed? [y|n]
Composite patch 31113348 successfully applied.
Log file location: /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1/cfgtoollogs/opatch/opatch2020-09-21_13-41-15PM_1.log
OPatch succeeded.
Για να δούμε ποια patch εφαρμόστηκαν:
[oracle@dp-gr 31113348]$ $ORACLE_HOME/OPatch/opatch lsinventory
Oracle Interim Patch Installer version 12.2.0.1.21
Copyright (c) 2020, Oracle Corporation. All rights reserved.
Oracle Home : /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1
Central Inventory : /home/oracle/oracle/app/oraInventory
from : /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1/oraInst.loc
OPatch version : 12.2.0.1.21
OUI version : 12.1.0.2.0
Log file location : /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1/cfgtoollogs/opatch/opatch2020-09-21_15-03-14PM_1.log
Lsinventory Output file location : /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1/cfgtoollogs/opatch/lsinv/lsinventory2020-09-21_15-03-14PM.txt
--------------------------------------------------------------------------------
Local Machine Information::
Hostname: dp-gr.subnet.vcn.oraclevcn.com
ARU platform id: 226
ARU platform description:: Linux x86-64
Installed Top-level Products (1):
Oracle Database 12c 12.1.0.2.0
There are 1 products installed in this Oracle Home.
Interim patches (1) :
Patch 31113348 : applied on Mon Sep 21 14:44:47 GMT 2020
Unique Patch ID: 23682224
Patch description: "Database Patch Set Update : 12.1.0.2.200714 (31113348)"
Created on 7 Jul 2020, 20:50:51 hrs PST8PDT
Αφού ολοκληρώθηκε η αναβάθμιση στα binaries του λογισμικού, με το datapatch θα ενημερώσουμε και την βάση δεδομένων.
Πρώτα όμως ξεκινάμε πρώτα την βάση:
[oracle@dp-gr admin]$ sqlplus / as sysdba
SQL> startup;
SQL> exit;
Και έπειτα τρέχουμε το datapatch:
[oracle@dp-gr admin]$ $ORACLE_HOME/OPatch/datapatch -verbose
SQL Patching tool version 12.1.0.2.0 Production on Mon Sep 21 15:09:55 2020
Copyright (c) 2012, 2016, Oracle. All rights reserved.
Log file for this invocation: /home/oracle/oracle/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_29130_2020_09_21_15_09_55/sqlpatch_invocation.log
Connecting to database...OK
Bootstrapping registry and package to current versions...done
Determining current state...done
Current state of SQL patches:
Bundle series PSU:
ID 200714 in the binary registry and not installed in the SQL registry
Adding patches to installation queue and performing prereq checks...
Installation queue:
Nothing to roll back
The following patches will be applied:
31113348 (DATABASE PATCH SET UPDATE 12.1.0.2.200714)
Installing patches...
Patch installation complete. Total patches installed: 1
Validating logfiles...
Patch 31113348 apply: SUCCESS
Μπορούμε πλέον να σηκώσουμε πάλι το listener ώστε να μπορούν να συνδεθούν άλλοι χρήστες:
[oracle@dp-gr db_1]$ lsnrctl start
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 21-SEP-2020 18:21:03
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dp-gr)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date 21-SEP-2020 18:10:08
Uptime 0 days 0 hr. 10 min. 55 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1/network/admin/listener.ora
Listener Log File /home/oracle/oracle/app/oracle/diag/tnslsnr/dp-gr/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dp-gr.subnet.vcn.oraclevcn.com)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=dp-gr.subnet.vcn.oraclevcn.com)(PORT=5500))(Security=(my_wallet_directory=/home/oracle/oracle/app/oracle/admin/orcl/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Αφού σηκώθηκε ο listener μπορούμε να συνδεθούμε και με εξωτερική εφαρμογή.
Με το κάτωθι query μπορούμε να δούμε το PSU που περάστηκε και πότε:
select patch_id,status,action_time,description from dba_registry_sqlpatch order by action_time;
Για να σβήσουμε ότι σκουπίδια έχουν μείνει από την εγκατάσταση τρέχουμε το opatch cleanup (θα μπορούμε ακόμα να κάνουμε rollback τα patches):
[oracle@dp-gr db_1]$ $ORACLE_HOME/OPatch/opatch util cleanup
Oracle Interim Patch Installer version 12.2.0.1.21
Copyright (c) 2020, Oracle Corporation. All rights reserved.
Oracle Home : /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1
Central Inventory : /home/oracle/oracle/app/oraInventory
from : /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1/oraInst.loc
OPatch version : 12.2.0.1.21
OUI version : 12.1.0.2.0
Log file location : /home/oracle/oracle/app/oracle/product/12.1.0.2/db_1/cfgtoollogs/opatch/opatch2020-09-21_18-11-50PM_1.log
Invoking utility "cleanup"
OPatch will clean up 'restore.sh,make.txt' files and 'scratch,backup' directories.
You will be still able to rollback patches after this cleanup.
Do you want to proceed? [y|n]
Y
User Responded with: Y
Backup area for restore has been cleaned up. For a complete list of files/directories
deleted, Please refer log file.
OPatch succeeded.
Αν θέλουμε να κάνουμε rollback το patch…
Στην περίπτωση που θέλουμε να κάνουμε rollback το patch μπορούμε ενώ έχουμε κατεβάσει την βάση δεδομένων να τρέξουμε την παρακάτω εντολή δηλώνοντας το patch id που θέλουμε να αφαιρέσουμε:
[oracle@dp-gr db_1]$ $ORACLE_HOME/OPatch/opatch rollback -id 31113348
Θα πρέπει όμως αφού ολοκληρωθεί το rollback στα binaries της Oracle να τρέξουμε ξανά datapatch (με ανεβασμένη την βάση δεδομένων) ώστε να περάσουν και οι αλλαγές στους πίνακες της βάσης δεδομένων:
[oracle@dp-gr db_1]$ $ORACLE_HOME/OPatch/datapatch -verbose