(一)基础环境
主库 | 备库 | |
*** 作系统 | RedHat6.7 | RedHat6.7 |
服务器名称 | primarydb1 primarydb2 | standbydb1 standbydb2 |
IP地址规划 | 192.168.10.31 primarydb1 10.10.10.31 primarydb1-priv | 192.168.10.41 standbydb1 10.10.10.41 standbydb1-priv |
------------------------ | ------------------------------ | --------------------------------------- |
数据库版本 | 11.2.0.4 | 11.2.0.4 |
db_name | testdb | testdb |
db_unique_name | testdb | testdbdg |
instance_name | testdb1 testdb2 | testdbdg1 testdbdg2 |
service_name | testdb | testdbdg |
数据库安装情况 | 安装GI+数据库软件+创建数据库 | 安装GI+数据库软件 (不用创建数据库) |
在配置dataguard之前,主库已经安装了GI+数据库软件+创建了数据库,备库也已经安装了GI+数据库软件,备库不需要使用dbca建库。
(二)主库配置
(2.1)配置归档,主库需要运行在归档模式下
--查看是否开启归档archive log List
如果没有开启归档,需要开启,方法如下:
step1: 设置归档日志文件存放地址alter system set log_archive_dest_1='LOCATION=+ARCH' ;step2: 关闭数据库,2个节点都关闭shutdown immediatestep3: 重启节点1到mount状态startup mountstep4: 开启归档alter syetem archivelogstep5: 打开数据库alter database openstep6: 确认归档状态archive log List最好使用alter system switch logfile切换日志,确认日志已经存到归档位置step7:打开另外一个节点startup open;
(2.2)主库启用强制记录日志
开启数据库强制记录日志功能database force logging查看强制记录日志功能是否开启select force_logging from v$database;
(2.3)主库网络配置
(2.3.1)静态监听配置
主库可以使用动态监听,也可以使用静态监听,这里新创建一个监听ListENER_ADG,监听新的端口1522。以下 *** 作使用grID用户执行
step1:在节点1执行添加监听命令
srvctl add Listener -l ListENER_ADG -o $ORACLE_HOME -p "TCP:1522"
step2:启动监听
srvctl start Listener -l ListENER_ADG
step3:修改监听配置文件,加入静态注册信息,2个节点都需要修改,这里以节点1为例
[grID@primarydb1 ~]$ vim /u01/app/11.2.0/grID/network/admin/Listener.ora
ListENER_ADG=(DESCRIPTION=(ADDRESS_List=(ADDRESS=(PROTOCol=IPC)(KEY=ListENER_ADG)))) # line added by AgentListENER=(DESCRIPTION=(ADDRESS_List=(ADDRESS=(PROTOCol=IPC)(KEY=ListENER)))) # line added by AgentListENER_SCAN1=(DESCRIPTION=(ADDRESS_List=(ADDRESS=(PROTOCol=IPC)(KEY=ListENER_SCAN1)))) # line added by AgentENABLE_GLOBAL_DYNAMIC_ENDPOINT_ListENER_SCAN1=ON # line added by AgentENABLE_GLOBAL_DYNAMIC_ENDPOINT_ListENER=ON # line added by AgentENABLE_GLOBAL_DYNAMIC_ENDPOINT_ListENER_ADG=ON # line added by Agent#添加以下信息SID_List_ListENER_ADG = (SID_List = (SID_DESC = (GLOBAL_DBname = testdb) (ORACLE_HOME = /u01/app/11.2.0/grID) #填写的是grID_home (SID_name=testdb1) #如果是节点2,需改为SID_name=testdb2 ) )
step4:重启监听,一个节点执行
srvctl stop Listener -l ListENER_ADGsrvctl start Listener -l ListENER_ADG
(2.3.2)tns配置,主库2个节点都添加
[oracle@primarydb1 ~]$ cd /u01/app/oracle/product/0/db_1/network/admin/[oracle@primarydb1 admin]$ lssamples shrept.lst tnsnames.ora[oracle@primarydb1 admin]$ vim tnsnames.ora
在tnsnames.ora文件中添加如下内容
tnstestdb = (DESCRIPTION = (ADDRESS = (PROTOCol = TCP)(HOST = 192.168.10.33)(PORT = 1522)) (ADDRESS = (PROTOCol = TCP)(HOST = 10.34)(PORT = ))
(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_name = testdb) ) )tnstestdbdg = (DESCRIPTION =10.43)(PORT = ))
(ADDRESS = (PROTOCol = TCP)(HOST = 10.44)(PORT = )) (CONNECT_DATA = testdbdg) ) )
(2.4)主库参数配置
set db_unique_name = testdb' scope=spfile;set log_archive_configDG_CONfig=(testdb,testdbdg);set log_archive_dest_2SERVICE=tnstestdbdg LGWR SYNC AFFIRM VALID_FOR=(ONliNE_LOGfileS,PRIMARY_RolE) DB_UNIQUE_name=testdbdgset log_archive_dest_state_1 "enable";set log_archive_dest_state_2 set db_file_name_convert+DATA/testdbdg',+DATA/testdbset log_file_name_convertset standby_file_managementauto;set fal_clIEnttnstestdbset fal_servertnstestdbdg';因为有的参数重启才会生效(scope=spfile),因此改完参数需要重启
[grID@primarydb1 ~]$ srvctl stop database -d testdb[grID@primarydb1 ~]$ srvctl start database -d testdb
(2.5)添加standby online redo log
standby redo log的大小与redo log大小相同。组数为比在线日志多一组。
查看在线日志组数信息
sql> select a."GROUP#",a."THREAD#",a."BYTES",a."MEMBERS"from v$ a,v$logfile bwhere a."GROUP#" = b."#"order by group#; # THREAD# BYTES MEMBERS-------- ---------- ---------- ---------- 1 1 52428800 1 2 3 2 4 1
可以看到,每个线程(可以理解为每个实例)有2组日志文件,每组有1个日志文件。因此我们在创建standby redo log时需要为每个thread创建3组日志文件。
thread1add standby logfile thread 1 group 11 (+DATA) size 50M;12 (13 (thread22 14 (15 (16 (') size 50M;
(2.6)将主库的密码文件拷贝到备库
拷贝主库密码文件到备库,在节点1执行
[oracle@primarydb1 dbs]$ pwd/u01/app/oracle/product/0/db_1/dbs# 拷贝密码文件到备库节点1[oracle@primarydb1 dbs]$ scp orapwtestdb1 oracle@10.41:`pwd` # 拷贝密码文件到备库节点2 [oracle@primarydb1 dbs]$ 10.42:`pwd`
(2.7)将主库的参数文件拷贝到备库
sql> create pfile='/home/oracle/pfile_20190818 from spfile;sql> exitdisconnected from Oracle Database 11g Enterprise Edition Release 0.4.0 - 64bit ProductionWith the Partitioning,Real Application Clusters,automatic Storage Management,olAP,Data Mining and Real Application Testing options[oracle@primarydb1 ~]$ scp pfile_20190818 oracle@` oracle@10.41s password: pfile_20190818 100% 1859 1.8KB/s 00:00
(三)备库配置
(3.1)修改密码文件
linux环境中,密码文件命名格式为:orapwd{$sID},因此需要修改密码文件的名字
备库节点1:
[oracle@standbydb1 dbs]$ dbs[oracle@standbydb1 dbs]$ mv orapwtestdb1 orapwtestdbdg1
备库节点2:
[oracle@standbydb2 dbs]$ dbs[oracle@standbydb2 dbs]$ mv orapwtestdb1 orapwtestdbdg2
(3.2)修改参数文件
最终参数文件如下:
*.audit_file_dest=/u01/app/oracle/admin/testdbdg/adump'*.audit_trail=db'*.cluster_database=true*.compatible=11.2.0.4.0'*.control_files=+DATA/testdb/controlfile/current.266.1016639457'*.db_block_size=8192*.db_create_file_dest=+DATA'*.db_domain=''*.db_file_name_convert=+DATA/testdb+DATA/testdbdg'*.db_name=testdb'*.db_unique_name=testdbdg'*.diagnostic_dest=/u01/app/oracle'*.fal_clIEnt=tnstestdbdg'*.fal_server=tnstestdbtestdbdg1.instance_number=1testdbdg2.instance_number=2*.log_archive_config='*.log_archive_dest_1=LOCATION=+ARCH'*.log_archive_dest_2=SERVICE=tnstestdb LGWR SYNC AFFIRM VALID_FOR=(ONliNE_LOGfileS,PRIMARY_RolE) DB_UNIQUE_name=testdb'*.log_archive_dest_state_1=enable'*.log_archive_dest_state_2='*.log_file_name_convert='*.remote_login_passwordfile=exclusive'*.standby_file_management=autotestdb1.thread=testdb2.thread=2testdb1.undo_tablespace=UNDOTBS2testdb2.undo_tablespace=UNDOTBS1'
里面涉及到的路径需要手动创建
su - oracle# 2个节点都要创建 mkdir -p mkIDr -p /u01/app/oracle/admin/testdbdg/adump
(3.3)备库网络配置
(3.3.1)静态监听配置
这里新创建一个监听ListENER_ADG,监听新的端口1522。以下 *** 作使用grID用户执行
step1:在节点1执行添加监听命令
srvctl add Listener -l ListENER_ADG -o $ORACLE_HOME -p "TCP:1522"
step2:启动监听
srvctl start Listener -l ListENER_ADG
step3:修改监听配置文件,加入静态注册信息,2个节点都需要修改,这里以节点1为例
[grID@standbydb1 ~]$ vim /u01/app/0/grID/network/admin/Listener.oraListENER_ADG=(DESCRIPTION=(ADDRESS_List=(ADDRESS=(PROTOCol=IPC)(KEY=ON # line added by AgentSID_List_ListENER_ADG = testdbdg) (ORACLE_HOME = /u01/app/grID) (SID_name=testdbdg1) ) )
step4:重启监听,一个节点执行
l ListENER_ADGsrvctl start Listener -l ListENER_ADG
(3.3.2)tns配置,备库2个节点都添加
# 在tnsnames.ora文件中添加如下内容
tnstestdb = testdbdg) ) )
(3.4)启动备库到nomount状态
[oracle@standbydb1 ~]$ sqlplus / as sysdbasql*Plus: Release 0 Production on Mon Aug 19 04:14:04 2019copyright (c) 1982,1)">2013,Oracle. All rights reserved.Connected to an IDle instance.sql> startup nomount pfile=';ORACLE instance started.Total System Global Area 313196544 bytesFixed Size 2252744 bytesVariable Size 255852600 bytesDatabase Buffers 50331648 bytesRedo Buffers 4759552 bytessql>
注意:再将备库启动到nomount状态后,理论上,可以从主库通过sqlplus连接到备库,同样也可以在备库通过sqlplus连接到主库,这里建议测试主库备库之间网络的连通性。在主库与备库上执行
tnsPing tnstestdbtnsPing tnstestdbdgsqlplus sys/Oracle123@tnstestdbsqlplus sys@tnstestdbdg确保所有命令都能执行成功。
(3.5)将数据库注册到集群中,才能够使用ASM
在节点1的oracle用户下执行:
[oracle@standbydb1 db_1]$ srvctl add database -d testdbdg -o /u01/app/oracle/product/db_1[oracle@standbydb1 db_1]$ srvctl add instance -d testdbdg -i testdbdg1 -n standbydb1[oracle@standbydb1 db_1]$ srvctl add instance -d testdbdg -i testdbdg2 -n standbydb2
(四)主库备份
rman target /RMAN> run {allocate channel c1 type disk;allocate channel c2 type disk;sql alter system archive log current;backup database format /databaseBackup/full_db_%U;sql;backup archivelog all format /databaseBackup/archlog_%U;backup current controlfile format /databaseBackup/controlfile_%U;backup spfile format /databaseBackup/spfile_%U;release channel c1;release channel c2;}
将备份传到备库服务器:
[oracle@primarydb1 /]$ cd databaseBackup/[oracle@primarydb1 databaseBackup]$ archlog_0au9imjq_1_1 archlog_0cu9imnk_1_1 full_db_06u9imbr_1_1 full_db_08u9imhs_1_1 spfile_0gu9imtt_1_1archlog_0bu9imju_1_1 controlfile_0du9imrd_1_1 full_db_07u9imbr_1_1 full_db_09u9imhv_1_1[oracle@primarydb1 databaseBackup]$ scp * oracle@10.41:/databaseBackup/
(五)备库还原
(5.1)restore控制文件
[oracle@standbydb1 ~]$ rman target /Recovery Manager: Release 0 - Production on Mon Aug 06:47:00 2011,Oracle and/or its affiliates. All rights reserved.connected to target database: TESTDB (not mounted)RMAN> restore standby controlfile from /databaseBackup/controlfile_0du9imrd_1_1';Starting restore at 19-AUG-19using target database control file instead of recovery catalogallocated channel: ORA_disK_1channel ORA_disK_1: SID=292 instance=testdbdg1 device type=disKchannel ORA_disK_1: restoring control channel ORA_disK_1: restore complete,elapsed time: 08output file name=+DATA/testdbdg/controlfile/current.268.1016664445Finished restore at 19
备注:在恢复控制文件时,遇到错误:
解决方法:https://jingyan.baidu.com/album/9faa7231c13269473c28cb33.html?picindex=9
(5.2)修复数据库
在启动到mount状态时报了2个错误:
报错1:初始化参数文件找不到
解决方法:复制pfile到给定位置
[oracle@standbydb1 bin]$ cp /home/oracle/pfile_20190818 /u01/app/oracle/product/11.2.0/db_1/dbs/inittestdbdg1.ora
报错2:控制文件找不到
解决方法:
1.通过asmcmd找到控制文件的位置;
ASMCMD> pwd+data/testdbdg/CONTRolfileASMCMD> current.256.1016666437
2.修改初始化参数文件中
[oracle@standbydb1 ~]$ vim /u01/app/oracle/product/0/db_1/dbs/inittestdbdg1.ora...*.control_files='+data/testdbdg/CONTRolfile/current.256.1016666437'
...
重新启动数据库到mount状态
[oracle@standbydb1 dbs]$ sqlplus /07:08:15 mount;ORACLE instance started.Total System Global Area bytesDatabase mounted.
开始修复数据库
RMAN> restore database;Starting restore at 14 instance=testdbdg1 device type=disKchannel ORA_disK_1: starting datafile backup set restorechannel ORA_disK_1: specifying datafile(s) to restore from backup setchannel ORA_disK_1: restoring datafile 00001 to +DATA/testdbdg/datafile/system.268.1016639305channel ORA_disK_1: restoring datafile 00004 to +DATA/testdbdg/datafile/users.267.1016639305channel ORA_disK_1: reading from backup pIEce /databaseBackup/full_db_06u9imbr_1_1channel ORA_disK_1: pIEce handle=/databaseBackup/full_db_06u9imbr_1_1 tag=TAG20190819T035434channel ORA_disK_1: restored backup pIEce channel ORA_disK_1: starting datafile backup set restorechannel ORA_disK_1: specifying datafile(s) to restore from backup setchannel ORA_disK_1: restoring datafile 00002 to +DATA/testdbdg/datafile/sysaux.260.101663930500003 to +DATA/testdbdg/datafile/undotbs1.263.101663930500005 to +DATA/testdbdg/datafile/undotbs2.264.1016639859full_db_07u9imbr_1_1channel ORA_disK_1: pIEce handle=/databaseBackup/full_db_07u9imbr_1_1 tag=5619
(六)打开备库
打开备库
sql> alter database open ;Database altered.
查看数据库状态:
sql> select name,db_unique_name,open_mode from v$database;name DB_UNIQUE_name OPEN_MODE--------- ------------------------------ --------------------TESTDB testdbdg READ ONLY
开始数据库实时日志应用,在开启之前,需要确认standby redo logfile是否已经创建,这里已经从主库恢复过来,故不需要创建
在执行该语句后,数据库会自动去同步主库新生成的日志,可以打开主库与备库的告警日志,查看数据库同步状态。
(七)启动另外一个节点
(7.1)首先使用pfile生成spfile
create spfile+DATA/testdbdg/spfiletestdbdg.ora' from pfile/u01/app/oracle/product/11.2.0/db_1/dbs/inittestdbdg1.ora;file created.关闭节点1,修改pfile参数:
shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.#节点1[oracle@standbydb1 ~]$ cd /u01/app/oracle/product/[oracle@standbydb1 dbs]$ vim inittestdbdg1.ora# 仅保留一行参数,指向spfilespfile=+DATA/testdbdg/spfiletestdbdg.ora#节点2[oracle@standbydb1 ~]$ cd /u01/app/oracle/product/[oracle@standbydb1 dbs]$ vim inittestdbdg2.ora# 仅保留一行参数,指向spfilespfile='(7.2)启动节点
首先查看数据库状态:
[grID@standbydb1 ~]$ crsctl status res -t--------------------------------------------------------------------------------...ora.testdbdg.db OFFliNE OFFliNE Instance Shutdown OFFliNE OFFliNE ...
打开节点1:
[oracle@standbydb1 dbs]$ sqlplus / as sysdbasql> startup开启实时日志应用sqlcurrent logfile disconnect;
打开节点2:
oracle@standbydb2 dbs*Plus: Release 11.2.0.4.0 Production on Thu Aug 22 06:07:55 copyright (c) 2013,Oracle. All rights reserved.Connected to an IDle instance.sql startupORACLE instance started.Total System Global Area bytesFixed Size bytesVariable Size bytesDatabase Buffers bytesRedo Buffers Database mounted. opened.再次确认数据库的状态,已经正常启动:
grID@standbydb1 ~]$ crsctl status res -t------------------------------------------------------------------------------... ora.testdbdg.db 1 ONliNE ONliNE standbydb1 Open2 ONliNE ONliNE standbydb2 ;name DB_UNIQUE_name OPEN_MODE DATABASE_RolE------- ------------------------------ -------------------- ----------------TESTDB testdb READ WRITE PRIMARY备库:
------- ------------------------------ -------------------- ----------------TESTDB testdbdg READ ONLY WITH APPLY PHYSICAL STANDBY
(八)测试数据同步情况
(1)主库创建表,插入数据:
create table test02 (ID number,name varchar(20));table created.sqlinsert into test02 values(1,1)">lijiaman); row created.sqlcommitCommit complete.sql> select * from test02;
ID name
---------- --------------------
1 lijiaman
备库查看:
select * from test02; ID name-------- -------------------- 1 lijiaman数据已同步。
(2)主库删除表,表进入了回收站,11gR2的dataguard不需要关闭回收站。
drop table test02; dropped.sql tab;Tname TABTYPE CLUSTERID---------------------------- ------- ----------BIN$kKkJUDt4hvrgUyAKqMC61w==$0 table发现备库表也进入了回收站
table同样,主库执行闪回删除,将sales表从回收站恢复回来,备库也会执行相同的 *** 作。
主库执行闪回删除恢复已经删除的test02表
> flashback table test02 to before drop;Flashback complete.sql tab;Tname TABTYPE CLUSTERID---------------------------- ------- ----------TEST02 table备库也会自动恢复已经删除的test02表
table数据同步测试无异常。
(九)存在的问题
存在的问题1:备库使用scan-ip无法连接:
配置信息:ip192.168.10.40 port:1521 service:testdbdg
需要设置初始化参数:remote_Listener
> set remote_Listenerstandbydb-scan:1521'
【完】
总结以上是内存溢出为你收集整理的Oracle 11g RAC to RAC ADG搭建(一)采用rman备份恢复方式全部内容,希望文章能够帮你解决Oracle 11g RAC to RAC ADG搭建(一)采用rman备份恢复方式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)