11g搭建DataGuard的步骤

11g搭建DataGuard的步骤(物理standby)


概要原理

DataGuard是通过建立一个PRIMARY和STANDBY组来确立其参照关系;STANDBY一旦创建,DataGuard就会通过将主数据库(PRIMARY)的REDO传递给STANDBY数据库,然后在STANDBY中应用REDO实现数据库的同步。有两种类型的STANDBY:物理STANDBY和逻辑STANDBY,物理STANDBY提供与主数据库完全一样的拷贝(块到块),数据库SCHEMA,包括索引都是一样的。它是直接应用REDO实现同步的。逻辑STANDBY则不是这样,在逻辑STANDBY中,逻辑信息是相同的,但物理组织和数据结构可以不同,它和主库保持同步的方法是将接收的REDO转换成SQL语句,然后在STANDBY上执行SQL语句。逻辑STANDBY除灾难恢复外还有其它用途,如用户查询和报表等。

二种传输模式

async(异步)和sync(同步)。异步传输模式就是指主库不必要等待备库应用redo的确认消息,就会完成提交工作,但是增加了数据丢失的风险性。同步传输模式就是指主库等待备库应用redo的确认消息,才会完成提交工作,如果一直收不到备份发来的确认信息,普通模式下会通过net_timeout值超时,继续完成本次操作,当存在于最大保护模式下时候,就会导致数据库夯住。

三种数据保护模式

1.最大保护模式 
1)这种模式提供了最高级别的数据保护能力; 
2)要求至少一个物理备库收到重做日志后,主库的事务才能够提交; 
3)主库找不到合适的备库写入时,主库会自动关闭,防止未受保护的数据出现; 
4)优点:该模式可以保证备库没有数据丢失; 
5)缺点:主库的自动关闭会影响到主库的可用性,同时需要备库恢复后才能提交,对网络等客观条件要求非常的高,主库的性能会因此受到非常大的冲击。 
2.最大可用性模式 
1)该模式提供了仅次于“最大保护模式”的数据保护能力; 
2)要求至少一个物理备库收到重做日志后,主库的事务才能够提交; 
3)主库找不到合适的备库写入时,主库不会关闭,而是临时降低到“最大性能模式”模式,直到问题得到处理; 
4)优点:该模式可以在没有问题出现的情况下,保证备库没有数据丢失,是一种折中的方法; 
5)缺点:在正常运行的过程中缺点是主库的性能受到诸多因素的影响。 
3.最大性能模式 
1)该模式是默认模式,可以保证主数据库的最高可用性; 
2)保证主库运行过程中不受备库的影响,主库事务正常提交,不因备库的任何问题影响到主库的运行; 
4)优点:避免了备库对主数据库的性能和可用性影响; 
5)缺点:如果与主库提交的事务相关的恢复数据没有发送到备库,这些事务数据将被丢失,不能保证数据无损失;

示例

参照前人的文档,加自己的实际环境做的测试:

项目

primary

standby

操作系统版本

OEL6.4

OEL6.4

oracle版本

11.2.0.4.0

11.2.0.4.0

ip

192.168.3.11

192.168.3.12

db_unique_name

his

his_dg

1.在primary上安装oracle并建实例,在standby上安装oracle但不建实例(安装操作不再赘述,只对重要步骤做一些解释说明。用的OEL所以直接yum安装oracle-rdbms即可解决大部分依赖包)

> yum install oracle-rdbms-server-11gR2-preinstall

  • 1

3.查看primary库归档模式

SQL> archive log list; 
Database log mode Archive Mode 
Automatic archival Enabled 
Archive destination USE_DB_RECOVERY_FILE_DEST 
Oldest online log sequence 332 
Next log sequence to archive 336 
Current log sequence 336 
SQL>

4.重建密码文件

充分利用主数据库原来环境,尽量不对主数据库参数配置作过多的修改。 
orapwd file=’$ORACLE_HOME/dbs/orapwhis’ password oracle entries=10 force=y

4.1强制归档primary库,打开Forced Logging 模式

SQL>alter database force logging;

4.2修改主库参数文件

SQL>alter system set INSTANCE_NAME=’his’ scope=spfile; 
SQL>alter system set DB_UNIQUE_NAME=’his’ scope=spfile; 
SQL>alter system set LOCAL_LISTENER=’primary’ scope=spfile; 
SQL>alter system set LOG_ARCHIVE_CONFIG=’DG_CONFIG=(his,his_dg)’; 
SQL> alter system set LOG_ARCHIVE_DEST_1=’LOCATION=/u01/ora_rman/arc valid_for= (all_logfiles,all_roles) db_unique_name=his’ scope=both; 
SQL>alter system set LOG_ARCHIVE_DEST_2=’SERVICE=standby lgwr async affirm valid_for=(online_logfiles,primary_role) db_unique_name=his_dg’ scope=both; 
alter system set LOG_ARCHIVE_FORMAT=’ARC_%T_%S_%R.arc’ scope=both; 
alter system set LOG_ARCHIVE_MAX_PROCESSES=5 scope=both; 
alter system set FAL_CLIENT=’primary’ scope=both; 
alter system set FAL_SERVER=’standby’ scope=both; 
alter system set STANDBY_FILE_MANAGEMENT=AUTO scope=both; 
alter system set STANDBY_ARCHIVE_DEST=’/u01/ora_rman/archlog_oradb’ scope=both;

5.修改监听文件

vim /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora 结果如下

LISTENER = 
(DESCRIPTION_LIST = 
(DESCRIPTION = 
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.11)(PORT = 1521)) 
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) 


SID_LIST_LISTENER = 
(SID_LIST = 
(SID_DESC = 
(GLOBAL_DBNAME = his) 
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1) 
(SID_NAME = his) 


ADR_BASE_LISTENER = /u01/app/oracle

6.修改tns配置文件

vim tnsnames.ora 结果如下 
PRIMARY= 
(DESCRIPTION = 
(ADDRESS = 
(PROTOCOL = TCP)(HOST = 192.168.3.11)(PORT = 1521)) 
(CONNECT_DATA = (SERVER = DEDICATED) 
(SERVICE_NAME = his) 


STANDBY = 
(DESCRIPTION = 
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.12)(PORT = 1521)) 
(CONNECT_DATA = (SERVER = DEDICATED) 
(SERVICE_NAME = his_dg) 

)

7.监听服务重启

lsnrctl stop 
lsnrctl start

8. primary上配置最大可用模式

SQL>startup 
SQL>alter database set standby database to maximize availability;

9.备份数据库

RMAN> sql ”alter system archive log current”; 
RMAN>backup database include current controlfile for standby plus archivelog;

10.在主库上建立备库控制文件

alter database create standby controlfile as ‘/u01/ora_rman/st_control.ctl’; 
cp st_control.ctl control01.ctl 
cp st_control.ctl control02.ctl 
cp st_control.ctl control03.ctl

11.添加standby的redo文件

shutdown immediate 
startup mount 
alter database add standby logfile 
alter database add standby logfile 
group 4
‘/u01/app/oracle/oradata/his/redo04.log’ size 50M, 
group 5 ‘/u01/app/oracle/oradata/his/redo05.log’ size 50M, 
group 6 ‘/u01/app/oracle/oradata/his/redo06.log’ size 50M, 
group 7 ‘/u01/app/oracle/oradata/his/redo07.log’ size 50M; 
alter database open;

12.standby上准备参数文件

scp 复制主库3.11上的inithis.ora文件到3.12对应/u01/app/oracle/product/11.2.0/db_1/dbs目录 
并且vim inithis.ora 结果如下 
his.__db_cache_size=469762048 
his.__java_pool_size=16777216 
his.__large_pool_size=33554432 
his.__oracle_base=’/u01/app/oracle’#ORACLE_BASE set from environment 
his.__pga_aggregate_target=486539264 
his.__sga_target=704643072 
his.__shared_io_pool_size=0 
his.__shared_pool_size=167772160 
his.__streams_pool_size=0 
*.audit_file_dest=’/u01/app/oracle/admin/his/adump’ 
*.audit_trail=’db’ 
*.compatible=’11.2.0.4.0’ 
*.control_files=’/u01/app/oracle/oradata/his/control01.ctl’,’/u01/app/oracle/oradata/his/control02.ctl’ 
*.db_block_size=8192 
*.db_domain=” 
*.db_name=’his’ 
*.db_recovery_file_dest=’/u01/app/oracle/fast_recovery_area’ 
*.db_recovery_file_dest_size=4385144832 
*.db_unique_name=’his_dg’ 
*.diagnostic_dest=’/u01/app/oracle’ 
*.dispatchers=’(PROTOCOL=TCP) (SERVICE=hisXDB)’ 
*.fal_client=’standby’ 
*.fal_server=’primary’ 
*.instance_name=’his’ 
*.local_listener=’standby’ 
*.log_archive_config=’DG_CONFIG=(his,his_dg)’ 
*.log_archive_dest_1=’LOCATION=/u01/ora_rman/arc valid_for=(all_logfiles,all_roles) db_unique_name=his_dg’ 
*.log_archive_dest_2=’SERVICE=primary lgwr async affirm valid_for=(online_logfiles,primary_role) db_unique_name=his’ 
*.log_archive_format=’ARC_%T_%S_%R.arc’ 
*.log_archive_max_processes=5 
*.memory_target=1180696576 
*.open_cursors=300 
*.processes=150 
*.remote_login_passwordfile=’EXCLUSIVE’ 
*.standby_archive_dest=’/u01/ora_rman/archlog_oradb’ 
*.standby_file_management=’AUTO’ 
*.undo_tablespace=’UNDOTBS1’

13.通过主库镜像创建所有的生产库的文件目录,保持文件路径一致。

export ORACLE_BASE=/u01/app/oracle 
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 
export ORACLE_SID=his 
mkdir -p 
ORACLEBASE/admin/ORACLEBASE/admin/ORACLE_SID/adump 
mkdir -p 
ORACLEBASE/oradata/ORACLEBASE/oradata/ORACLE_SID 
mkdir -p ora_rman/arc 
mkdir -p /u01/ora_rman/archlog_oradb

14.拷贝文件到备库主机

backup_%T_%s_%p.bak control01/02/03.ctl initoradb.ora 
cd /ora_rman/ 
scp backup*.bak oracle@192.168.3.12:/u01/ora_rman/ 
scp initfxopt.ora oracle@192.168.3.12:
ORACLEHOME/dbs/scporapwfxoptoracle@192.168.3.12:ORACLEHOME/dbs/scporapwfxoptoracle@192.168.3.12:ORACLE_HOME/dbs/ 
scp control*.ctl oracle@192.168.3.12:
ORACLEBASE/oradata/ORACLEBASE/oradata/ORACLE_SID

15.在standby库 修改监听配置文件

参照主库修改 
建议是直接从primary传一份过来,修改一下。

17.在standby修改tns文件

参照主库修改 
建议是直接从primary传一份过来。

18.启动standby库nomount状态

启动备库到nomount状态 
create spfile from pfile; 
startup nomount; 
alter database mount standby database; 
此过程可能会报错,好好查查是不是闪回区等文件夹没手动创建好。

19.恢复数据库

备库做RMAN恢复 
RMAN> restore database; 
RMAN> restore archivelog all; 
介质恢复后,rman 自动将standby 数据库打开到mount 状态。

20.配置standby redolog

alter database add standby logfile group 4 ‘/u01/app/oracle/oradata/his/redo04.log’ size 50M, 
group 5 ‘/u01/app/oracle/oradata/his/redo05.log’ size 50M, 
group 6 ‘/u01/app/oracle/oradata/his/redo06.log’ size 50M, 
group 7 ‘/u01/app/oracle/oradata/his/redo07.log’ size 50M;

21.启动数据库 查看数据库角色、角色切换、保护模式

SQL> alter database recover managed standby database disconnect from session; 
SQL> select database_role,switchover_status,protection_mode,protection_level from v$database;

22.验证配置是否成功

SQL> archive log list; 
检查主备之间的归档日志Current log sequence是否相同,相同则说明配置成功

23.DataGuard维护命令

1主库切换为备库 alter database commit to switchover to physical standby; 
主库有会话连接的时候 alter database commit to switchover to physical standby with session shutdown; 
shutdown immediate 
startup nomount 
alter database mount standby database; 
alter database recover managed standby database disconnect from session;

2.从库切换为主库 alter database commit to switchover to primary; 
shutdown immediate; 
startup 
alter system switch logfile; 
3. 从库打开只读实时应用模式 alter database recover managed standby database cancel; 
alter database open; 
alter database recover managed standby database using current logfile disconnect; 
4.检查切换状态 select open_mode,database_role,db_unique_name from v$database;

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值