【DATAGUARD 學習】管理影響備庫的主庫事件

楊奇龍發表於2010-09-23

版本 11g 主庫 ORCL  備庫 TESTDG
1新增資料檔案或表空間
2刪除資料檔案或表空間
3使用可傳輸表空間
4重新命名資料檔案
5新增或刪除重做日誌
6使用NOLOGGING或unrecoverable子句操作ddl或dml
7更改初始化引數

一 新增資料檔案或表空間
1 standby_file_management =AUTO 時
主庫上的操作
ORCL>
ORCL>col tsname for a20
ORCL>col dfname for a50
ORCL>select ts.name tsname,df.name dfname
  2  from v$tablespace ts,v$datafile df
  3  where ts.ts#=df.ts#;
TSNAME               DFNAME
-------------------- --------------------------------------------------
SYSTEM               F:\ORCL\ORADATA\ORCL\SYSTEM01.DBF
SYSAUX               F:\ORCL\ORADATA\ORCL\SYSAUX01.DBF 
UNDOTBS1             F:\ORCL\ORADATA\ORCL\UNDOTBS01.DBF
USERS                F:\ORCL\ORADATA\ORCL\USERS01.DBF 
EXAMPLE              F:\ORCL\ORADATA\ORCL\EXAMPLE01.DBF
TESTDG>alter database recover managed standby database disconnect from session;
資料庫已更改。
TESTDG>select ts.name tsname , df.name dfname
  2  from v$tablespace ts,v$datafile df
  3  where ts.ts#=df.ts#;

TSNAME               DFNAME                                                 
-------------------- -------------------------------------
SYSTEM               D:\ORACLE\TESTDGDATA\SYSTEM01.DBF
SYSAUX               D:\ORACLE\TESTDGDATA\SYSAUX01.DBF 
UNDOTBS1             D:\ORACLE\TESTDGDATA\UNDOTBS01.DBF
USERS                D:\ORACLE\TESTDGDATA\USERS01.DBF 
EXAMPLE              D:\ORACLE\TESTDGDATA\EXAMPLE01.DBF
--建立表空間或資料檔案
ORCL>create tablespace dg_tbs datafile 'f:\orcl\oradata\orcl\dg_tbs01.dbf'

size 100 m;
表空間已建立。
ORCL>select ts.name tsname,df.name dfname
  2  from v$tablespace ts,v$datafile df
  3  where ts.ts#=df.ts#;
TSNAME               DFNAME 
-------------------- ---------------------------------------
SYSTEM               F:\ORCL\ORADATA\ORCL\SYSTEM01.DBF 
SYSAUX               F:\ORCL\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1             F:\ORCL\ORADATA\ORCL\UNDOTBS01.DBF
USERS                F:\ORCL\ORADATA\ORCL\USERS01.DBF
EXAMPLE              F:\ORCL\ORADATA\ORCL\EXAMPLE01.DBF
DG_TBS               F:\ORCL\ORADATA\ORCL\DG_TBS01.DBF
已選擇6行。
ORCL>alter system switch logfile;
系統已更改。

TESTDG>--applied redo logs
TESTDG>select ts.name tsname , df.name dfname
  2  from v$tablespace ts,v$datafile df
  3  where ts.ts#=df.ts#;
TSNAME               DFNAME                                                 
-------------------- --------------------------------------------------     
SYSTEM               D:\ORACLE\TESTDGDATA\SYSTEM01.DBF                      
SYSAUX               D:\ORACLE\TESTDGDATA\SYSAUX01.DBF
UNDOTBS1             D:\ORACLE\TESTDGDATA\UNDOTBS01.DBF
USERS                D:\ORACLE\TESTDGDATA\USERS01.DBF 
EXAMPLE              D:\ORACLE\TESTDGDATA\EXAMPLE01.DBF
DG_TBS               D:\ORACLE\TESTDGDATA\DG_TBS01.DBF ---已成功應用redo
已選擇6行。

---當standby_file_management=manual時,在主庫端新增資料檔案
TESTDG>---設定standby_file_management =manual
TESTDG>alter system set standby_file_management=manual;
系統已更改。

ORCL>alter tablespace dg_tbs add  datafile

'f:\orcl\oradata\orcl\dg_tbs02.dbf' size 100m;
表空間已更改。
ORCL>select ts.name tsname,df.name dfname
  2  from v$tablespace ts,v$datafile df
  3  where ts.ts#=df.ts#;
TSNAME               DFNAME 
-------------------- ----------------------------------------
SYSTEM               F:\ORCL\ORADATA\ORCL\SYSTEM01.DBF  
SYSAUX               F:\ORCL\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1             F:\ORCL\ORADATA\ORCL\UNDOTBS01.DBF
USERS                F:\ORCL\ORADATA\ORCL\USERS01.DBF 
EXAMPLE              F:\ORCL\ORADATA\ORCL\EXAMPLE01.DBF
DG_TBS               F:\ORCL\ORADATA\ORCL\DG_TBS01.DBF
DG_TBS               F:\ORCL\ORADATA\ORCL\DG_TBS02.DBF
已選擇7行。
ORCL>alter system switch logfile;
系統已更改。
TESTDG>select ts.name tsname , df.name dfname
  2  from v$tablespace ts,v$datafile df
  3  where ts.ts#=df.ts#;
select ts.name tsname , df.name dfname
*
第 1 行出現錯誤:
ORA-01089: 正在執行立即關閉 - 不允許進行任何操作  ---
程式 ID: 2580
會話 ID: 170 序列號: 11

TESTDG>select process,status,thread#,sequence#,block#,blocks
  2  from v$managed_standby;
ERROR:
ORA-03114: 未連線到 ORALCE

TESTDG>conn system/yang as sysdba
已連線。
TESTDG>select process,status,thread#,sequence#,block#,blocks
  2  from v$managed_standby;
PROCESS   STATUS          THREAD#  SEQUENCE#     BLOCK#     BLOCKS             
--------- ------------ ---------- ---------- ---------- ---------- 
ARCH      CONNECTED             0          0          0          0
ARCH      CLOSING               1         36       2049        981
ARCH      CLOSING               1         37          1        189
ARCH      CLOSING               1         38       2049       1405

TESTDG>select ts.name tsname , df.name dfname
  2  from v$tablespace ts,v$datafile df
  3  where ts.ts#=df.ts#;

TSNAME               DFNAME
-------------------- ----------------------------------------
SYSTEM               D:\ORACLE\TESTDGDATA\SYSTEM01.DBF 
SYSAUX               D:\ORACLE\TESTDGDATA\SYSAUX01.DBF
UNDOTBS1             D:\ORACLE\TESTDGDATA\UNDOTBS01.DBF
USERS                D:\ORACLE\TESTDGDATA\USERS01.DBF 
EXAMPLE              D:\ORACLE\TESTDGDATA\EXAMPLE01.DBF
DG_TBS               D:\ORACLE\TESTDGDATA\DG_TBS01.DBF
DG_TBS               F:\ORCL\PRODUCT\11.1.0\DB_1\DATABASE\UNNAMED00007

已選擇7行。
TESTDG>select recovery_mode from v$archive_dest_status where dest_id =2;
RECOVERY_MODE                                                               
-----------------------                                                     
IDLE                                                                        
TESTDG>--最後一條的資料檔名稱為系統自己命名的。要dba手工重新命名到正確的路徑
TESTDG>alter database create datafile 'f:\orcl\product\11.1.0\db_1\database\unnamed00007' as 'd:\oracle\testdgdata\dg_tbs02.dbf';
資料庫已更改。
TESTDG>select ts.name tsname , df.name dfname
  2  from v$tablespace ts,v$datafile df
  3  where ts.ts#=df.ts#;

TSNAME               DFNAME                                                   
-------------------- ---------------------------------------------
SYSTEM               D:\ORACLE\TESTDGDATA\SYSTEM01.DBF
SYSAUX               D:\ORACLE\TESTDGDATA\SYSAUX01.DBF
UNDOTBS1             D:\ORACLE\TESTDGDATA\UNDOTBS01.DBF
USERS                D:\ORACLE\TESTDGDATA\USERS01.DBF
EXAMPLE              D:\ORACLE\TESTDGDATA\EXAMPLE01.DBF
DG_TBS               D:\ORACLE\TESTDGDATA\DG_TBS01.DBF
DG_TBS               D:\ORACLE\TESTDGDATA\DG_TBS02.DBF
已選擇7行。
TESTDG>---記得上面的那個錯吧,由於自動建立的資料檔案路徑不對,應用redo資料失敗導致整個redo應用都被中止,解決了此問題後要記得啟動redo應用。
TESTDG>alter database recover managed standby database disconnect from session;
資料庫已更改。
ORCL>-- 刪除表空間
ORCL>drop tablespace dg_tbs including contents and datafiles;
表空間已刪除。
ORCL>select ts.name tsname,df.name dfname
  2  from v$tablespace ts,v$datafile df
  3  where ts.ts#=df.ts#;

TSNAME               DFNAME
-------------------- ----------------------------------------
SYSTEM               F:\ORCL\ORADATA\ORCL\SYSTEM01.DBF 
SYSAUX               F:\ORCL\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1             F:\ORCL\ORADATA\ORCL\UNDOTBS01.DBF
USERS                F:\ORCL\ORADATA\ORCL\USERS01.DBF 
EXAMPLE              F:\ORCL\ORADATA\ORCL\EXAMPLE01.DBF                     


ORCL>select sequence# from v$log;
 SEQUENCE#                                                                  
---------- 
        37 
        38 
        39 
ORCL>alter system switch logfile;
系統已更改。
TESTDG>--刪除表空間
TESTDG>alter system set standby_file_management=auto;
系統已更改。
TESTDG>select ts.name tsname , df.name dfname
  2  from v$tablespace ts,v$datafile df
  3  where ts.ts#=df.ts#;
TSNAME               DFNAME 
-------------------- ---------------------------------------
SYSTEM               D:\ORACLE\TESTDGDATA\SYSTEM01.DBF 
SYSAUX               D:\ORACLE\TESTDGDATA\SYSAUX01.DBF 
UNDOTBS1             D:\ORACLE\TESTDGDATA\UNDOTBS01.DBF
USERS                D:\ORACLE\TESTDGDATA\USERS01.DBF 
EXAMPLE              D:\ORACLE\TESTDGDATA\EXAMPLE01.DBF

----當standb_file_management=manual時,刪除表空間和資料檔案
ORCL>create tablespace dg_tbs datafile 'f:\orcl\oradata\orcl\dg_tbs01.dbf' size 10 m;
表空間已建立。
ORCL>alter system switch logfile;----使備庫應用redo。
系統已更改。

TESTDG>select ts.name tsname , df.name dfname
  2  from v$tablespace ts,v$datafile df
  3  where ts.ts#=df.ts#;

TSNAME               DFNAME                                                    
-------------------- -----------------------------------
SYSTEM               D:\ORACLE\TESTDGDATA\SYSTEM01.DBF
SYSAUX               D:\ORACLE\TESTDGDATA\SYSAUX01.DBF
UNDOTBS1             D:\ORACLE\TESTDGDATA\UNDOTBS01.DBF
USERS                D:\ORACLE\TESTDGDATA\USERS01.DBF  
EXAMPLE              D:\ORACLE\TESTDGDATA\EXAMPLE01.DBF
DG_TBS               D:\ORACLE\TESTDGDATA\DG_TBS01.DBF 

已選擇6行。
ORCL>drop tablespace dg_tbs including contents and datafiles;
表空間已刪除。
ORCL>select ts.name tsname,df.name dfname
  2  from v$tablespace ts,v$datafile df
  3  where ts.ts#=df.ts#;
TSNAME               DFNAME 
-------------------- --------------------------------------------
SYSTEM               F:\ORCL\ORADATA\ORCL\SYSTEM01.DBF  
SYSAUX               F:\ORCL\ORADATA\ORCL\SYSAUX01.DBF  
UNDOTBS1             F:\ORCL\ORADATA\ORCL\UNDOTBS01.DBF 
USERS                F:\ORCL\ORADATA\ORCL\USERS01.DBF 
EXAMPLE              F:\ORCL\ORADATA\ORCL\EXAMPLE01.DBF
ORCL>alter system switch logfile;
系統已更改。
ORCL>select sequence# from v$log;
 SEQUENCE#   
----------    
        40    
        41    
        42    
ORCL>alter system switch logfile;
系統已更改。
ORCL>select sequence# from v$log;
 SEQUENCE#                        
----------     
        43     
        41   
        42   
ORCL>alter system switch logfile;
系統已更改。
ORCL>alter system set log_archive_dest_state_2 =defer;
系統已更改。
   文件上說當使在主庫使用drop tablespace including contents and datafiles語句來在主庫上同時刪除資料檔案,必須要使用standby_file_management=auto,沒有給出如果使用manual會怎麼樣,在備庫上刪除表空間時提示錯誤,因為是read only的,所以不應該在備庫上進行產生redo的操作。我做的實驗過程如下:
TESTDG>select ts.name tsname , df.name dfname
  2  from v$tablespace ts,v$datafile df
  3  where ts.ts#=df.ts#;
TSNAME               DFNAME
-------------------- -------------------------------------
SYSTEM               D:\ORACLE\TESTDGDATA\SYSTEM01.DBF
SYSAUX               D:\ORACLE\TESTDGDATA\SYSAUX01.DBF  
UNDOTBS1             D:\ORACLE\TESTDGDATA\UNDOTBS01.DBF 
USERS                D:\ORACLE\TESTDGDATA\USERS01.DBF 
EXAMPLE              D:\ORACLE\TESTDGDATA\EXAMPLE01.DBF 
DG_TBS               D:\ORACLE\TESTDGDATA\DG_TBS01.DBF

已選擇6行。

TESTDG>select sequence# from v$log;
 SEQUENCE# 
---------- 
        40  
        42  
        41                                                                     
TESTDG>select sequence# from v$log;
 SEQUENCE#                                                                     
----------
        43
        42 
        41 

TESTDG>drop tablespace dg_tbs include contents and datafiles;
drop tablespace dg_tbs include contents and datafiles
                       *
第 1 行出現錯誤:
ORA-02173: 無效的 DROP TABLESPACE 選項
TESTDG>drop tablespace dg_tbs including contents and datafiles;
drop tablespace dg_tbs including contents and datafiles
*
第 1 行出現錯誤:
ORA-01109: 資料庫未開啟

TESTDG>alter database recovery managed standby database cancel;
alter database recovery managed standby database cancel
                        *
第 1 行出現錯誤:
ORA-02231: ALTER DATABASE 選項缺失或無效

TESTDG>alter database recover managed standby database cancel;
alter database recover managed standby database cancel
*
第 1 行出現錯誤:
ORA-16136: 受管備用恢復未啟用

TESTDG>alter system set standby_file_management=auto;
系統已更改。
          
TESTDG>select process,status,thread#,sequence#,block#,blocks
  2  from v$managed_standby;----檢視redo 應用情況。

PROCESS   STATUS          THREAD#  SEQUENCE#     BLOCK#     BLOCKS             
--------- ------------ ---------- ---------- ---------- ----------             
ARCH      CLOSING               1         42          1        205             
ARCH      CLOSING               1         39          1        758             
ARCH      CLOSING               1         40          1        982             
ARCH      CLOSING               1         41          1        304             
RFS       IDLE                  0          0          0          0             
RFS       IDLE                  1         43       7977          2             
RFS       IDLE                  0          0          0          0             

已選擇7行。
---在備庫上手工刪除時,提示錯誤!         
TESTDG>alter database recover managed standby database cancel;
alter database recover managed standby database cancel
*
第 1 行出現錯誤:
ORA-16136: 受管備用恢復未啟用
TESTDG>alter database recover managed standby database disconnect from session;
資料庫已更改。
TESTDG>drop tablespace dg_tbs including contents and datafiles;
drop tablespace dg_tbs including contents and datafiles
*
第 1 行出現錯誤:
ORA-16000: 開啟資料庫以進行只讀訪問

TESTDG>select process ,client_process,sequence#,status from v$managed_standby;
PROCESS   CLIENT_P  SEQUENCE# STATUS  
--------- -------- ---------- ------------
ARCH      ARCH             42 CLOSING  
ARCH      ARCH             43 CLOSING  
ARCH      ARCH             40 CLOSING  
ARCH      ARCH             41 CLOSING 
RFS       UNKNOWN           0 IDLE  
MRP0      N/A              44 WAIT_FOR_LOG 
RFS       LGWR             44 IDLE   
RFS       UNKNOWN           0 IDLE  -----說明現在沒有在應用redo並且在等等44號歸檔redo 
已選擇8行。     
TESTDG>alter database recover managed standby database cancel;
資料庫已更改。
TESTDG>shutdown  immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
TESTDG>exit
-----第二次開啟備庫時,重新應用redo
TESTDG>alter database recover managed standby database disconnect from session;
資料庫已更改。
TESTDG>select thread#,sequence#,applied from v$archived_log;

   THREAD#  SEQUENCE# APP                                                      
---------- ---------- ---                                                      
         1         33 YES                                                      
         1         31 YES                                                      
         1         32 YES                                                      
         1         34 YES                                                      
         1         35 YES                                                      
         1         36 YES                                                      
         1         37 YES                                                      
         1         38 YES                                                      
         1         39 YES                                                      
         1         40 YES                                                      
         1         41 YES                                                     
         1         42 YES                                                      
         1         43 YES                                                      
         1         44 YES                                                      
         1         45 YES                                                      
         1         46 YES                                                      
         1         47 YES                                                      
         1         48 YES                                                      
         1         49 NO ---再次查詢時為YES,應用redo需要時間的                                                       
已選擇19行。
TESTDG>show parameter standby

NAME                                 TYPE        VALUE                         
------------------------------------ ----------- --------------------------
standby_archive_dest                 string      %ORACLE_HOME%\RDBMS 
standby_file_management              string      AUTO                          
TESTDG>select name from v$datafile;
NAME       
---------------------------------------------------------------------------
D:\ORACLE\TESTDGDATA\SYSTEM01.DBF     
D:\ORACLE\TESTDGDATA\SYSAUX01.DBF
D:\ORACLE\TESTDGDATA\UNDOTBS01.DBF
D:\ORACLE\TESTDGDATA\USERS01.DBF 
D:\ORACLE\TESTDGDATA\EXAMPLE01.DBF
----發現在手工沒有刪除DG_TBS 的情況下,備庫已經成功應用了主機的日誌,刪除了表空間DG_TBS!
TESTDG>select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)    
--------------  
            49 
----三思的書中也是說需要手工使用系統命令刪除刪除在主機上已經被刪除的資料檔案。不過我的沒有這麼做!:
---重新命名資料檔案,主庫對資料檔案重新命名時,此修改並不會自動傳播到standby資料庫。不管是auto還是manual,都得DBA手工操作。
ORCL>create tablespace test datafile 'f:\orcl\oradata\orcl\test01.dbf' size  200m;
表空間已建立。
ORCL>select name from v$datafile;
NAME                                                                           
--------------------------------------------------
F:\ORCL\ORADATA\ORCL\SYSTEM01.DBF                                              
F:\ORCL\ORADATA\ORCL\SYSAUX01.DBF                                              
F:\ORCL\ORADATA\ORCL\UNDOTBS01.DBF                                             
F:\ORCL\ORADATA\ORCL\USERS01.DBF                                               
F:\ORCL\ORADATA\ORCL\EXAMPLE01.DBF                                             
F:\ORCL\ORADATA\ORCL\TEST01.DBF         
已選擇6行。
ORCL>alter system switch logfile;
系統已更改。
---重新命名資料檔案
ORCL>alter tablespace test offline;
表空間已更改。
ORCL>host rename f:\orcl\oradata\orcl\test01.dbf test02.dbf
ORCL>alter tablespace test rename datafile
  2  'f:\orcl\oradata\orcl\test01.dbf' to
  3  'f:\orcl\oradata\orcl\test02.dbf';
表空間已更改。
ORCL>alter tablespace test online;
表空間已更改
ORCL>alter system switch logfile;
系統已更改。
ORCL>select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)                                                                 
--------------                                                                 
            51 
     
TESTDG>select name from v$datafile;
NAME                                                                           
-----------------------------------------------------------------------
D:\ORACLE\TESTDGDATA\SYSTEM01.DBF
D:\ORACLE\TESTDGDATA\SYSAUX01.DBF
D:\ORACLE\TESTDGDATA\UNDOTBS01.DBF
D:\ORACLE\TESTDGDATA\USERS01.DBF 
D:\ORACLE\TESTDGDATA\EXAMPLE01.DBF
D:\ORACLE\TESTDGDATA\TEST01.DBF--沒有改變
已選擇6行。
TESTDG>select thread#,sequence#,applied from v$archived_log
  2  where sequence#=51;
   THREAD#  SEQUENCE# APP 
---------- ---------- --- 
         1         51 YES 
---首先停止應用。
TESTDG>alter database recover managed standby database cancel;
資料庫已更改。
---手工更改名稱
TESTDG>host rename d:\oracle\testdgdata\test01.dbf test02.dbf
TESTDG>alter database rename file
  2  'd:\oracle\testdgdata\test01.dbf' to
  3  'd:\oracle\testdgdata\test02.dbf';
alter database rename file
*
第 1 行出現錯誤:
ORA-01511: 重新命名日誌/資料檔案時出錯
ORA-01275: 自動進行備用檔案管理時, 不允許進行 RENAME 操作。
TESTDG>alter system set standby_file_management=manual;
系統已更改。

TESTDG>alter database rename file
  2  'd:\oracle\testdgdata\test01.dbf' to
  3  'd:\oracle\testdgdata\test02.dbf';
資料庫已更改。
TESTDG>select name from v$datafile;
NAME                                                                           
-----------------------------------------
D:\ORACLE\TESTDGDATA\SYSTEM01.DBF    
D:\ORACLE\TESTDGDATA\SYSAUX01.DBF  
D:\ORACLE\TESTDGDATA\UNDOTBS01.DBF 
D:\ORACLE\TESTDGDATA\USERS01.DBF  
D:\ORACLE\TESTDGDATA\EXAMPLE01.DBF
D:\ORACLE\TESTDGDATA\TEST02.DBF  
已選擇6行。
---修改後重新開始應用redo
TESTDG>alter system set standby_file_management=auto;
系統已更改。
TESTDG>alter database recover managed standby database disconnect from session;
資料庫已更改。
ORCL>alter system switch logfile;
系統已更改。

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

相關文章