rman 建 Standby Database 筆記

wmlm發表於2009-01-22

此次測試仍然使用兩臺伺服器不同的目錄結構來做。

TRGT 10-10-10-72 orcl

STANDBY 10-10-10-73 standby1 需要先把原來手工建立的備庫給刪除掉

CATDB 10-10-10-72 millet

 

millet庫上新增rman使用者,並在主庫和備庫上同時新增catdb服務名連線millet資料庫,

$ rman target sys/oracle@orcl catalog rman/cat@catdb

並對72.orcl做一個備份,備份集也放在/ww/目錄下

RMAN> run {

2> backup incremental

3> level=0

4> format '/ww/full_%d_%p_%t_%s'

5> tag '72orcl_full'

6> database plus archivelog;

7> }

[@more@]

目標庫上的資料檔案目錄 /opt/oracle/oradata/orcl/

備庫上的資料檔案目錄 /opt/oracle/oradata/standby1/

備庫上control_files位置

/opt/oracle/oradata/standby1/control01.ctl,

/opt/oracle/oradata/standby1/control02.ctl,

/opt/oracle/oradata/standby1/control03.ctl

不能使用RMAN來完成的內容

1 設定主庫的初始化引數

2 建立備庫初始化引數,並修改個別引數

3 配置主備庫通訊的TNSNAMES

4 啟動備庫不載入控制檔案

回憶原來的手工建立備庫的過程

1 確認主庫上的tnsnames,可以連通備庫 名稱standby1

備庫也可以連通主庫 名稱 orcl

2 確認主庫上的force logging 已啟用YES;確認在歸檔模式下,確認歸檔啟動

SQL> select force_logging from v$database;

3 確認主庫上的資料檔案(COPY 資料檔案準備)

select file#,name from v$database;

4 使用作業系統的CP複製資料檔案到主庫的一個臨時目錄;

5 從主庫建立備庫用的控制檔案,必須在備份資料檔案之後

SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS

2> '/opt/oracle/oradata/standby1.ctl';

6 從主庫建立備庫用的初始化引數檔案

SQL> CREATE PFILE='/opt/oracle/oradata/initstandby1.ora' from spfile;

7 4-5-6三步準備的檔案複製到備庫伺服器上

8 設定備庫上的引數檔案,要修改的地方包括以下內容

db_name='orcl'

control_files='/opt/oracle/oradata/standby1/control01.ctl','/opt/oracle/oradata/st

andby1/control02.ctl','/opt/oracle/oradata/standby1/control03.ctl'

standby_archive_dest='/ww/arch1'

db_file_name_convert='/opt/oracle/oradata/orcl/','/opt/oracle/oradata/standby1/'

log_file_name_convert='/opt/oracle/oradata/orcl/','/opt/oracle/oradata/standby1/'

remote_archive_enable='true'

log_archive_dest_1='LOCATION=/ww/arch2'

standby_file_management='auto'

instance_name='standby1'

9 如果是WINDOWS環境,需要新增windows service

oradim -new -sid standby1 -startmode manual

10 在主庫和備庫修改listener.ora 新增SID list 靜態註冊

11 設定備庫上的sqlnet.ora檔案,啟用斷連線檢測,新增

$ more $ORACLE_HOME/network/admin/sqlnet.ora

sqlnet.expire_time=2

12 建立服務名,在主庫和備庫上都要同樣新增兩個連線名 orcl standby1

13 在備庫上建立SPFILE from pfile

14 啟動備庫到nomount,然後mount standby database

sql> startup nomount;

sql> alter database mount standby database;

15 在備庫上初始化日誌應用服務

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

16 在主庫啟用歸檔到備庫上(前提條件是在引數檔案中設定了dest_2='service=...'

sql> alter system archive log current;

中間遇到不少問題,比如控制檔案中的最大日誌數、主機不能歸檔到備機上(服務不通)、備機上能收日誌但不能APP,也是因為最大日誌數的限定;具體參見《9iDG學習筆記.doc

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

這裡使用RMAN,因此從建立控制檔案開始

確認主庫上的初始化引數

*.db_name='orcl'

*.instance_name='orcl'

*.log_archive_dest_1='LOCATION=/ww/arch'

*.log_archive_dest_2='service=standby1'

確認備庫上的初始化引數檔案

*.db_name='orcl'

*.instance_name='standby1'

*.db_file_name_convert='/opt/oracle/oradata/orcl/','/opt/oracle/oradata/standby1/'

*.log_file_name_convert='/opt/oracle/oradata/orcl/','/opt/oracle/oradata/standby1/'

*.remote_archive_enable='true'

*.log_archive_dest_1='LOCATION=/ww/arch2'

*.standby_archive_dest='/ww/arch1'

*.standby_file_management='auto'

*.star_transformation_enabled='FALSE'

0 刪除原有的資料檔案和控制檔案

1 使用rman備份主庫的控制檔案給備庫用(有三種備份方法)

方法1 backup

backup current controlfile for standby;

sql 'alter system archive log current'; # so backup is consistent and recoverable

backup archivelog all not backed up 1 times;

或者

backup database

include current controlfile for standby

plus archivelog;

如果不帶plus archivelog,那麼備份完後要做一個當前日誌的歸檔

sql 'alter system archive log current';

此處忘記做導致duplicate 時出現 RMAN-05507 錯誤

方法2 copy

copy current controlfile for standby to '/tmp/sby_control01.ctl';

方法3 將已備份的控制檔案catalog ,如:

sql> alter database create standby controlfile as '/tmp/sby_control01.ctl';

% rman target sys/oracle@trgt catalog rman/cat@catdb

catalog controlfilecopy '/tmp/sby_control01.ctl';

這裡我使用第三種方法,過程如下:

$ sqlplus system/oracle@orcl

alter database create standby controlfile as '/ww/standby1.ctl'

$ rman target sys/oracle@orcl catalog rman/cat@catdb

catalog controlfilecopy '/ww/standby1.ctl' ;

2 對備庫上的控制檔案做一個映象

RMAN> copy controlfilecopy '/ww/standby1.ctl' to '/ww/standby2.ctl';

3 使用RMAN時,重新命名資料檔案

因為資料檔案結構相同,所以使用了初始化引數DB_FILE_NAME_CONVERT ,不需要顯式地進行重新命名。

因為主庫上的資料檔案與備庫上的資料檔名稱相同,所以在duplicate時,要加上NOFILENAMECHECK option

db_file_name_convert引數的使用說明

DB_FILE_NAME_CONVERT = ('oldstring1', 'newstring1', 'oldstring2', 'newstring2', ...)
For example, 
DB_FILE_NAME_CONVERT = ('/dbs/t1/', '/dbs/t1/s_', '/dbs/t2/', '/dbs/t2/s_')

4 使用RMAN時,重新命名線上日誌檔案

此處也使用LOG_FILE_NAME_CONVERT 引數

5 使用rman進行資料檔案的複製,備庫的建立(兩種方式 帶恢復和不帶恢復)

5.1start the standby instance

SQL> conn sys/change_on_install@standby1 as sysdba

Connected to an idle instance.

SQL> startup nomount

檢查主庫與CATDB,是否啟動,沒有啟動,啟之

在主機和備機都要能連通standby1服務

/ww/standby2.ctl 檔案要FTP73庫上

使用 rman 登入備庫

% rman TARGET / AUXILIARY SYS/sys_pwd@sbdb1

rman target sys/oracle@orcl auxiliary sys/change_on_install@standby1

run {

duplicate target database for standby

nofilenamecheck

dorecover;

}

遭遇RMAN-05507 錯誤

原因是備份控制檔案後沒有歸檔當前日誌

解決方法,去TRGT archive log current;

然後成功。

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

主庫上切日誌,到備庫上檢查結果

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

Database altered.

SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG

2 ORDER BY SEQUENCE#;

SEQUENCE# APP

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

39 YES

40 YES

41 YES

OK 一切順利!

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

相關文章