【邏輯DG滾動升級三】ORACLE11204 邏輯DG滾動升級至12C---正式升級

yingyifeng306發表於2022-04-15

 

升級邏輯 dg 12c

執行preupgrade.jar 升級預檢

12c preupgrade.jar 替換了 utlu112i.sql 來執行預檢工作,這個 java 程式會生成兩個 sql 指令碼檔案來修復一些簡單的問題,比如提前收集字典統計資訊之類,但是很多仍然需要手工操作

preupgrade.jar 語法如下

 

$Earlier_release_Oracle_home/jdk/bin/java -jar $New_release_Oracle_home/rdbms/admin/preupgrade.jar [FILE|TERMINAL] [TEXT|XML] [DIR output_dir]

FILE|TERMINAL  指定檢查結果輸出到終端還是檔案,預設是檔案

TEXT|XML        指定結果格式是文字還是XML ,預設是文字

DIR -            指定日誌輸出到<output_dir> 目錄. 如果沒有指定output_dir 目錄,則優先到$ORACLE_BASE/cfgtoollogs/<dbname>/preupgrade/ 目錄,如果沒有ORACLE_BASE 環境變數則到 $ORACLE_HOME/cfgtoollogs/<db_name>/preupgrade/

 

export ORACLE_BASE=/oracle/ora11204 注意要用 11g jdk 來執行

export ORACLE_HOME=$ORACLE_BASE/db_1

export ORACLE_SID=tt

$ORACLE_HOME/jdk/bin/java -jar /oracle/12c/product/12.2.0/dbhome_1/rdbms/admin/preupgrade.jar file text dir ./precheck.log

Preupgrade generated files:

    /home/oracle/precheck.log/preupgrade.log  檢查結果

    /home/oracle/precheck.log/preupgrade_fixups.sql 升級前預檢問題修復指令碼,檢查結果中標記為AUTOFIXUP 的可以透過這個修復

/home/oracle/precheck.log/postupgrade_fixups.sql 升級後問題修復指令碼

這裡檢查出以下問題

 + Update NUMERIC INITIALIZATION PARAMETERS to meet estimated minimums.

     Parameter                         12.2.0.1.0 minimum

     ---------                         ------------------

     processes                                        300

建議刪除 sec_case_sensitive_logon 引數

刪除em 元件減少升級停機時間(升級過程會自動刪除,但是建議提前做掉)

Copy the $ORACLE_HOME/rdbms/admin/emremove.sql script from the target

     12.2.0.1.0 ORACLE_HOME into the source 11.2.0.4.0 ORACLE_HOME.

    

     Step 1: If database control is configured, stop EM Database Control,

     using the following command    

       $> emctl stop dbconsole    

     Step 2: Connect to the database using the SYS account AS SYSDBA

       SET ECHO ON;

       SET SERVEROUTPUT ON;

      @emremove.sql

    

Remove OLAP Catalog by running the 11.2.0.4.0 SQL script

     $ORACLE_HOME/olap/admin/catnoamd.sql script. 

    

     The OLAP Catalog component, AMD, exists in the database.

    

     desupported and will be automatically marked as OPTION OFF during the

     database upgrade if present. Oracle recommends removing OLAP Catalog

     (OLAP AMD) before database upgrade.

 

(AUTOFIXUP) Gather stale data dictionary statistics prior to database

     upgrade in off-peak time using:

    

      EXECUTE DBMS_STATS.GATHER_DICTIONARY_STATS;

 

 

收集資料字典統計資訊

EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;

EXECUTE DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;

 

確認物化檢視都已停止重新整理

WHERE o.type# = 42 AND bitand(s.mflags, 8) =8;

 

確認資料檔案不需要介質恢復且不處於backup 模式

 

 

處理分散式事務

SQL> SELECT * FROM DBA_2PC_PENDING;

 

IF THIS RETURNS ROWS YOU SHOULD DO THE FOLLOWING:

SQL> SELECT LOCAL_TRAN_ID FROM DBA_2PC_PENDING;

SQL> EXECUTE DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('');

SQL> COMMIT;

 

建立dblink 的指令碼

in case the database has to be downgraded again

SELECT 'CREATE '||DECODE(U.NAME,'PUBLIC','public ')||'DATABASE LINK '||CHR(10)

||DECODE(U.NAME,'PUBLIC',Null, 'SYS','',U.NAME||'.')|| L.NAME||chr(10)

||'CONNECT TO ' || L.USERID || ' IDENTIFIED BY "'||L.PASSWORD||'" USING

'''||L.HOST||''''

||chr(10)||';' TEXT

FROM SYS.LINK$ L, SYS.USER$ U

WHERE L.OWNER# = U.USER#;

 

4.7 清理回收站

PURGE DBA_RECYCLEBIN;

收集em 資訊

降級回退的時候需要

另外,建議升級 12c 之前先刪除 em 元件,減少升級時間

 $

  複製 12c emremove.sql 指令碼到 /tmp 目錄

 cp /oracle/12c/product/12.2.0/dbhome_1/rdbms/admin/emremove.sql /tmp

       SET ECHO ON;

       SET SERVEROUTPUT ON;

      @/tmp/emremove.sql

 

修改必要引數

vi initorcl.ora

*.audit_file_dest='/oracle/12c/admin/orcl/adump'

*.audit_trail='NONE'

*.compatible='11.2.0.4.0'

*.control_files='/oracle/ora11204/oradata/orcl/std'

*.db_block_size=8192

*.db_domain=''

*.db_name='orcl'

*.diagnostic_dest='/oracle/12c'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'

*.fal_client='DG'

*.fal_server='prod'

*.log_archive_dest_1='location=/oracle/ora11204/arch valid_for=(online_logfiles,all_roles)' 這個用來存放邏輯dg 寫操作產生的歸檔

*.log_archive_dest_2='service=prod valid_for=(online_logfile,primary_role)'

*.log_archive_dest_3='LOCATION=/oracle/ora11204/arch/std VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)' 這個是為了接收生產傳過來的歸檔

*.open_cursors=300

*.pga_aggregate_target=1203765248

*.processes=500

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=3613392896

*.undo_tablespace='UNDOTBS1'

*.db_recovery_file_dest='/oracle/ora11204/fast_recovery_area'

*.db_recovery_file_dest_size='20G'

 

[oracle@backup ~]$ mkdir -p /oracle/12c/admin/orcl/adump

刪除olap 元件

SQL>

SQL>

SQL>

 

檢查ADMINISTER DATABASE TRIGGER 許可權使用者

如果使用者建立了資料庫級別的觸發器,則必須要擁有 ADMINISTER DATABASE TRIGGER 許可權,但是建立完之後該許可權可能被回收

 

     OWNER NOT IN (SELECT GRANTEE FROM DBA_SYS_PRIVS WHERE

     PRIVILEGE='ADMINISTER DATABASE TRIGGER');

grant ADMINISTER DATABASE TRIGGER to xxxx;

升級APEX

為了減少升級時間,可以提前升級 apex ,本例沒有提前升級,在資料庫升級過程中一起升級

 The database contains APEX version 3.2.1.00.12 and will need to be upgraded to at least version .

To reduce database upgrade time, you can upgrade APEX manually before the database upgrade.  Refer to My Oracle Support Note .1 for information on APEX installation upgrades.

 

 

----- 升級aplex:

下載對應安裝包( apex_5.0.4.zip ), metlink 1088970.1

-- 升級apex 外掛

cd /home/oracle/apex/

select * from all_users;

-- 配置,/home/oracle apex 的上層目錄

admin/Root!@#123

 

解除安裝:

 

drop user APEX_050000 cascade;

drop user FLOWS_FILES cascade;

drop user APEX_PUBLIC_USER cascade;

 

 

升級資料庫刷資料字典

12c 軟體啟動邏輯 dg

SQL> startup upgrade

 

nohup dbupgrade -oracleHome /ora12c/app/product/12.2.0/db_1 &

 

備註: Died at /ora12c/app/product/12.2.0/db_1/rdbms/admin/ .

報錯,解決方法:

[ora12c@std ~]$ cd /ora12c/app/product/12.2.0/db_1/bin/

[ora12c@std bin]$ nohup ./dbupgrade &

[ora12c@std bin]$ nohup: ignoring input and appending output to `nohup.out'

 

重新開啟資料庫刷無效物件

Sqlplus / as sysdba

SQL> create spfile from pfile;

SQL> Startup

 

元件狀態檢查:

SQL>

修復無效物件:

[oracle@backup ~]$

[oracle@backup admin]$ $ORACLE_HOME/perl/bin/perl catcon.pl -n 1 -e -b utlrp -d '''.''' utlrp.sql

 

此時 dba_registry 內所有元件狀態從 UPGRADED 變為 VALID

 

刷完之後對比之前的無效物件進行確認

and object_name not in (select object_name from );

 

執行預檢生成的修復指令碼,包括重新收集 x$ 基表和字典 統計資訊等

SQL> @/home/oracle/precheck.log/postupgrade_fixups.sql

複製tnsnames.ora 和密碼檔案到12c 環境

 

[oracle@high admin]$ cp /oracle/ora11204/db_1/network/admin/tnsnames.ora .

[oracle@high dbs]$ cp /oracle/ora11204/db_1/dbs/orapworcl .


第一次主備切換

 

啟用sql apply 追平資料

邏輯 dg 再次啟用 sql apply

SQL>

SQL>

SQL> SELECT SYSDATE, APPLIED_TIME FROM V$LOGSTDBY_PROGRESS;

SYSDATE           APPLIED_TIME

----------------- -----------------

17-04-18 17:38:38 17-04-18 05:47:34

監控以上 SQL APPLY 進度,是否與當前時間接近,可以透過一個測試表來檢查

處理不受 sql apply 支援的表

這裡正式關閉應用,確保生產庫沒有連線

 

set lin 200

SET LONG 1000

SET PAGESIZE 180

SET LINESIZE 79

col EVENT_TIMESTAMP for a30;

col event for a30

col status for a30

審查升級過程中的監控事件 , 在邏輯 dg 上查詢 DBA_LOGSTDBY_EVENTS 檢視,該檢視記錄了在邏輯備庫上沒有 applied DDL DML 操作

ORA-16226 錯誤表示相關 DDL 操作在邏輯備庫上不受支援,常見的原因是該類操作涉及內部物件

ORA-16129 錯誤表示相關 DML 操作在邏輯備庫上不受支援

 

如果有業務表出現上面的錯誤,則透過 impdp 將生產數同步到邏輯 dg

Impdp \”/ as sysdba\” NETWORK_LINK=databasea TABLES=scott.emp TABLE_EXISTS_ACTION=TRUNCATE

 

切換

生產狀態

SQL>

DATABASE_ROLE    SWITCHOVER_STATUS

---------------- --------------------

PRIMARY          SESSIONS ACTIVE

 

注:

SQL> alter system set log_archive_dest_3='LOCATION=/oradata/stdlog VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)' scope=both;

SQL> alter system set log_archive_dest_state_3=enable;

 

 

邏輯 dg 狀態

SQL>

 

DATABASE_ROLE    SWITCHOVER_STATUS

---------------- --------------------

LOGICAL STANDBY  NOT ALLOWED

 

將主庫切換成邏輯 dg ,這條命令會等待事務完成

ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL STANDBY;

切換完成之後,主備庫 DATABASE_ROLE 都變成了 LOGICAL STANDBY ,將原先的邏輯 dg 切換成主庫

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

現在由原邏輯 dg 12c 版本)接管應用


升級原生產庫(當前的邏輯dg

閃回原生產

將原主庫閃回到之前建立的還原點上( 2.1 步驟建立的)

 

SQL>

SQL>

SQL>

SQL> SHUTDOWN IMMEDIATE;

dbs 目錄下密碼檔案和 network/admin 中的 listener.ora tnsnames.ora 至新的 12c 目錄中

準備引數檔案

先從當前生產(原邏輯 dg )複製相關檔案

$ scp initorcl.ora orapworcl 192.168.200.34:/oracle/12c/product/12.2.0/dbhome_1/dbs

$ vi initorcl.ora 修改如下內容

*.control_files='/oracle/ora11204/oradata/orcl/control01.ctl'

*.fal_client='PROD'

*.fal_server='dg'

*.log_archive_dest_1='location=/oracle/ora11204/arch valid_for=(online_logfiles,all_roles)'

*.log_archive_dest_2='service=dg valid_for=(online_logfile,primary_role)'

*.log_archive_dest_3='LOCATION=/oracle/ora11204/arch/std VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)'

 

12c 資料庫軟體載入原生產庫

$ cp nsnames.ora /oracle/12c/product/12.2.0/dbhome_1/network/admin/

$ mkdir /oracle/12c/admin/orcl/adump

$ startup mount;

停止 11g 監聽,啟動 12c 監聽

 

將原生產庫切換回物理備庫

SQL>

轉換完成後歸檔全部接收過來了

SQL> SHUTDOWN IMMEDIATE;

重啟後開始追原邏輯 dg 12c 軟體讀寫開啟後產生的歸檔

SQL>

SQL>

注: ORA-38760: This database instance failed to turn on flashback database 報錯

解決:

create spfile from pfile;

shutdown immediate;

startup mount;

RECOVER MANAGED STANDBY DATABASE DISCONNECT;

 

等歸檔追平,就表示升級完成

第二次主備切換 (視需求而定)

第二次停機,主備物理切換,回到升級前的狀態( 12c 下),按需求來做(如果備機效能跟原生產相當則可以不做)

當前生產

SQL>

 

SQL>

完成後自動關閉

SQL>

SQL> recover managed standby database using current logfile disconnect;

物理 dg

SQL>

SQL> alter database open;

測試日誌是否實時應用 .

 

刪除強制閃回點

現主庫刪除強制閃回點

SQL> DROP RESTORE POINT PRE_UPGRADE;

 

確認引數 compatible 是否正確。


升級失敗的回退措施

升級邏輯dg 失敗

如果在第四大步升級邏輯 dg 12c 失敗,則直接用 3.1 建立的閃回點閃回升級開始前的狀態,生產不用做任何操作。

SQL>startup mount

SQL>flashback database to restore point pre_upgrade;

SQL>shutdown immediate

SQL>startup mount;

SQL>recover managed standby database disco


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23732248/viewspace-2887208/,如需轉載,請註明出處,否則將追究法律責任。

相關文章