共計(jì) 8059 個(gè)字符,預(yù)計(jì)需要花費(fèi) 21 分鐘才能閱讀完成。
自動寫代碼機(jī)器人,免費(fèi)開通
一、前期準(zhǔn)備
在準(zhǔn)備搭建 DATAGARD 的時(shí)候,看過許多篇教程,按著教程去走,出現(xiàn)過問題,然后就不知道該如何進(jìn)行下一步。
后來去看了官方文檔的,整理一下思路后事情就簡單多了。
以一主主庫一備庫為例,搭建 DG 的思路如下:
關(guān)閉防火墻。
配置 ssh 互信(非必須,減少 SCP 時(shí)輸入密碼的次數(shù))
主庫上的操作:
1)開啟歸檔模式,開啟 forced logging;
2)添加 standby logfile,standby logfile 組比 logfile 組多一個(gè);
3)修改參數(shù)文件
4)配置 listener.ora 和 tnsnames.ora
5)備份數(shù)據(jù)庫和控制文件
備庫準(zhǔn)備:
1)將主庫上的參數(shù)文件、密碼文件拷貝到備庫上,修改參數(shù)文件;
2)將主庫上的 listener.ora 和 tnsnames.ora 復(fù)制到備庫上,修改 listener.ora 文件
3)將備份復(fù)制到備庫上
4)在備庫上創(chuàng)建對應(yīng)的文件夾
5)啟動備庫到 nomount 模式
6)在備庫上使用 RMAN 恢復(fù)數(shù)據(jù)庫
7)備庫上添加 standby logfile
8)應(yīng)用歸檔
9)查看狀態(tài)
二、基本配置準(zhǔn)備
2.1 primary 服務(wù)器安裝數(shù)據(jù)庫軟件并安裝 ORCL 數(shù)據(jù)庫,standby 服務(wù)器上安裝
2.2 關(guān)閉防火墻
primary 服務(wù)器關(guān)閉防火墻:
standby 服務(wù)器關(guān)閉防火墻
2.3 配置 ssh 互信
百度下“l(fā)inux scp 免密碼”,隨便找篇文章看下。
[oracle@primary dbs]$ ssh-keygen -t rsa
[oracle@primary dbs]$ scp ~/.ssh/id_rsa.pub oracle@192.168.62.202:/home/oracle/.ssh/authorized_keys
三、主庫配置
1)enable forced logging:
SQL ALTER DATABASE FORCE LOGGING;
查看是否已經(jīng)是歸檔模式, 如果是未歸檔模式,則將其修改成歸檔模式。
SQL SHUTDOWN IMMEDIATE;
SQL STARTUP MOUNT;
SQL ALTER DATABASE ARCHIVELOG;
SQL ALTER DATABASE OPEN;
3)配置 standby logfile 文件,當(dāng)主庫變成備庫時(shí),可以接收來自備庫的日志。
alter database add standby logfile group 4 (‘/u01/app/oracle/oradata/orcl/redo_dg_021.log’) size 50M;
alter database add standby logfile group 5 (‘/u01/app/oracle/oradata/orcl/redo_dg_022.log’) size 50M;
alter database add standby logfile group 6 (‘/u01/app/oracle/oradata/orcl/redo_dg_023.log’) size 50M;
alter database add standby logfile group 7 (‘/u01/app/oracle/oradata/orcl/redo_dg_024.log’) size 50M;
3)配置主庫的參數(shù):這里有兩種方式,一種是使用 alter system 來修改參數(shù),另外一種是生成靜態(tài)參數(shù)文件之后修改參數(shù);我采用的是后一種配置方式。
參數(shù)的配置參考 Oracle Data Guard Concepts and Administration 11g Release 2 (11.2) E41134-03 中 3 - 3 和 3 - 4 頁
initorcl.ora 已經(jīng)有的參數(shù),可以不用配置。
SQL create pfile from spfile;
[oracle@primary ~]$ cd $ORACLE_HOME/dbs
[oracle@primary dbs]$ vim initorcl.ora
#primary
#*.db_name=’orcl’
*.db_unique_name=pri
*.LOG_ARCHIVE_CONFIG=’DG_CONFIG=(pri,sty)’
#*.control_files=’/u01/app/oracle/oradata/orcl/control01.ctl’,’/u01/app/oracle/oradata/orcl/control02.ctl’
*.LOG_ARCHIVE_DEST_1= ‘LOCATION=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=pri’
*.LOG_ARCHIVE_DEST_2= ‘SERVICE=sty ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=sty’
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.remote_login_passwordfile=’EXCLUSIVE’
*.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
#standby role
*.FAL_SERVER=sty
*.DB_FILE_NAME_CONVERT=’/u01/app/oracle/oradata/orcl’,’/u01/app/oracle/oradata/orcl’
*.LOG_FILE_NAME_CONVERT= ‘/u01/app/oracle/oradata/orcl’,’/u01/app/oracle/oradata/orcl’
*.STANDBY_FILE_MANAGEMENT=AUTO
SQL shutdown immediate
SQL create spfile from pfile;
4)主庫上配置 listener.ora 和 tnsnames.ora
主庫上的 listener.ora :
[oracle@primary admin]$ cat listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.62.201)(PORT = 1521))
)
ADR_BASE_LISTENER = /u01/app/oracle
主庫上的 tnsnames.ora:
[oracle@primary admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
PRI =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.62.201)(PORT = 1521))
)
(CONNECT_DATA =
(SID = orcl)
)
)
STY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.62.202)(PORT = 1521))
)
(CONNECT_DATA =
(SID = orcl)
)
)
修改完成之后要重啟監(jiān)聽。
5)備份數(shù)據(jù)庫和控制文件
[oracle@primary admin]$ rman target sys/asd@pri
RMAN backup database format ‘/u01/app/oracle/backup/full_db_%U’;
SQL ALTER DATABASE CREATE STANDBY CONTROLFILE AS ‘/u01/app/oracle/backup/sty.ctl’;
四、備庫上的操作
1)將主庫上的參數(shù)文件、密碼文件拷貝到備庫上,修改參數(shù)文件;
[oracle@primary admin]$ cd $ORACLE_HOME/dbs
[oracle@primary dbs]$ scp initorcl.ora orapworcl oracle@192.168.62.202:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/
修改參數(shù)文件:
vim /u01/app/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora
*.db_name=’orcl’
*.DB_UNIQUE_NAME=sty
*.control_files=’/u01/app/oracle/oradata/orcl/control01.ctl’,’/u01/app/oracle/flash_recovery_area/orcl/control02.ctl’
*.DB_FILE_NAME_CONVERT=’/u01/app/oracle/oradata/orcl’,’/u01/app/oracle/oradata/orcl’
*.LOG_FILE_NAME_CONVERT= ‘/u01/app/oracle/oradata/orcl’,’/u01/app/oracle/oradata/orcl’
*.LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc
*.LOG_ARCHIVE_DEST_1=’LOCATION=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=sty’
*.LOG_ARCHIVE_DEST_2=’SERVICE=pri ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pri’
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
*.STANDBY_FILE_MANAGEMENT=AUTO
*.FAL_SERVER=pri
標(biāo)紅的是修改的部分
密碼文件說明:主庫上有授權(quán)或者收回 sysdba 時(shí),要更新備庫上的密碼文件。
2)將主庫上的 listener.ora 和 tnsnames.ora 復(fù)制到備庫上,修改 listener.ora 文件
主庫上執(zhí)行:
[oracle@primary admin]$ scp listener.ora tnsnames.ora oracle@192.168.62.202:/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/
備庫上執(zhí)行:
[oracle@standby ~]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/
[oracle@standby admin]$ vim listener.ora
將 host 中的 201 改成 202,也就是將 host 改成備庫機(jī)器上的 IP,tnsnames.ora 不用修改。
修改完成之后要重啟監(jiān)聽
3)將備份復(fù)制到備庫上
[oracle@primary backup]$ scp /u01/app/oracle/backup/* oracle@192.168.62.202:/u01/app/oracle/backup
4)在備庫上創(chuàng)建對應(yīng)的文件夾
[oracle@standby oracle]$ cd $ORACLE_BASE
[oracle@standby oracle]$ ls
arch backup checkpoints database product
[oracle@standby oracle]$ mkdir -p oradata/orcl
[oracle@standby oracle]$ mkdir -p admin/orcl/adump
[oracle@standby oracle]$ mkdir -p admin/orcl/dpdump
[oracle@standby oracle]$ mkdir -p admin/orcl/pfile
5)啟動備庫到 nomount 模式
SQL create spfile from pfile=’/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora’;
SQL startup nomount;
6)在備庫上使用 RMAN 恢復(fù)數(shù)據(jù)庫
[oracle@standby ~]$ rman target sys/asd@pri
RMAN connect auxiliary /
run {
allocate auxiliary channel c1 device type disk;
allocate auxiliary channel c2 device type disk;
duplicate target database for standby nofilenamecheck dorecover;
release channel c1;
release channel c2;
}
雖然最后出現(xiàn)了這個(gè)問題,但備庫還是可以打開的。
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 06/08/2016 17:38:36
RMAN-03015: error occurred in stored script Memory Script
RMAN-06053: unable to perform media recovery because of missing log
RMAN-06025: no backup of archived log for thread 1 with sequence 16 and starting SCN of 1010403 found to restore
RMAN-06025: no backup of archived log for thread 1 with sequence 15 and starting SCN of 1009794 found to restore
7)備庫上添加 standby logfile
備庫上添加 standby logfile,我做測試時(shí),v$logfile 視圖里有 standby logfile group4 至 group 7,而 /u01/app/oracle/oradata/orcl 并沒有這些文件,所以要先把這幾組日志刪除再重建:
SQL alter database open;# 未試過在 mount 狀態(tài)創(chuàng)建 standby 日志
SQL alter database drop logfile group 4;
SQL alter database drop logfile group 5;
SQL alter database drop logfile group 6;
SQL alter database drop logfile group 7;
SQL alter database add standby logfile group 4 (‘/u01/app/oracle/oradata/orcl/redo_dg_021.log’) size 50M;
SQL alter database add standby logfile group 5 (‘/u01/app/oracle/oradata/orcl/redo_dg_022.log’) size 50M;
SQL alter database add standby logfile group 6 (‘/u01/app/oracle/oradata/orcl/redo_dg_023.log’) size 50M;
SQL alter database add standby logfile group 7 (‘/u01/app/oracle/oradata/orcl/redo_dg_024.log’) size 50M;
8)應(yīng)用歸檔
– 應(yīng)用歸檔
SQL shutdown immediate;
SQL startup mount;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
– 退出歸檔
alter database recover managed standby database cancel;
9)查看狀態(tài)
SQL SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIME NEXT_TIME APPLIED
———- —————— —————— ———
15 08-JUN-16 08-JUN-16 YES
16 08-JUN-16 08-JUN-16 YES
17 08-JUN-16 08-JUN-16 YES
18 08-JUN-16 08-JUN-16 YES
19 08-JUN-16 08-JUN-16 YES
20 08-JUN-16 08-JUN-16 YES
21 08-JUN-16 08-JUN-16 IN-MEMORY
說明 DG 已經(jīng)搭建成功
注:如果備庫處于 open 狀態(tài),告警日志中會出現(xiàn):ORA-16058: 未裝載備用數(shù)據(jù)庫實(shí)例的告警信息。
向 AI 問一下細(xì)節(jié)丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!