標籤:dataguard dg rman備份 oracle
搭建ORACLE DataGuard(使用RMAN備份)
作業系統:windows 2008
資料庫:11.1.0.6
一、資訊收集
1.配置資訊收集
說明 主機名稱 IP地址 db_name sid DB_UNIQUE_NAME Service_name
主庫 dg1 192.168.0.11 orcl orcl orcldg1 orcldg1
備庫 dg2 192.168.0.22 orcl orcl orcldg2 orcldg2
2.主庫資訊收集
2.1查看資料庫版本資訊
SQL> SELECT * FROM V$VERSION;
2.2查看資料庫狀態
SQL> SELECT NAME,OPEN_MODE,DATABASE_ROLE,FORCE_LOGGING,LOG_MODE,FLASHBACK_ON FROM V$DATABASE;
SQL> SHOW PARAMETER NAME;
二、準備工作
1.備庫安裝oracle資料庫軟體,不建立資料庫,保證兩個資料庫的安裝路徑一致;
備庫設定環境變數:
ORACLE_HOME 為D:\app\Administrator\product\11.1.0.6\db_1
ORACLE_SID 為orcl
2.備庫使用ORACLE"配置和移植工具"中的Net Configuration Assistant建立監聽;
3.主備庫建立目錄
CMD> MD D:\app\Administrator\product\11.1.0.6\archive\arch
CMD> MD D:\app\Administrator\database\dg
三、搭建DATAGUARD
1.配置主備庫的listener.ora 和tnsnames.ora 檔案
1.1修改listener.ora檔案
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\app\Administrator\product\11.1.0.6\db_1)
(PROGRAM = extproc)
)
####主備庫都新增內容
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = D:\app\Administrator\product\11.1.0.6\db_1)
(SID_NAME = orcl)
)
#####
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.11)(PORT = 1521))
)
)
ADR_BASE_LISTENER = D:\app\Administrator
1.2修改tnsnames.ora 檔案
主備庫都新增如下內容
ORCLDG1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.11)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcldg1)
)
)
ORCLDG2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.22)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcldg2)
)
)
1.3重啟主備庫的監聽
CMD>lsnrctl stop
CMD>lsnrctl start
1.4檢查SQL*Net配置
在主要資料庫和備用資料庫中使用以下命令檢查SQL*Net配置
CMD>tnsping ORCLDG1
CMD>tnsping ORCLDG2
1.5測試遠程登入
CMD>sqlplus sys/[email protected] as sysdba
CMD>sqlplus sys/[email protected] as sysdba
2.修改主庫參數
SQL> ALTER SYSTEM SET INSTANCE_NAME=‘orcl‘ SCOPE=SPFILE; --可不配,使用預設設定
SQL> ALTER SYSTEM SET DB_UNIQUE_NAME=‘orcldg1‘ SCOPE=SPFILE;
SQL> ALTER SYSTEM SET LOCAL_LISTENER=‘orcldg1‘ SCOPE=SPFILE; --配TNS Name,也可不配使用預設設定
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG=‘DG_CONFIG=(orcldg1,orcldg2)‘ SCOPE=SPFILE; --這裡是db_unique_name!如果db_unique_name一致的話,這個參數不需要配
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1=‘LOCATION=D:\app\Administrator\product\11.1.0.6\archive\arch LGWR VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcldg1‘ SCOPE=SPFILE;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=‘SERVICE=orcldg2 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcldg2‘ SCOPE=SPFILE;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=‘ENABLE‘ SCOPE=SPFILE;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=‘DEFER‘ SCOPE=SPFILE;--延遲同步
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=‘AUTO‘ SCOPE=SPFILE;
SQL> ALTER SYSTEM SET FAL_CLIENT=‘orcldg1‘ SCOPE=SPFILE; --配主庫TNS Name
SQL> ALTER SYSTEM SET FAL_SERVER=orcldg2; SCOPE=SPFILE;--配備庫TNS Name
SQL> ALTER SYSTEM SET DB_FILE_NAME_CONVERT=‘D:\app\Administrator\database\dg‘,‘D:\app\Administrator\database\dg\‘ SCOPE=SPFILE;
SQL> ALTER SYSTEM SET LOG_FILE_NAME_CONVERT=‘D:\app\Administrator\database\dg‘,‘D:\app\Administrator\database\dg\‘ SCOPE=SPFILE;
SQL> ALTER SYSTEM SET STANDBY_ARCHIVE_DEST=‘D:\app\Administrator\product\11.1.0.6\archive\arch‘ SCOPE=SPFILE; --配的路徑跟LOG_ARCHIVE_DEST_1一致,也可不配,使用預設設定
SQL> ALTER SYSTEM SET LOG_ARCHIVE_FORMAT=‘ARC_%T_%S_%R.arc‘ SCOPE=SPFILE; --可不配,使用預設設定
SQL> ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=5 SCOPE=SPFILE; --可不配,使用預設設定
注:
1)在DataGuar備庫,沒有特殊情況一定要將standby_file_management參數設為AUTO,並且設定db_file_name_convert和log_file_name_convert的值。
若standby_file_management=MANUAL,即使主備庫資料檔案路徑一致,主庫添加資料檔案,備庫也不會自動添加,必須手動完成。
若standby_file_management=AUTO,主庫添加資料檔案,備庫會根據db_file_name_convert參數自動將資料檔案建立到正確路徑。
2)db_file_name_convert和log_file_name_convert是用來線上轉化資料和standby記錄檔的位置。主要用在物理standby資料庫和rman資料庫複寫和TSPITR的操作。
它們的作用是:主庫備庫路徑不相同的情況,備庫會根據這兩個參數將資料檔案和redo檔案建立到正確位置。
3)db_file_name_convert和log_file_name_convert指定時都必須是目錄,不能為檔案,否則啟動資料庫時會有ORA-01678的錯誤。
3.主庫啟用FORCE LOGGING模式
SQL> ALTER DATABASE FORCE LOGGING;
4.開啟歸檔模式
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
5.主庫做全備份,並傳輸備份組到備庫的相同位置
CMD> RMAN TARGET /
RUN
{
ALLOCATE CHANNEL C0 DEVICE TYPE DISK;
ALLOCATE CHANNEL C1 DEVICE TYPE DISK;
ALLOCATE CHANNEL C2 DEVICE TYPE DISK;
ALLOCATE CHANNEL C3 DEVICE TYPE DISK;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘D:\backup\%F‘;
BACKUP DATABASE FORMAT ‘D:\backup\ora11g_full_db_%d_%T_%u.bak‘;
BACKUP ARCHIVELOG ALL FORMAT ‘D:\backup\ora11g_arc_%s_%p_%t.bak‘;
}
如果主庫備份盤空間不足可以使用壓縮備份,但耗時稍長;
壓縮備份:
將上面指令碼中BACKUP DATABASE FORMAT 修改為BACKUP AS COMPRESSED DATABASE FORMAT即可
備份時間較長,在備份過程中可以繼續下面的配置.
6.拷貝主庫的密碼檔案到備庫相應位置
密碼檔案預設位置:D:\app\Administrator\product\11.1.0.6\db_1\database\PWDorcl.ora
如果不存在按如下方法可以產生該檔案
CMD> ORAPWD FILE=‘$ORACLE_HOME/dbs/PWD%ORACLE_SID%‘ PASSWORD=xxxx ENTRIES=10 FORCE=Y
7.產生備庫PFILE檔案
7.1在主庫產生備庫PFILE檔案:
SQL> CREATE PFILE=‘D:\app\Administrator\product\11.1.0.6\db_1\dbs\init2.ora‘ FROM SPFILE;
7.2將產生的init2.ora拷貝到備庫相應位置
7.3修改init2.ora檔案
注意:修改以下下參數(和配置主庫時修改的參數項一樣,值要具體而定)
#DG CONFIG
*.log_archive_config=‘dg_config=(orcldg1,orcldg2)‘
*.log_archive_dest_1=‘LOCATION=D:\app\Administrator\product\11.1.0.6\archive\arch LGWR VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcldg2‘
*.log_archive_dest_2=‘SERVICE=orcldg1 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcldg1‘
*.standby_file_management=‘AUTO‘
*.log_archive_dest_state_1=‘ENABLE‘
*.log_archive_dest_state_2=‘ENABLE‘
*.fal_server=orcldg1
*.db_unique_name=orcldg2
8.啟動備庫監聽
CMD> lsnrctl start
9.進行備庫的恢複
注意:
1)這裡雖然是恢複備庫,但是需要在主庫上執行RMAN命令;
2)恢複時請將備分產生後主庫上產生的歸檔記錄檔拷貝到備庫相應位置,這樣在備庫恢複時會將這些差異的資料一同恢複到備庫。
CMD> RMAN TARGET /
RMAN> CONNECT AUXILIARY sys/[email protected]
RMAN> DUPLICATE TARGET DATABASE FOR STANDBY NOFILENAMECHECK;
10.恢複備庫完畢後將主庫的LOG_ARCHIVE_DEST_STATE_2設定為ENABLE
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=‘ENABLE‘;
11.主備庫添加standby redo log
11.1查看重做日誌資訊
查看日誌群組成員
SQL> SELECT MEMBER FROM V$LOGFILE;
查看日誌大小
SQL> SELECT GROUP,BYTES/1024*1024*1024,MEMBERS FROM V$LOG;
查看standby redo log
SQL> SELECT GROUP#, BYTES FROM V$STANDBY_LOG;
11.2新增standby redo log
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ‘D:\app\Administrator\database\dg\stdredo04.log‘ SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ‘D:\app\Administrator\database\dg\stdredo05.log‘ SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ‘D:\app\Administrator\database\dg\stdredo06.log‘ SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ‘D:\app\Administrator\database\dg\stdredo07.log‘ SIZE 50M;
注:
Standby redo log的組數參考公式:(online redo log組數 + 1) * 資料庫線程數;單機線程數為1,RAC一般為2。
Standby redo log的群組成員數和大小也盡量和online redo log一樣。
12.備庫啟用
啟動備庫到(備用狀態的)mount模式
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
設定備庫為應用日誌狀態
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
取消備庫自動回復
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
啟動備庫到readonly模式
SQL> ALTER DATABASE OPEN;
設定備庫為時時應用日誌狀態
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
參考:
blog.chinaunix.net/uid-23284114-id-4142519.html
blog.itpub.net/25105315/viewspace-710330/
blog.csdn.net/hj402555749/article/details/17654769
blog.itpub.net/12679300/viewspace-1127775/
blog.csdn.net/yuzhenhuan01/article/details/6450565
blog.chinaunix.net/uid-15108676-id-4134935.html
本文出自 “4699096” 部落格,請務必保留此出處http://4709096.blog.51cto.com/4699096/1761537
搭建ORACLE DataGuard(使用RMAN備份)