【邏輯DG滾動升級三】ORACLE11204 邏輯DG滾動升級至12C---正式升級
升級邏輯
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【邏輯DG滾動升級一】ORACLE11204 邏輯DG滾動升級至12C---生產端前期準備Oracle
- 【邏輯DG滾動升級二】ORACLE11204 邏輯DG滾動升級至12C---DG端前期準備Oracle
- 資料庫升級之-Dataguard滾動升級資料庫
- 11G通過邏輯standby滾動升級例項說明及注意
- [譯] Elasticsearch 滾動升級Elasticsearch
- ORACLE RAC 的滾動升級Oracle
- 入門Kubernetes - 滾動升級/回滾
- 滴滴HBase大版本滾動升級之旅
- 使用SQL Apply實現滾動升級SQLAPP
- JavaScript 打怪升級 —— 把業務邏輯當練習題做JavaScript
- 單節點主庫、邏輯備庫升級為RAC、物理備庫、邏輯備庫(1)
- 單節點主庫、邏輯備庫升級為RAC、物理備庫、邏輯備庫(2)
- 單節點主庫、邏輯備庫升級為RAC、物理備庫、邏輯備庫(3)
- 單節點主庫、邏輯備庫升級為RAC、物理備庫、邏輯備庫(4)
- 單節點主庫、邏輯備庫升級為RAC、物理備庫、邏輯備庫(5)
- 物理DG與邏輯DG的區別與邏輯DG同步異常處理方法
- 邏輯升級,深度解析如何實現業務中的且或元件元件
- ORACLE 滾動升級(Rolling Upgrades)介紹Oracle
- 11gR2 RAC out-of-place 滾動升級(2)
- 11gR2 RAC out-of-place 滾動升級(1)
- 14 使用DBMS_ROLLING 執行滾動升級
- 支援行級同步滾動的 markdown 編輯器
- Oracle 9i升級19C 邏輯遷移詳細方法(一)Oracle
- Oracle 9i升級19C 邏輯遷移詳細方法(二)Oracle
- 物理DG、邏輯DG和快照DG的搭建(視訊講解)
- ABP Framework 手動升級指南:從6.0.1升級到7.0.0Framework
- physru指令碼實現11g DataGuard簡易滾動升級指令碼
- 滾動升級(rolling upgrade) Oracle 10g RACOracle 10g
- 關閉chrome自動升級的教程 chrome如何取消自動升級Chrome
- MongoDB 3.2 升級至 3.4.6MongoDB
- Twitter API升級至1.1API
- Nacos 爆重大 Bug!!不要升級,不要升級,不要升級
- Truffle 2.0升級3.0升級指南
- php5.6 升級至7.2.7PHP
- ThinkPHP升級至 5.1.18 版本PHP
- CentOs下手動升級node版本CentOS
- 自動升級CentOS Python至官方最新版CentOSPython
- rac 升級crs 升級資料庫軟體,升級資料庫資料庫