???
SQL> startup
??? ORACLE 例程已經(jīng)啟動(dòng)。
??? ......
??? SQL> alter database recover managed standby database cancel;
??? 數(shù)據(jù)庫已更改。
??? SQL> alter database open ;
??? 數(shù)據(jù)庫已更改。
??? SQL> select status from v$instance;
??? STATUS
??? ------------
??? OPEN
??? SQL> alter database recover managed standby database disconnect from session;
??? 數(shù)據(jù)庫已更改。
??? SQL> select status from v$instance;
??? STATUS
??? ------------
??? MOUNTED
??? ● 修改表空間狀態(tài)(例如read-write 到read-only,online 到offline)
??? ● 創(chuàng)建修改刪除表空間或數(shù)據(jù)文件(如果初始化參數(shù)STANDBY_FILE_MANAGEMENT 被設(shè)置為AUTO 的話,這點(diǎn)在前面第一章的時(shí)候提到過)
??? ● 如果設(shè)置為manual,則需要手工復(fù)制新創(chuàng)建的數(shù)據(jù)文件到standby 服務(wù)器。
??? 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;
??????? 表空間已創(chuàng)建。
??????? 檢查剛添加的數(shù)據(jù)文件
??????? 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;
??????? 系統(tǒng)已更改。
??????? 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;
??????? 系統(tǒng)已更改。
??????? 提示:使用including 子句刪除表空間時(shí),
??????? 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 行。
??????? 得出結(jié)論,對(duì)于初始化參數(shù)STANDBY_FILE_MANAGMENT 設(shè)置為auto 的話,對(duì)于表空間和數(shù)據(jù)文件的操作完全無須dba 手工干預(yù),primary 和standby 都能很好的處理。
??????? SQL> create tablespace mytmp datafile 'e:\ora10g\oradata\jssweb\mytmp01.dbf' size 20m;
??????? 表空間已創(chuàng)建。
??????? 檢查剛添加的數(shù)據(jù)文件
??????? 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;
??????? 系統(tǒng)已更改。
??????? 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 行。
??????? 可以看到,表空間已經(jīng)自動(dòng)創(chuàng)建,但是,數(shù)據(jù)文件卻被起了個(gè)怪名字,手工修改其與primary
??????? 數(shù)據(jù)庫保持一致,如下(注意執(zhí)行命令之后手工復(fù)制數(shù)據(jù)文件到standby):
??????? SQL> alter database create datafile'E:\ORA10G\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00006'
?????????? 2 as 'E:\ora10g\oradata\jsspdg\mytmp01.dbf';
??????? 數(shù)據(jù)庫已更改。
??????? 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;
??????? 系統(tǒng)已更改。
??????? 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 行。
??????? 呀,數(shù)據(jù)還在啊。趕緊分析分析,查看alert_jsspdg.log 文件,發(fā)現(xiàn)如下(特別注意粗體):
??????? 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
??????? 這下明白了,為什么有個(gè)UNNAMED00006 的數(shù)據(jù)文件,也曉得為啥standby 數(shù)據(jù)庫沒能刪除新加的表空間了吧,原來是后臺(tái)的redo 應(yīng)用被停掉了,重啟redo 應(yīng)用再來看看:
??????? SQL> alter database recover managed standby database disconnect from session;
??????? 數(shù)據(jù)庫已更改。
??????? 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;
??? 數(shù)據(jù)庫已更改。
??? SQL> shutdown immediate
??? ORA-01109: 數(shù)據(jù)庫未打開
??? ......
??? 方式多樣,不詳述。
??? SQL> startup mount
??? ORACLE 例程已經(jīng)啟動(dòng)。
??? Total System Global Area 167772160 bytes
??? Fixed Size 1289484 bytes
??? Variable Size 150995700 bytes
??? Database Buffers 8388608 bytes
??? Redo Buffers 7098368 bytes
??? 數(shù)據(jù)庫裝載完畢。
??? SQL> alter database rename file
????? 2 'E:\ORA10G\ORADATA\JSSPDG\WEBTBS01.DBF' to
????? 3 'E:\ORA10G\ORADATA\JSSPDG\TBSWEB01.DBF';
??? 數(shù)據(jù)庫已更改。
??? SQL> alter database recover managed standby database disconnect from session;
??? 數(shù)據(jù)庫已更改。
??? SQL> alter system switch logfile;
??? 系統(tǒng)已更改。
??? 當(dāng)primary 數(shù)據(jù)庫被以resetlogs 打開之后,dg 提供了一些方案,能夠讓你快速的恢復(fù)物理standby,當(dāng)然這是有條件的,不可能所有的情況都可以快速恢復(fù)。我們都知道alter database open resetlogs 之后,數(shù)據(jù)庫的scn被重置,也就是此時(shí)其redo 數(shù)據(jù)也會(huì)從頭開始。當(dāng)物理standby 接收到新的redo 數(shù)據(jù)時(shí),redo 應(yīng)用會(huì)自動(dòng)獲取這部分redo 數(shù)據(jù)。對(duì)于物理standby 而言,只要數(shù)據(jù)庫沒有應(yīng)用resetlogs 之后的redo 數(shù)據(jù),那么這個(gè)過程是不需要dba 手工參與的。
?
Standby數(shù)據(jù)庫狀態(tài) | Standby服務(wù)器操作 | 解決方案 |
沒有應(yīng)用resetlog之前的redo數(shù)據(jù) | 自動(dòng)應(yīng)用新的redo數(shù)據(jù) | 無須手工介入 |
應(yīng)用了resetlog之后的redo數(shù)據(jù),不過standby打開了flashback。 | 可以應(yīng)用,不過需要dba手工介入 |
1.手工flashback到應(yīng)用之前 2.重啟redo應(yīng)用,以重新接收新的redo數(shù)據(jù)。 |
應(yīng)用了resetlog之后的redo數(shù)據(jù),而且沒有flashback。 | 完全無法應(yīng)用 | 重建物理standby是唯一的選擇 |
??? 本節(jié)主要介紹一些監(jiān)控dg 配置的方式,先給大家提供一個(gè)表格(描述不同事件的不同信息監(jiān)控途徑):
primary數(shù)據(jù)庫事件 | primary監(jiān)控途徑 | standby監(jiān)控途徑 |
帶有enable|disable thread子句的alterdatabase命令 |
Alert.log V$THREAD |
Alert.log |
當(dāng)前數(shù)據(jù)庫角色,保護(hù)模式,保護(hù)級(jí)別,switchover狀態(tài),failover快速啟動(dòng)信息等 | V$DATABASE | V$DATABASE |
Redo log切換 |
Alert.log V$LOG V$LOGFILE的status列 |
Alert.log |
重建控制文件 | Alert log | Alert log |
手動(dòng)執(zhí)行恢復(fù) | Alert log | Alert log |
表空間狀態(tài)修改(read-write/read-only,online/offline) |
DBA_TABLESPACES Alert log |
V$RECOVER_FILE |
創(chuàng)建刪除表空間或數(shù)據(jù)文件 |
DBA_DATA_FILES Alert log |
V$DATAFILE Alert log |
表空間或數(shù)據(jù)文件offline |
V$RECOVER_FILE Alert log DBA_TABLESPACES |
V$RECOVER_FILE DBA_TABLESPACES |
重命名數(shù)據(jù)文件 |
V$DATAFILE Alert log |
V$DATAFILE Alert log |
未被日志記錄或不可恢復(fù)的操作 |
V$DATAFILE view V$DATABASE view |
Alert.log |
恢復(fù)的進(jìn)程 |
V$ARCHIVE_DEST_STATUS Alert log |
V$ARCHIVED_LOG V$LOG_HISTORY V$MANAGED_STANDBY Alert log |
Redo傳輸?shù)臓顟B(tài)和進(jìn)度 |
V$ARCHIVE_DEST_STATUS V$ARCHIVED_LOG V$ARCHIVE_DEST Alert log |
V$ARCHIVED_LOG Alert log |
數(shù)據(jù)文件自動(dòng)擴(kuò)展 | Alert log | Alert log |
執(zhí)行OPEN RESETLOGS或CLEAR UNARCHIVED LOGFILES | Alert log | Alert log |
修改初始化參數(shù) | Alert log | Alert log |
??? 先也是一句話:做為oracle 自己自覺主動(dòng)維護(hù)的一批虛擬表它的作用非常明顯通過它可以及時(shí)獲得當(dāng)前數(shù)據(jù)庫狀態(tài)及處理進(jìn)度總之好處多多也需特別關(guān)注后面示例也會(huì)多處用到大家要擦亮雙眼。
??????? 該視圖就是專為顯示standby 數(shù)據(jù)庫相關(guān)進(jìn)程的當(dāng)前狀態(tài)信息,例如:
??????? 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:顯示進(jìn)程信息
??????? CLIENT_PROCESS:顯示對(duì)應(yīng)的主數(shù)據(jù)庫中的進(jìn)程
??????? SEQUENCE#:顯示歸檔redo 的序列號(hào)
??????? STATUS:顯示的進(jìn)程狀態(tài)
??????? 該視圖顯示歸檔文件路徑配置信息及redo 的應(yīng)用情況等,例如:
??????? 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 數(shù)據(jù)庫歸檔文件的一些附加信息,比如文件創(chuàng)建時(shí)間啦,創(chuàng)建進(jìn)程啦,歸檔序號(hào)啦,是否被應(yīng)用啦之類,例如:
??????? 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 庫中所有已被應(yīng)用的歸檔文件信息(不論該歸檔文件是否還存在),例如:
??????? 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
??????? 例如,查詢數(shù)據(jù)庫角色,保護(hù)模式,保護(hù)級(jí)別等:
??????? 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 視圖,如果打開了實(shí)時(shí)應(yīng)用,則recovery_mode 會(huì)顯示為:MANAGEDREAL TIME APPLY,例如:
??????? SQL> select recovery_mode from v$archive_dest_status where dest_id=2;
??????? RECOVERY_MODE
??????? -----------------------
??????? MANAGED REAL TIME APPLY
??????? 該視圖顯示那些被自動(dòng)觸發(fā)寫入alert.log 或服務(wù)器trace 文件的事件。通常是在你不便訪問到服務(wù)器查詢alert.log 時(shí),可以臨時(shí)訪問本視圖查看一些與dataguard 相關(guān)的信息,例如:
??????? 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 應(yīng)用頻繁
??? 設(shè)置初始化參數(shù)DB_BLOCK_CHECKING=FALSE 能夠提高2 倍左右的應(yīng)用效率,該參數(shù)是驗(yàn)證數(shù)據(jù)塊是否有效, 對(duì)于standby 禁止驗(yàn)證基本上還是可以接受的, 另外還有一個(gè)關(guān)聯(lián)初始化參數(shù)DB_BLOCK_CHECKSUM,建議該參數(shù)在primary 和standby 都設(shè)置為true。
??? 如果打開了并行恢復(fù),適當(dāng)提高初始化參數(shù):PARALLEL_EXECUTION_MESSAGE_SIZE 的參數(shù)值,比如4096 也能提高大概20%左右的性能,不過需要注意增大這個(gè)參數(shù)的參數(shù)值可能會(huì)占用更多內(nèi)存。
??? 在恢復(fù)期間最大瓶頸就是I/O 讀寫,要緩解這個(gè)瓶頸,使用本地異步I/O 并設(shè)置初始化參數(shù)DISK_ASYNCH_IO=TRUE 會(huì)有所幫助。DISK_ASYNCH_IO 參數(shù)控制到數(shù)據(jù)文件的磁盤I/O 是否異步。某些情況下異步I/O 能降低數(shù)據(jù)庫文件并行讀取,提高整個(gè)恢復(fù)時(shí)間。