Oracle DataGuard 升級 [11.2.0.1 -> 11.2.0.4]
**Primary: **11.2.0.1 單機,Site A。
Standby: 11.2.0.1 單機,Site B、Site C。
當前DG環境示意圖:
需求:升級至11.2.0.4
升級思路:
主庫暫停歸檔傳輸;備庫安裝新版本軟件,備庫啟動到mount;主庫安裝軟件,主庫升級數據庫,主庫啟用歸檔傳輸,備庫開啟日志恢復。
注意:
11g新版本軟件安裝到一個新目錄下,注意copy之前的spfile、密碼文件、network file等(監聽配置文件的靜態監聽部分需要修改);
備庫只升級軟件版本。數據庫升級是通過主庫升級后通過應用主庫歸檔完成升級和同步的。
- 1.主庫暫停歸檔向備庫傳輸
- 2.備庫在新目錄下安裝新版本軟件
- 3.備庫啟動到mount狀態
- 4.主庫安裝軟件,升級數據庫
- 5.主庫啟用歸檔向備庫傳輸
- 6.備庫開啟日志恢復
- 7.檢查備庫、主庫升級情況
- 8.定時任務檢查修正
1.主庫暫停歸檔向備庫傳輸
show parameter log_archive_dest_state_X alter system set log_archive_dest_state_X=defer scope=both sid='*';這里是暫停Site A的主庫的log_archive_dest_state_2和log_archive_dest_state_3
show parameter log_archive_dest_state_2
show parameter log_archive_dest_state_3
alter system set log_archive_dest_state_2=defer scope=both sid='*';
alter system set log_archive_dest_state_3=defer scope=both sid='*';
2.備庫在新目錄下安裝新版本軟件
**2.1 關閉數據庫,監聽。**shutdown immediate
lsnrctl stop
2.2 備庫在新目錄下安裝Oracle 11.2.0.4 軟件。
兩個備庫操作方法一樣,以Site C為例:
--Site C:
--創建新的$ORACLE_HOME目錄
$ mkdir -p /u01/app/oracle/product/11.2.0.4/dbhome_1
--編輯oracle用戶環境變量,修改ORACLE_HOME變量值為新的目錄
vi ~/.bash_profile
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/dbhome_1
3.備庫啟動到mount狀態
環境變量修改為新目錄 ORACLE_HOME 11.2.0.4 新目錄注意copy之前的spfile和network file(tnsnames.ora listener.ora)等兩個備庫操作方法一樣,以Site C為例:
--Site C:
--network file(tnsnames.ora listener.ora sqlnet.ora)
[oracle@oracle2 admin]$ cp /u01/app/oracle/product/11.2.0/network/admin/*.ora /u01/app/oracle/product/11.2.0.4/dbhome_1/network/admin/
--SPFILE
cp /u01/app/oracle/product/11.2.0/dbs/spfileorcl.ora /u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/
啟動數據庫到mount狀態,啟動監聽。
4.主庫安裝軟件,升級數據庫
安裝、升級相關過程:
4.1 備份數據庫
升級是一個很大的動作,升級前需要事先備份數據庫。
--rman.sql
more rman.sql
run{
allocate channel d1 TYPE disk;
allocate channel d2 TYPE disk;
allocate channel d3 TYPE disk;
allocate channel d4 TYPE disk;
backup as compressed backupset database format '/home/oradata/rman/data_%d_%T_%s.bak' plus archivelog format '/home/oradata/rman/arch_%d_%T_%s.bak';
release channel d1;
release channel d2;
release channel d3;
release channel d4;
}
--rman.sh
cat rman.sh
#!/bin/bash
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0
export ORACLE_SID=orcl
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
rman target / @/home/oradata/rman/rman.sql log=/home/oradata/rman/rman.log
--nohup 執行 備份數據庫
nohup sh rman.sh &
4.2 關閉數據庫,監聽
停止監聽,關閉數據庫:
$ lsnrctl stop
SQL> shutdown immediate
4.3 新目錄下安裝新版本軟件
主庫:
./runInstaller 圖形安裝新版本軟件(upgrade)。
root需要執行的腳本按提示執行。
注意,監聽程序不需要配置。
4.4 舊版本軟件執行升級檢查
在11.2.0.1的sqlplus 執行11.2.0.4的utlu112i.sql,進行升級檢查。
$ sqlplus / as sysdba
SQL> startup
SQL> SPOOL upgrade_info.log
SQL> @/u01/app/oracle/product/11.2.0.4/dbhome_1/rdbms/admin/utlu112i.sql
SQL> SPOOL OFF
根據提示修正不符合升級條件的地方。
--purge DBA_RECYCLEBIN;
select count(*) from DBA_RECYCLEBIN;
purge DBA_RECYCLEBIN;
--EXECUTE dbms_stats.gather_dictionary_stats;
EXECUTE dbms_stats.gather_dictionary_stats;
4.5 升級前確認無效對象數量
select count(*) from dba_objects where status<>'VALID';
這里是0。
--正常關閉數據庫:
shutdown immediate
4.6 新版本軟件對應的環境變量
修改環境變量中指定11.2.0.4,並用source或者重新使用oracle用戶登錄生效
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME= /u01/app/oracle/product/11.2.0.4/dbhome_1
4.7 新版本軟件環境,spfile,密碼文件和網絡配置相關文件
copy 參數文件spfile, network file「tnsnames.ora listener.ora sqlnet.ora」, 密碼文件,
--拷貝參數文件spfile:
[oracle@oracle1 ~]$ cp /u01/app/oracle/product/11.2.0/dbs/spfileorcl.ora /u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/
--拷貝密碼文件:
[oracle@oracle1 ~]$ cp /u01/app/oracle/product/11.2.0/dbs/orapworcl /u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/orapworcl
--拷貝網絡配置相關文件「tnsnames.ora listener.ora sqlnet.ora」
[oracle@oracle1 ~]$ cp /u01/app/oracle/product/11.2.0/network/admin/*.ora /u01/app/oracle/product/11.2.0.4/dbhome_1/network/admin/
--修正DG listener.ora 中靜態監聽內容(ORACLE_HOME),然后重啟監聽文件
SID_LIST_LISTENER=
(SID_DESC=(GLOBAL_DBNAME = orcl)(ORACLE_HOME = /u01/app/oracle/product/11.2.0.4/dbhome_1)(SID_NAME = orcl)
)
4.8 升級數據庫
--upgrade模式打開數據庫
SQL> startup UPGRADE
SQL> @?/rdbms/admin/catupgrd.sql
SQL> startup
SQL> @?/rdbms/admin/utlu112s.sql
SQL> select count(*) from dba_objects where status<>'VALID';
460
SQL> @?/rdbms/admin/utlrp.sql
0
SQL> shutdown immediate
SQL> startup
5.主庫啟用歸檔向備庫傳輸
show parameter log_archive_dest_state_X alter system set log_archive_dest_state_X=enable scope=both sid='*';alter system set log_archive_dest_state_2=enable scope=both sid='*';
alter system set log_archive_dest_state_3=enable scope=both sid='*';
show parameter log_archive_dest_state_2
show parameter log_archive_dest_state_3
6.備庫開啟日志恢復
備庫mount狀態下開啟日志恢復,等待恢復完成,終止日志恢復然后將數據庫在open狀態后再開啟日志恢復。--mount狀態下開啟日志恢復
startup mount
alter database recover managed standby database disconnect from session;
--等待恢復完成...
--取消日志恢復
alter database recover managed standby database cancel;
--打開數據庫
alter database open;
--open狀態下開啟日志恢復
alter database recover managed standby database using current logfile disconnect from session;
7.檢查備庫、主庫升級情況
select ACTION_TIME,ACTION,NAMESPACE,VERSION,ID from registry$history;select ACTION_TIME,ACTION,NAMESPACE,VERSION,ID from registry$history
ACTION_TIME ACTION NAMESPACE VERSION ID
--------------------------------------------------------------------------- ------------------------------ ------------------------------ ------------------------------ ----------
08-FEB-17 03.39.36.894771 AM VIEW INVALIDATE 8289601
08-FEB-17 03.39.36.926136 AM UPGRADE SERVER 11.2.0.4.0
8.定時任務檢查修正
檢查各機器是否有定時任務,比如這里有定時任務有定期刪除歸檔的任務。 需要根據新環境的變量修改腳本中ORACLE_HOME變量值。 以Site A為例,確認對應變量都是新版本數據庫的變量值:[oracle@oracle1 admin]$ crontab -l
0 0 * * * sh /home/oradata/scripts/delarch.sh > /dev/null 2&>1#
[oracle@oracle1 admin]$ cat /home/oradata/scripts/delarch.sh
#!/bin/bash
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/dbhome_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
rman target / @/home/oradata/scripts/delarch.sql log=/home/oradata/scripts/delarch.log
[oracle@oracle1 admin]$ cat /home/oradata/scripts/delarch.sql
crosscheck archivelog all;
delete noprompt archivelog all completed before "sysdate-7";
[oracle@oracle1 admin]$
至此,Oracle DataGuard 從版本11.2.0.1成功升級到版本11.2.0.4。