天天看點

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

版本 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

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;

表空間已建立。

TSNAME               DFNAME 

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

SYSTEM               F:\ORCL\ORADATA\ORCL\SYSTEM01.DBF 

SYSAUX               F:\ORCL\ORADATA\ORCL\SYSAUX01.DBF

USERS                F:\ORCL\ORADATA\ORCL\USERS01.DBF

DG_TBS               F:\ORCL\ORADATA\ORCL\DG_TBS01.DBF

已選擇6行。

ORCL>alter system switch logfile;

系統已更改。

TESTDG>--applied redo logs

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

SYSTEM               D:\ORACLE\TESTDGDATA\SYSTEM01.DBF                      

SYSAUX               D:\ORACLE\TESTDGDATA\SYSAUX01.DBF

DG_TBS               D:\ORACLE\TESTDGDATA\DG_TBS01.DBF ---已成功應用redo

---當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;

表空間已更改。

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

SYSTEM               F:\ORCL\ORADATA\ORCL\SYSTEM01.DBF  

DG_TBS               F:\ORCL\ORADATA\ORCL\DG_TBS02.DBF

已選擇7行。

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

已連接配接。

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

SYSTEM               D:\ORACLE\TESTDGDATA\SYSTEM01.DBF 

DG_TBS               D:\ORACLE\TESTDGDATA\DG_TBS01.DBF

DG_TBS               F:\ORCL\PRODUCT\11.1.0\DB_1\DATABASE\UNNAMED00007

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';

TSNAME               DFNAME                                                   

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

USERS                D:\ORACLE\TESTDGDATA\USERS01.DBF

DG_TBS               D:\ORACLE\TESTDGDATA\DG_TBS02.DBF

TESTDG>---記得上面的那個錯吧,由于自動建立的資料檔案路徑不對,應用redo資料失敗導緻整個redo應用都被中止,解決了此問題後要記得啟動redo應用。

ORCL>-- 删除表空間

ORCL>drop tablespace dg_tbs including contents and datafiles;

表空間已删除。

EXAMPLE              F:\ORCL\ORADATA\ORCL\EXAMPLE01.DBF                     

ORCL>select sequence# from v$log;

 SEQUENCE#                                                                  

---------- 

        37 

        38 

        39 

TESTDG>--删除表空間

TESTDG>alter system set standby_file_management=auto;

----當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。

TSNAME               DFNAME                                                    

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

USERS                D:\ORACLE\TESTDGDATA\USERS01.DBF  

DG_TBS               D:\ORACLE\TESTDGDATA\DG_TBS01.DBF 

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

SYSAUX               F:\ORCL\ORADATA\ORCL\SYSAUX01.DBF  

UNDOTBS1             F:\ORCL\ORADATA\ORCL\UNDOTBS01.DBF 

 SEQUENCE#   

----------    

        40    

        41    

        42    

 SEQUENCE#                        

----------     

        43     

        41   

        42   

ORCL>alter system set log_archive_dest_state_2 =defer;

   文檔上說當使在主庫使用drop tablespace including contents and datafiles語句來在主庫上同時删除資料檔案,必須要使用standby_file_management=auto,沒有給出如果使用manual會怎麼樣,在備庫上删除表空間時提示錯誤,因為是read only的,是以不應該在備庫上進行産生redo的操作。我做的實驗過程如下:

SYSAUX               D:\ORACLE\TESTDGDATA\SYSAUX01.DBF  

UNDOTBS1             D:\ORACLE\TESTDGDATA\UNDOTBS01.DBF 

EXAMPLE              D:\ORACLE\TESTDGDATA\EXAMPLE01.DBF 

TESTDG>select sequence# from v$log;

 SEQUENCE# 

        40  

        42  

        41                                                                     

 SEQUENCE#                                                                     

----------

        43

        42 

        41 

TESTDG>drop tablespace dg_tbs include contents and datafiles;

drop tablespace dg_tbs include contents and datafiles

                       *

ORA-02173: 無效的 DROP TABLESPACE 選項

TESTDG>drop tablespace dg_tbs including contents and datafiles;

drop tablespace dg_tbs including contents and datafiles

ORA-01109: 資料庫未打開

TESTDG>alter database recovery managed standby database cancel;

alter database recovery managed standby database cancel

                        *

ORA-02231: ALTER DATABASE 選項缺失或無效

TESTDG>alter database recover managed standby database cancel;

alter database recover managed standby database cancel

ORA-16136: 受管備用恢複未激活

  2  from v$managed_standby;----檢視redo 應用情況。

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

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             

---在備庫上手工删除時,提示錯誤!         

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>shutdown  immediate

資料庫已經關閉。

已經解除安裝資料庫。

ORACLE 例程已經關閉。

TESTDG>exit

-----第二次打開備庫時,重新應用redo

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         

---重命名資料檔案

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>select max(sequence#) from v$archived_log;

MAX(SEQUENCE#)                                                                 

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

            51 

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

D:\ORACLE\TESTDGDATA\SYSTEM01.DBF

D:\ORACLE\TESTDGDATA\TEST01.DBF--沒有改變

TESTDG>select thread#,sequence#,applied from v$archived_log

  2  where sequence#=51;

   THREAD#  SEQUENCE# APP 

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

         1         51 YES 

---首先停止應用。

---手工更改名稱

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

ORA-01511: 重命名日志/資料檔案時出錯

ORA-01275: 自動進行備用檔案管理時, 不允許進行 RENAME 操作。

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

D:\ORACLE\TESTDGDATA\SYSTEM01.DBF    

D:\ORACLE\TESTDGDATA\SYSAUX01.DBF  

D:\ORACLE\TESTDGDATA\UNDOTBS01.DBF 

D:\ORACLE\TESTDGDATA\USERS01.DBF  

D:\ORACLE\TESTDGDATA\TEST02.DBF  

---修改後重新開始應用redo