???
SQL> startup
??? ORACLE 例程已經啟動。
??? ......
??? SQL> alter database recover managed standby database cancel;
??? 數據庫已更改。
??? SQL> alter database open ;
??? 數據庫已更改。
??? SQL> select status from v$instance;
??? STATUS
??? ------------
??? OPEN
??? SQL> alter database recover managed standby database disconnect from session;
??? 數據庫已更改。
??? SQL> select status from v$instance;
??? STATUS
??? ------------
??? MOUNTED
??? ● 修改表空間狀態(例如read-write 到read-only,online 到offline)
??? ● 創建修改刪除表空間或數據文件(如果初始化參數STANDBY_FILE_MANAGEMENT 被設置為AUTO 的話,這點在前面第一章的時候提到過)
??? ● 如果設置為manual,則需要手工復制新創建的數據文件到standby 服務器。
??? SQL> show parameter standby_file
??? NAME????????????????????????? TYPE????????VALUE
??? ----------------------------- ----------- ---------------
??? standby_file_management?????? string????? AUTO
??????? SQL> create tablespace mytmp datafile 'e:\ora10g\oradata\jssweb\mytmp01.dbf' size 20m;
??????? 表空間已創建。
??????? 檢查剛添加的數據文件
??????? SQL> select name from v$datafile;
??????? NAME
??????? -----------------------------------------------
??????? E:\ORA10G\ORADATA\JSSWEB\SYSTEM01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\UNDOTBS01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\SYSAUX01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\USERS01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\WEBTBS01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\MYTMP01.DBF
??????? 已選擇6 行。
??????? SQL> alter system switch logfile;
??????? 系統已更改。
??????? SQL> select name from v$datafile;
??????? NAME
??????? ----------------------------------------------------
??????? E:\ORA10G\ORADATA\JSSPDG\SYSTEM01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\UNDOTBS01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\SYSAUX01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\USERS01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\WEBTBS01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\MYTMP01.DBF
??????? 已選擇6 行。
??????? SQL> select name from v$tablespace;
??????? NAME
??????? ------------------------------
??????? SYSTEM
??????? UNDOTBS1
??????? SYSAUX
??????? TEMP
??????? USERS
??????? WEBTBS
??????? MYTMP
??????? 已選擇7 行。
??????? SQL> drop tablespace mytmp including contents and datafiles;
??????? 表空間已刪除。
??????? SQL> select name from v$datafile;
??????? NAME
??????? --------------------------------------------------
??????? E:\ORA10G\ORADATA\JSSWEB\SYSTEM01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\UNDOTBS01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\SYSAUX01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\USERS01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\WEBTBS01.DBF
??????? SQL> alter system switch logfile;
??????? 系統已更改。
??????? 提示:使用including 子句刪除表空間時,
??????? SQL> select name from v$datafile;
??????? NAME
??????? --------------------------------------------------
??????? E:\ORA10G\ORADATA\JSSPDG\SYSTEM01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\UNDOTBS01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\SYSAUX01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\USERS01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\WEBTBS01.DBF
??????? SQL> select name from v$tablespace;
??????? NAME
??????? ------------------------------
??????? SYSTEM
??????? UNDOTBS1
??????? SYSAUX
??????? TEMP
??????? USERS
??????? WEBTBS
??????? 已選擇6 行。
??????? 得出結論,對于初始化參數STANDBY_FILE_MANAGMENT 設置為auto 的話,對于表空間和數據文件的操作完全無須dba 手工干預,primary 和standby 都能很好的處理。
??????? SQL> create tablespace mytmp datafile 'e:\ora10g\oradata\jssweb\mytmp01.dbf' size 20m;
??????? 表空間已創建。
??????? 檢查剛添加的數據文件
??????? SQL> select name from v$datafile;
??????? NAME
??????? -----------------------------------------------
??????? E:\ORA10G\ORADATA\JSSWEB\SYSTEM01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\UNDOTBS01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\SYSAUX01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\USERS01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\WEBTBS01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\MYTMP01.DBF
??????? 已選擇6 行。
??????? 切換日志
??????? SQL> alter system switch logfile;
??????? 系統已更改。
??????? SQL> select name from v$datafile;
??????? NAME
??????? ----------------------------------------------------
??????? E:\ORA10G\ORADATA\JSSPDG\SYSTEM01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\UNDOTBS01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\SYSAUX01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\USERS01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\WEBTBS01.DBF
??????? E:\ORA10G\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00006
??????? 已選擇6 行。
??????? SQL> select name from v$tablespace;
??????? NAME
??????? ------------------------------
??????? SYSTEM
??????? UNDOTBS1
??????? SYSAUX
??????? TEMP
??????? USERS
??????? WEBTBS
??????? MYTMP
??????? 已選擇7 行。
??????? 可以看到,表空間已經自動創建,但是,數據文件卻被起了個怪名字,手工修改其與primary
??????? 數據庫保持一致,如下(注意執行命令之后手工復制數據文件到standby):
??????? SQL> alter database create datafile'E:\ORA10G\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00006'
?????????? 2 as 'E:\ora10g\oradata\jsspdg\mytmp01.dbf';
??????? 數據庫已更改。
??????? SQL> drop tablespace mytmp including contents and datafiles;
??????? 表空間已刪除。
??????? SQL> select name from v$datafile;
??????? NAME
??????? --------------------------------------------------
??????? E:\ORA10G\ORADATA\JSSWEB\SYSTEM01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\UNDOTBS01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\SYSAUX01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\USERS01.DBF
??????? E:\ORA10G\ORADATA\JSSWEB\WEBTBS01.DBF
??????? SQL> alter system switch logfile;
??????? 系統已更改。
??????? SQL> select name from v$datafile;
??????? NAME
??????? ----------------------------------------------------
??????? E:\ORA10G\ORADATA\JSSPDG\SYSTEM01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\UNDOTBS01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\SYSAUX01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\USERS01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\WEBTBS01.DBF
??????? E:\ORA10G\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00006
??????? 已選擇6 行。
??????? SQL> select name from v$tablespace;
??????? NAME
??????? ------------------------------
??????? SYSTEM
??????? UNDOTBS1
??????? SYSAUX
??????? TEMP
??????? USERS
??????? WEBTBS
??????? MYTMP
??????? 已選擇7 行。
??????? 呀,數據還在啊。趕緊分析分析,查看alert_jsspdg.log 文件,發現如下(特別注意粗體):
??????? File #6 added to control file as 'UNNAMED00006' because
??????? the parameter STANDBY_FILE_MANAGEMENT is set to MANUAL
??????? The file should be manually created to continue.
??????? Errors with log E:\ORA10G\ORADATA\JSSPDG\LOG1_753_641301252.ARC
??????? MRPMRP0:BackgroundMediaRecoveryterminatedwitherror1274
??????? Fri Jan 18 09:48:45 2008
??????? 這下明白了,為什么有個UNNAMED00006 的數據文件,也曉得為啥standby 數據庫沒能刪除新加的表空間了吧,原來是后臺的redo 應用被停掉了,重啟redo 應用再來看看:
??????? SQL> alter database recover managed standby database disconnect from session;
??????? 數據庫已更改。
??????? SQL> select name from v$datafile;
??????? NAME
??????? ----------------------------------------------
??????? E:\ORA10G\ORADATA\JSSPDG\SYSTEM01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\UNDOTBS01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\SYSAUX01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\USERS01.DBF
??????? E:\ORA10G\ORADATA\JSSPDG\WEBTBS01.DBF
??? SQL> alter tablespace webtbs offline;
??? 表空間已更改。
??? 方式多樣,不詳述。
??? SQL> alter tablespace webtbs rename datafile
?????? 2 'E:\ORA10G\ORADATA\JSSWEB\WEBTBS01.DBF' to
?????? 3 'E:\ORA10G\ORADATA\JSSWEB\TBSWEB01.DBF';
??? 表空間已更改。
??? SQL> alter tablespace webtbs online;
??? 表空間已更改。
??? SQL> alter database recover managed standby database cancel;
??? 數據庫已更改。
??? SQL> shutdown immediate
??? ORA-01109: 數據庫未打開
??? ......
??? 方式多樣,不詳述。
??? SQL> startup mount
??? ORACLE 例程已經啟動。
??? Total System Global Area 167772160 bytes
??? Fixed Size 1289484 bytes
??? Variable Size 150995700 bytes
??? Database Buffers 8388608 bytes
??? Redo Buffers 7098368 bytes
??? 數據庫裝載完畢。
??? SQL> alter database rename file
???? ?2 'E:\ORA10G\ORADATA\JSSPDG\WEBTBS01.DBF' to
????? 3 'E:\ORA10G\ORADATA\JSSPDG\TBSWEB01.DBF';
??? 數據庫已更改。
??? SQL> alter database recover managed standby database disconnect from session;
??? 數據庫已更改。
??? SQL> alter system switch logfile;
??? 系統已更改。
??? 當primary 數據庫被以resetlogs 打開之后,dg 提供了一些方案,能夠讓你快速的恢復物理standby,當然這是有條件的,不可能所有的情況都可以快速恢復。我們都知道alter database open resetlogs 之后,數據庫的scn被重置,也就是此時其redo 數據也會從頭開始。當物理standby 接收到新的redo 數據時,redo 應用會自動獲取這部分redo 數據。對于物理standby 而言,只要數據庫沒有應用resetlogs 之后的redo 數據,那么這個過程是不需要dba 手工參與的。
?
Standby數據庫狀態 | Standby服務器操作 | 解決方案 |
沒有應用resetlog之前的redo數據 | 自動應用新的redo數據 | 無須手工介入 |
應用了resetlog之后的redo數據,不過standby打開了flashback。 | 可以應用,不過需要dba手工介入 |
1.手工flashback到應用之前 2.重啟redo應用,以重新接收新的redo數據。 |
應用了resetlog之后的redo數據,而且沒有flashback。 | 完全無法應用 | 重建物理standby是唯一的選擇 |
??? 本節主要介紹一些監控dg 配置的方式,先給大家提供一個表格(描述不同事件的不同信息監控途徑):
primary數據庫事件 | primary監控途徑 | standby監控途徑 |
帶有enable|disable thread子句的alterdatabase命令 |
Alert.log V$THREAD |
Alert.log |
當前數據庫角色,保護模式,保護級別,switchover狀態,failover快速啟動信息等 | V$DATABASE | V$DATABASE |
Redo log切換 |
Alert.log V$LOG V$LOGFILE的status列 |
Alert.log |
重建控制文件 | Alert log | Alert log |
手動執行恢復 | Alert log | Alert log |
表空間狀態修改(read-write/read-only,online/offline) |
DBA_TABLESPACES Alert log |
V$RECOVER_FILE |
創建刪除表空間或數據文件 |
DBA_DATA_FILES Alert log |
V$DATAFILE Alert log |
表空間或數據文件offline |
V$RECOVER_FILE Alert log DBA_TABLESPACES |
V$RECOVER_FILE DBA_TABLESPACES |
重命名數據文件 |
V$DATAFILE Alert log |
V$DATAFILE Alert log |
未被日志記錄或不可恢復的操作 |
V$DATAFILE view V$DATABASE view |
Alert.log |
恢復的進程 |
V$ARCHIVE_DEST_STATUS Alert log |
V$ARCHIVED_LOG V$LOG_HISTORY V$MANAGED_STANDBY Alert log |
Redo傳輸的狀態和進度 |
V$ARCHIVE_DEST_STATUS V$ARCHIVED_LOG V$ARCHIVE_DEST Alert log |
V$ARCHIVED_LOG Alert log |
數據文件自動擴展 | Alert log | Alert log |
執行OPEN RESETLOGS或CLEAR UNARCHIVED LOGFILES | Alert log | Alert log |
修改初始化參數 | Alert log | Alert log |
??? 先也是一句話:做為oracle 自己自覺主動維護的一批虛擬表它的作用非常明顯通過它可以及時獲得當前數據庫狀態及處理進度總之好處多多也需特別關注后面示例也會多處用到大家要擦亮雙眼。
??????? 該視圖就是專為顯示standby 數據庫相關進程的當前狀態信息,例如:
??????? SQL> select process,client_process,sequence#,status from v$managed_standby;
??????? PROCESS?? CLIENT_P SEQUENCE#?STATUS
??????? --------- -------- ---------- ------------
??????? ARCH????? ARCH???? 763????????CLOSING
??????? ARCH????? ARCH???? 762??????? CLOSING
??????? MRP0????? N/A????? 764??????? WAIT_FOR_LOG
??????? RFS?????? LGWR???? 764??????? IDLE
??????? RFS?????? N/A????? 0????????? IDLE
??????? PROCESS:顯示進程信息
??????? CLIENT_PROCESS:顯示對應的主數據庫中的進程
??????? SEQUENCE#:顯示歸檔redo 的序列號
??????? STATUS:顯示的進程狀態
??????? 該視圖顯示歸檔文件路徑配置信息及redo 的應用情況等,例如:
??????? SQL> select dest_name,archived_thread#,archived_seq#,applied_thread#,applied_seq#,db_unique_name
?????????? 2 from v$archive_dest_status where status='VALID';
??????? DEST_NAME????????????ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_THREAD#APPLIED_SEQ# DB_UNIQUE_
??????? -------------------- ---------------- ------------- --------------- ------------ ----------
??????? LOG_ARCHIVE_DEST_1?? 1????????????????765???????????0???????????????0????????????jsspdg
??????? LOG_ARCHIVE_DEST_2?? 0????????????????0???????????? 0?????????????? 0????????????jssweb
??????? STANDBY_ARCHIVE_DEST 1????????????????764?????????? 1?????????????? 764????????? NONE
??????? 該視圖查詢standby 數據庫歸檔文件的一些附加信息,比如文件創建時間啦,創建進程啦,歸檔序號啦,是否被應用啦之類,例如:
??????? SQL> select name,creator,sequence#,applied,completion_time from v$archived_log;
??????? NAME???????????????????????????????????????????????CREATOR SEQUENCE#?APP COMPLETION_TIM
??????? -------------------------------------------------- ------- ---------- --- --------------
??????? E:\ORA10G\ORADATA\JSSPDG\LOG1_750_641301252.ARC????ARCH??? 750????????YES 18-1 月-08
??????? E:\ORA10G\ORADATA\JSSPDG\LOG1_749_641301252.ARC??? ARCH??? 749??????? YES 18-1 月-08
??????? E:\ORA10G\ORADATA\JSSPDG\LOG1_751_641301252.ARC??? ARCH??? 751??????? YES 18-1 月-08
??????? E:\ORA10G\ORADATA\JSSPDG\LOG1_752_641301252.ARC??? ARCH??? 752??????? YES 18-1 月-08
??????? E:\ORA10G\ORADATA\JSSPDG\LOG1_753_641301252.ARC??? ARCH??? 753??????? YES 18-1 月-08
??????? E:\ORA10G\ORADATA\JSSPDG\LOG1_754_641301252.ARC??? ARCH??? 754??????? YES 18-1 月-08
??????? 該視圖查詢standby 庫中所有已被應用的歸檔文件信息(不論該歸檔文件是否還存在),例如:
??????? SQL> select first_time,first_change#,next_change#,sequence# from v$log_history;
??????? FIRST_TIME????????? FIRST_CHANGE# NEXT_CHANGE# SEQUENCE#
??????? ------------------- ------------- ------------ ----------
??????? 2008-01-03 12:00:51 499709??????? 528572?????? 18
??????? 2008-01-08 09:54:42 528572????????539402?????? 19
??????? 2008-01-08 22:00:06 539402????????547161?????? 20
??????? 2008-01-09 01:05:57 547161????????560393?????? 21
??????? 2008-01-09 10:13:53 560393????????561070?????? 22
??????? 例如,查詢數據庫角色,保護模式,保護級別等:
??????? SQL> selectdatabase_role,db_unique_name,open_mode,protection_mode,protection_level,switchover_status
?????????? 2 from v$database;
??????? DATABASE_ROLE??? DB_UNIQUE_NAME??OPEN_MODE? PROTECTION_MODE????? PROTECTION_LEVEL???? SWITCHOVER_STATUS
??????? ---------------- --------------- ---------- --------------------?-------------------- ------------------
??????? PHYSICAL STANDBY jsspdg??????????MOUNTED????MAXIMUM?AVAILABILITY MAXIMUM AVAILABILITY SESSIONS ACTIVE
??????? SQL> select fs_failover_status,fs_failover_current_target,fs_failover_threshold,
?????????? 2 fs_failover_observer_present from v$database;
??????? FS_FAILOVER_STATUS??? FS_FAILOVER_CURRENT_TARGET???? FS_FAILOVER_THRESHOLD FS_FAIL
??????? --------------------- ------------------------------ --------------------- -------
??????? DISABLED?????????????????????????????????????????????0
??????? 查詢v$archive_dest_status 視圖,如果打開了實時應用,則recovery_mode 會顯示為:MANAGEDREAL TIME APPLY,例如:
??????? SQL> select recovery_mode from v$archive_dest_status where dest_id=2;
??????? RECOVERY_MODE
??????? -----------------------
??????? MANAGED REAL TIME APPLY
??????? 該視圖顯示那些被自動觸發寫入alert.log 或服務器trace 文件的事件。通常是在你不便訪問到服務器查詢alert.log 時,可以臨時訪問本視圖查看一些與dataguard 相關的信息,例如:
??????? SQL> select message from v$dataguard_status;
??????? MESSAGE
??????? ----------------------------------------------------------------------------
??????? ARC0:Archival started
??????? ARC1:Archival started
??????? ARC0: Becoming the 'no FAL' ARCH
??????? ARC0: Becoming the 'no SRL' ARCH
??????? ARC1: Becoming the heartbeat ARCH
??????? Attempt to start background Managed Standby Recovery process
??????? MRP0: Background Managed Standby Recovery process started
??????? Managed Standby Recovery not using Real Time Apply
??????? Media Recovery Waiting for thread 1 sequence 761
??? SQL> alter database recover managed standby database parallel 2 disconnect from session;
2、加快redo 應用頻繁
??? 設置初始化參數DB_BLOCK_CHECKING=FALSE 能夠提高2 倍左右的應用效率,該參數是驗證數據塊是否有效, 對于standby 禁止驗證基本上還是可以接受的, 另外還有一個關聯初始化參數DB_BLOCK_CHECKSUM,建議該參數在primary 和standby 都設置為true。
??? 如果打開了并行恢復,適當提高初始化參數:PARALLEL_EXECUTION_MESSAGE_SIZE 的參數值,比如4096 也能提高大概20%左右的性能,不過需要注意增大這個參數的參數值可能會占用更多內存。
??? 在恢復期間最大瓶頸就是I/O 讀寫,要緩解這個瓶頸,使用本地異步I/O 并設置初始化參數DISK_ASYNCH_IO=TRUE 會有所幫助。DISK_ASYNCH_IO 參數控制到數據文件的磁盤I/O 是否異步。某些情況下異步I/O 能降低數據庫文件并行讀取,提高整個恢復時間。