天天看點

備份恢複12——複制資料庫與備用資料庫

1、建立複制資料庫:

分為使用者管理的方式建立複制資料庫和rman建立複制資料庫。

對于使用者管理的複制資料庫來說,還可以分為本機建立複制資料庫和不在本機建立複制資料庫,但是這兩個方式差別不大,建立 資料庫的方法步驟與建庫的方法基本類似。不寫了,自己參照書  P257 頁做吧。

重點寫寫rman管理的方式建立複制資料庫吧,這個才是重點。當使用rman管理的方式建立複制資料庫時,必須首先使用rman備份主資料庫的多有資料檔案、控制檔案和歸檔日志。示例如下:C:\> rman target sys/liu1232 mynewdb nocatalog;

RMAN >backup database include current controlfile plus archivelog format='g:\backup\%d_%s.bak';

在rman環境中,建立複制資料庫是使用duplicate指令來完成的。預設情況下,當建立複制資料庫時,會包含主資料庫的所有資料檔案。如果不希望複制資料庫包含隻讀表空間的資料檔案,則在執行duplicate指令時可以帶有skip readonly選項;如果要跳過特定的表空間,則執行duplicate指令時可以大有skip  tablespace選項;如果在不同主機上建立複制資料庫,并且與主資料庫采用完全相同的目錄結構和檔案名,則在執行duplicate指令時必須制定nofilenamecheck選項;如果要将複制資料庫恢複到過去的時間點,則可以使用set

until指令完成duplicate 。。until指令。當使用rman管理的方式建立複制資料庫時,需呀注意以下兩點:

* skip tablespace選項不能指定system表空間和undo表空間。

* 當在不同 主機上建立複制資料庫時,必須将rman備份集檔案複制到目标主機的相同目錄下。

在同一主機上建立rman管理的複制資料庫:

下面以建立執行個體名和資料庫名都是dupdb的複制資料庫為例,說明建立的步驟:

1) 建立存放複制資料庫各種相關檔案的os目錄:

> mkdir /tmp/oradata/dupdb

> mkdir /tmp/oradata/dupdb/bdump

> mkdir /tmp/oradata/dupdb/udump

> mkdir /tmp/oradata/dupdb/archive

2)建立複制資料庫執行個體名:當在unix系平台上建立複制資料庫時時,需要使用ORAPWD工具為執行個體建立密碼檔案;當在windows平台上建立複制資料庫時,必須為複制資料庫建立例程服務,使用oradim工具可以建立例程服務。下面以為複制資料庫dupdb建立例程服務為例,說明建立例程服務的方法。執行個體如下:

c:\> oradim  -new  -sid dupdb  -intpwd  oracle

3)建立複制資料庫執行個體的參數檔案。可以在主庫上使用create pfile指令為複制資料庫建立文本參數檔案,然後手工編輯相應的初始化參數,最後使用create spfile指令為複制資料庫建立伺服器參數檔案。

SQL> create pfile = '$ORACLE_HOME/dbs/initdupdb.ora'  from spfile; ;

編輯文本參數initdupdb.ora。修改db_name  instance_name  service_names control_files *_dest 等參數。

建立伺服器參數檔案。SQL>create spfile = '$ORACLE_HOME/spfiledupdb.ora'  from pfile = '$ORACLE_HOME/inttdupdb.ora';

4)啟動執行個體如果沒有為複制資料庫配置監聽程式和網絡服務名,那麼當啟動執行個體時,必須設定環境變量oracle_sid. 示例如下:

> set oracle_sid = dupdb

> sqlplus / as sysdba

SQL> startup nomount;

5)建立複制資料庫。在啟動的例程之後,就可以運作rman建立複制資料庫了。注意,當建立複制資料庫時,必須同時連接配接到主資料庫和複制資料庫執行個體。當連接配接主資料庫時指定target選項;當連接配接到複制資料庫時,指定auxiliary選項。為了使得複制資料庫的資料檔案使用不同的目錄,需呀使用set newname指令指定資料檔案的新位置;為了指定重做日志的新位置和名稱,需要在duplicate指令後指定logfile選項。示例如下:

備份恢複12——複制資料庫與備用資料庫

用rman在不同主機上建立複制資料庫的方法與此基本類似,不贅述了。自己參考吧。

2、建立實體備用資料庫:

1.data guard綜述

dg由一個産品資料庫和一個或多個備用資料庫組成,并且這些資料庫可以分布到不同地區,他們之間的互聯是通過oracle net來完成的。

實體備用資料庫簡介:他具有與主資料庫完全相同的實體副本,通過應用主資料庫的重做資料,實體備用資料庫與主資料庫保持同步。當主資料庫發生事務變化時,oracle會将重做資料寫入到重做日志和歸檔日志。再将歸檔日志傳送到實體備用資料庫的所有主機之後,實體備用資料庫可以直接應用這些事務變化,進而保持與主資料庫的同步性。

邏輯備用資料庫簡介:注意實體備用資料庫與主庫具有完全相同的實體結構,而邏輯備用資料庫的實體結構域主庫的可以不同,當主資料庫發生事務變化時,oracle會将重做資料寫入到重做日志和歸檔日志。再将歸檔日志傳送到邏輯備用資料庫的所有主機之後,oracle會将重做資料轉化為相應的sql語句,最終在邏輯備用資料庫上執行sql語句。進而維持邏輯備用資料庫與主庫的同步性。

使用者管理的方式建立實體備用資料庫不說了。直接用rman建立吧。首先必須使用 rman備份主資料庫的所有資料檔案,并且必須建立備用 控制檔案備份。

示例:

RMAN>  backup database plus archivelog format = '/home/oracle/rman/%d_%s.bak';

RMAN> backup current controlfile for standby format='/home/oracle/rman/%d_%s.bak';

如果将備庫與主庫放在同一個主機上,則必須為備庫專門建立os目錄,并且必須配置初始化參數db_file_name_convert 和 log_file_name_convbert 示例将會在同一主機上使用rman備份建立實體備用資料庫standby3,。下面看具體步驟:

1)建立存放備用資料庫的相關檔案的os目錄:

> mkdir  /home/oracle/rman

> mkdir  /home/oracle/rman/bdump

> mkdir  /home/oracle/rman/udump

> mkdir  /home/oracle/rman/archive

2)建立例程服務:

當在unix系平台上建立複制資料庫時時,需要使用ORAPWD工具為執行個體建立密碼檔案;當在windows平台上建立複制資料庫時,必須為複制資料庫建立例程服務,使用oradim工具可以建立例程服務。下面以為複制資料庫dupdb建立例程服務為例,說明建立例程服務的方法。執行個體如下:

orapwd file=$ORACLE_HOME/dbs/orapwmydb password=admin entries=5 force=y

3)配置監聽程式和網絡服務名。主庫和備庫互動是通過oracle net來完成的,必須進行網絡配置,為了使得監聽程式可以監聽主庫demo和備庫standby3,需要配置并重新啟動監聽程式;為了使得主庫和備庫可以互動通路,應該fenb 為主庫和備庫配置網絡服務名,在下面的示例中,demo表示主庫demo的網絡服務名,standby3表示備用資料庫standby3的網絡服務名。

4)準備主資料庫參數檔案。當使用備用資料庫時,需要将主資料庫歸檔日志傳送到備用資料庫相應的目錄。為了使得主庫和備庫可以正常運轉,必須合理配置主庫的初始化參數。因為某些初始化參數不能使用alter system指令直接修改,是以當該版主庫的初始化參數時,應該首先使用create pfile指令建立文本參數檔案,然後手工并将檔案參數檔案,最後使用create spfile重建伺服器參數檔案。具體步驟如下:

連接配接到主庫,家裡pfile:SQL> create pfile from spfile;

編輯省的pfile檔案initdemo.ora,手工編輯相關初始化參數,

3、邏輯備用資料庫:

如果,使用實體備用資料庫,那麼實體備用資料庫會應用主資料庫的所有重做資料;但如果使用邏輯備用資料庫,那麼邏輯備用資料庫隻會維護主資料庫的部分方案,并且對于方案對象和資料類型有一些限制。

邏輯備用資料庫可以用于降低主庫的工作負載,如果主庫的負載量很大,那麼可以将資料統計,資料報表和執行查詢等操作轉移到邏輯備用資料庫來完成,進而節省資料庫的cpu和io開銷。

确定 邏輯備用資料庫所支援的資料庫方案。當使用邏輯備用資料庫時,邏輯備用資料庫隻會維護部分資料庫方案。通過在主資料庫上查詢資料字典視圖DBA_LOGSTDBY_SKIP,可以顯示邏輯備用資料庫要跳過的資料庫方案。下面以顯示邏輯備用資料庫所支援的所有資料庫方案,說明使用該資料字典視圖的方法。示例如下:

SQL> select  username from dba_users where username not in (select owner from dba_logstdby_skip);

備份恢複12——複制資料庫與備用資料庫
備份恢複12——複制資料庫與備用資料庫

2、建立邏輯備用資料庫

為了建立邏輯備用資料庫,必須首先建立實體備用資料庫。在建立了實體備用資料庫之後,還應該應用所有的歸檔日志,以維持實體備用資料庫的一緻性。本次操作将使用之前建立的實體備庫standby1為基礎,實體備庫的standby1的所有檔案都存放在相應的目錄中,為例使得該實體備庫與主庫保持同步,應該使得實體備庫自動應用歸檔日志:

c:\> sqlplus sys/oracle@standby1 as sysdba

SQL> alter database recovery managed standby database cisconnect from session;

執行了以上指令之後,實體備庫會自動應用歸檔日志,通過在備用資料庫上查詢動态性能視圖v$archived_log,可以确定還未應用的歸檔日志。示例:

SQL > select name from v$archived_log where applied='no;

執行此句之後,如果還傳回結果,那表示還存在尚未應用的歸檔日志;如果該語句不傳回任何結果,則說明已經應用了所有的歸檔日志。接下來既可以開始建立邏輯備用資料庫了,具體步驟如下:

1)激活主庫和備庫的補充日志特征。當執行dml操作時,oracle隻會講被修改列的的重做資料記載到重做日志。為了使得備用資料庫能夠正确的辨別表行,必須激活補充日志特征,示例如下:

SQL> conn sys/oracle@demo as sysdba

SQL > alter database add supplemental log data(primary key , unique index ) columns; 

SQL> conn sys/oracle@standby1 as sysdba

SQL> alter database add supplemental log data (primary key , unique index ) columns;

通過在主庫或者備庫上查詢動态性能視圖v$database,可以确定是否激活了補充日志特征,示例如下:

SQL> select supplemental_log_data_pk  pk_log, supplemental_log_data_ui  ui_log  from v$database;

2)建立邏輯備用控制檔案。當将實體備庫轉變為邏輯備庫時,必須在主庫上為連接配接備庫建立邏輯備用控制檔案。示例:

c:\> sqlplus sys/oracle@demo as sysdba

SQL> alter database create logical standby controlfile as 'd:\backup\control01.ctl' reuse;

3) 複制邏輯備用控制檔案到備庫。首先應該關閉備庫,然後使用os指令cp複制邏輯備用控制檔案,示例:

SQL>shutdown immediate

SQL> ho cp d:\backup\control01.ctl  d:\standby1;

4)激活邏輯備庫。在将邏輯備用控制檔案複制到備用庫的相應位置之後,裝載邏輯備用資料庫,然後應用歸檔日志,最後激活備用資料庫,示例:

sqlplus sys/oracle@standby1 as sysdba

SQL> startup mount

SQL> alter database recover managed standby database disconnect from session;

SQL> alter database activate standby database;

5)修改邏輯備用資料庫的資料庫名。在激活了邏輯備庫之後,為了防止主庫和備庫的互相影響,應該改變邏輯備庫的資料庫名稱,改變資料庫名可以使用dbnewid工具來完成,當改變邏輯備用資料庫的資料庫名時,要求邏輯備用資料庫必須處于mount狀态。示例:

備份恢複12——複制資料庫與備用資料庫
備份恢複12——複制資料庫與備用資料庫

如上所示,在運作了dbnewid工具之後,必須重建立立密碼檔案。為了重建立立密碼檔案,首先需要删除原有的密碼檔案,然後使用orapwd工具建立新密碼檔案。示例如下:

SQL>ho del %oracle_home%\database\pwdstandby1.ora

SQL>ho orapwd file=%oracle_home%\database\pwdstandby1.ora  password=oracle

6)改變參數檔案的資料庫名,在運作dbnewid工具之後,已經改變了所有資料檔案和控制檔案所記載的資料庫名以及dbid,但是沒有修改初始化參數db_name.是以,在執行dbnewd工具之後,dba必須修改初始化參數db_name.因為初始化參數DB_name不能使用alter system指令直接修改,是以,為了修改該參數,必須建立文本參數檔案,然後手工修改文本參數檔案,最後根據文本參數檔案建立spfile,步驟如下:

備份恢複12——複制資料庫與備用資料庫

7)啟動邏輯備用資料庫,并修改全局資料庫名。在重建立立了密碼檔案,修改了初始化參數DB_NAME後,就可以啟動邏輯備庫了。在啟動時,必須首先裝載資料庫,然後resetlogs選項打開邏輯備庫。打開邏輯備庫之後,修改其全局資料庫名。示例:

SQL> conn sys/oracle@stanby1  as sysdba

SQL>alter database open resetlogs;

SQL>alter database rename global_name to standby1;

8)為邏輯備用資料庫增加臨時檔案。打開邏輯備庫之後,為了防止在邏輯備庫上排序錯誤,應該為其增加臨時檔案。通過查詢資料字典視圖dba_tablespaces,可以顯示臨時表空間名稱;通過執行alter tablespace 。。。add tempfile 可以為臨時表空間增加臨時檔案。示例:

SQL>select tablespace_name from dba_tablespaces where contents='TEMPORARY';

SQL> alter tablespace temp add  tempfile;

邏輯備用資料庫的管理

1、開始sql apply

在建立了邏輯備用資料庫之後,為了使得邏輯備用資料庫與主資料庫保持同步,必須應用sql操作。開始sql apply的示例如下:

SQL> alter database start logical standby apply;

當在邏輯備庫上執行圍爐操作時,可以停止應用sql,示例:

SQL> alter database stop logical standby apply;

2、顯示已注冊的歸檔日志

當主資料庫上執行日志切換時,會将歸檔日志傳送到邏輯備用資料庫。通過在邏輯備用資料庫上查詢資料字典視圖dba_logstdby_log可以顯示已經注冊的所有歸檔日志。示例:

SQL> conn sys/oracle@standby  as sysdba

SQL> select sequence#,applied from dba_logstdby_log;

sequence#用于辨別已經被注冊到邏輯備用資料庫的日志序列号,applied用于辨別歸檔日志是否應用(yes——已應用; no——未應用; current——正在應用)

3、檢查是否正在應用重做資料。

通過在邏輯備用資料庫上查詢動态性能視圖v$logstandby_stats,可以檢查邏輯備用資料庫是夠正在應用重做資料。示例:

SQL> SELECT value  from  v$logstandby_stats  where  name='coordinator state';

value

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

initializing

如上所示,initializing辨別協調程序(coordinator process)正在初始化,初始化辨別日志應用服務正在準備sql apply; applying表示正在應用sql。注意,如果查詢該動态性能使它沒有傳回行,則表示沒有啟動sql apply。

4、檢查sql  apply的進度。

通過在邏輯備用資料庫上産銷資料字典視圖dba_logstdby_progress,可以監視 sql apply的程序。示例如下:

SQL> select applied_scn , newest_scn from dba_logstdby_progress;

applied_scn用于标記已經應用到的scn值,newest_scn用于辨別罪行的scn值,注意,如果傳回值不一緻,則表述可能沒有啟動sql  apply。

5、驗證資料變化

當啟動sql apply之後,如果主資料庫的相關表發生變化,并且被記載到歸檔日志,那麼在邏輯備用資料庫可以檢視到資料庫變化。示例如下:

connnected

SQL> update scott.emp set sal = 1111 where empno=7788;

SQL>commit;

SQL> alter system archive log current;

SQL>conn sys/oracle@standby1 as sysdba

SQL> select sal from scott.emp where empno=7788;

sal

-----

1111

6、轉變邏輯資料庫為主資料庫

當主庫發生重大事故時,可以激活邏輯備用資料庫,并将其轉變為主庫,在将邏輯備庫轉變為主庫之後,該資料庫就可以作為普通資料庫使用了。下面以激活邏輯備庫standby1為例,如下:

C:\>sqlplus sys/oracle@standby1 as sysdba

SQL> alter database stop logical stanby apply;

SQL> alter database activate logical standby database;