oracle dataguard配置详细过程及主备切换(adg)

oracle物理dg单实例配置:

1.查看数据库版本是否一致

2.配置主备库的hosts文件和tnsnames.ora,确保监听正常。

3.主库参数配置:

  ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(pri_unique_name,std_unique_nm)' scope=spfile;
  ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/data/arch/pri_sid_nm VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=pri_unique_nm' scope=spfile;
  ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=std_tnsname ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=std_unique_nm' scope=spfile;
  ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=spfile;
  ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=spfile;
  ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE scope=spfile;
  ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' scope=spfile;
  ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=4 scope=spfile;
  ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE=SPFILE;
  ALTER SYSTEM SET FAL_CLIENT ='pri_tnsname' SCOPE=SPFILE;
  ALTER SYSTEM SET FAL_SERVER ='std_tnsname' SCOPE=SPFILE;
  -------------若主备库数据日志文件路径不一致需要设置,主库设置是为主备切换用-------------
  ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/data/oradata/MCPDATA_ST','/data/oradata/MCPDATA' scope=spfile; 
  ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/data/oradata/MCPDATA_ST','/data/oradata/MCPDATA' scope=spfile;  重做日志(redo log)目录,先对方,后自己
  ---------------------------------------------------------------


  
4.开启强制归档:
  alter database force logging;

5.主库若没开归档需要开启:
  shutdown immediate
  startup mount
  alter database archivelog;
  alter database open;

6.主库备份并恢复到备库
  创建口令文件:
  orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=5
  创建spfile:
  create pfile from spfile;
  mount状态下,使用rman备份数据库和归档日志
  rman target /
   run {
   allocate channel c1 type disk;
   allocate channel c2 type disk;
   allocate channel c3 type disk;
   backup database format '/data/rman_backup/Full_%U.bak';
   backup archivelog all format '/data/rman_backup/Arc_%U.bak';
   release channel c1;
   release channel c2;
   release channel c3;}
  备份备库控制文件
  backup device type disk format '/data/rman_backup/Standby_%U.ctl' current controlfile for standby;
  将主库的备份集、口令文件、pfile传至备库相应目录下


  备库配置:

7.配置备库参数文件:
  各中文件路径确定修改正确,包括数据文件路径,归档日志路径
  db_unique_name修改成备库的唯一名
  LOG_ARCHIVE_DEST_1修改成备库本机的log目录,LOG_ARCHIVE_DEST_2修改成主库参数   ----------主备切换用          
  FAL_SERVER修改成主库连接串,FAL_CLIENT修改成备库连接串      --------主备切换会用到
  ----------------若主备库数据日志文件路径不一致备库需要需要设置下面两个参数----------------------
  ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/data/oradata/MCPDATA_ST','/data/oradata/MCPDATA' scope=spfile; 
  ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/data/oradata/MCPDATA_ST','/data/oradata/MCPDATA' scope=spfile;  -----重做日志(redo log)目录,先对方,后自己
  -----------------------------------------------------------------------------------------------
  查看Oracle的.bash_profile文件里ORACLE_SID配置是否正确
  
8.创建spfile文件,并将备库置于nomount状态
  create spfile from pfile;
  startup nomount;
  show parameter spfile;

9.使用rman恢复控制文件和数据文件等:
  rman target /
   restore standby controlfile from '/data/rman_backup/Standby_08ri8i4r_1_1.ctl';
   alter database mount;
   run {
   allocate channel c1 type disk;
   allocate channel c2 type disk;
   allocate channel c3 type disk;
   restore database;
   release channelc1;
   release channelc2;
   release channelc3; }

===========================duplicate方式迁移数据(主库不用停机)===========================

  创建口令文件----把主库的删掉,修改sys密码后重新生成一份,把这份传到备库:
  orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=sys的密码 entries=5
  
  将主库的pfile文件传到备库修改后生成spfile,将备库起到nomount
  rman target sys/wgot11g@BJ-YZ-207R-166-9 auxiliary sys/wgot11g@BJ-YZ-207R-166-8
  duplicate target database for standby from active database dorecover nofilenamecheck;

======================================================================================

10.主库和备库状态查看:
  column db_unique_name format a10;
  set line 220;
  SELECT db_unique_name,name,switchover_status,database_role,open_mode FROM v$database;


11.主库和备库创建Standby Redo Log组数(主库创建是为主备切换用)
  公式如下:
  如果主库是单实例库:Standby Redo Log组数=主库日志组总数 + 1
  如果主库是RAC环境:Standby Redo Log组数=(所有节点中日志组数最大值 + 1) * RAC节点数
  alter database add standby logfile thread 1 group 4 '/data/oradata/fle/stdredo04.rdo' size 200m;
  alter database add standby logfile thread 1 group 5 '/data/oradata/fle/stdredo05.rdo' size 200m;
  alter database add standby logfile thread 1 group 6 '/data/oradata/fle/stdredo06.rdo' size 200m;
  alter database add standby logfile thread 1 group 7 '/data/oradata/fle/stdredo07.rdo' size 200m;

12.检查:
  
  主库查看路径状态:
  col dest_name for a20
  col status for a8 
  col type for a8
  col database_mode for a20
  col recovery_mode for a25
  col error for a20
  col destination for a40
  col synchronization_status for a30
  set line 240
  select dest_name, status, type, database_mode, recovery_mode, error, destination, synchronization_status  
  from v$archive_dest_status;
  
  主库切换日志:
  alter system switch logfile;
  
  备库查看日志的应用状态:
  column name format a50;
  set line 200;
  SELECT thread#,sequence#,name,applied FROM v$archived_log order by sequence#;

  查看日志传输进程状态
  col RECOVERY_MODE for a8
  col protection_mode for a20
  col db_mode for a18
  col status for a10
  set line 200
  SELECT ds.dest_id id ,
       ad.status ,
       ds.database_mode db_mode ,
       ad.archiver TYPE , 
       ds.recovery_mode ,
       ds.protection_mode ,
       ds.standby_logfile_count "SRLs" ,
       ds.standby_logfile_active active ,
       ds.archived_seq#
  FROM v$archive_dest_status ds ,
       v$archive_dest ad
  WHERE ds.dest_id = ad.dest_id
    AND ad.status != 'INACTIVE'
  ORDER BY ds.dest_id;

  主备切换:

1.将主库切换成物理standby:
  alter database commit to switchover to physical standby with session shutdown;
  startup mount;
   
2.备库执行切换成primary,完成后数据库是mount,需要open:
  recover managed standby database cancel;
  recover automatic standby database ;
  RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
  alter database commit to switchover to primary with session shutdown;
  select status from v$instance;
  startup;
   
3.打开新的备库(原主库)的归档应用:
  alter database recover managed standby database using current logfile disconnect from session;
  检查日志应用状态:
  
4.验证切换后,归档应用是否正常:
  新备库执行:
  column name format a50;
  set line 200;
  SELECT thread#,sequence#,name,applied FROM v$archived_log order by sequence#;
            
5.检查切换后的主备库的角色:
  新的主备库分别执行:
  select switchover_status,database_role from v$database;

注意切换完成以后必须自行添加临时文件,当我们在Primary端添加一个临时表空间,Standby端虽然不能创建出临时文件,但是临时表空间的信息是联动的带入的
   
   
   
   


oracle dataguard主备库参数文件配置详解

主库参数

fle.__db_cache_size=3070230528
fle.__java_pool_size=67108864
fle.__large_pool_size=83886080
fle.__oracle_base='/apps/oracle'#ORACLE_BASE set from environment
fle.__pga_aggregate_target=1073741824
fle.__sga_target=4294967296
fle.__shared_io_pool_size=0
fle.__shared_pool_size=973078528
fle.__streams_pool_size=0
*.audit_file_dest='/apps/oracle/admin/fle/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/data/oradata/fle/control01.ctl','/data/oradata/fast_recovery_area/fle/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='fle'
*.db_recovery_file_dest='/data/oradata/fast_recovery_area'
*.db_recovery_file_dest_size=4294967296
*.diagnostic_dest='/apps/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=fleXDB)'
*.event='10949 TRACE NAME CONTEXT FOREVER'
*.fal_client='BJ-YZ-207R-66-9'
*.fal_server='BJ-YZ-207R-66-8'
*.log_archive_config='DG_CONFIG=(fle,flp)'
*.log_archive_dest_1='LOCATION=/data/arch/fle VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=fle'
*.log_archive_dest_2='SERVICE=BJ-YZ-207R-66-8 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=flp'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=4
*.O7_DICTIONARY_ACCESSIBILITY=FALSE
*.open_cursors=300
*.pga_aggregate_target=1073741824
*.processes=2000
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=4294967296
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
 


备库参数
 
fle.__db_cache_size=2399141888
fle.__java_pool_size=67108864
fle.__large_pool_size=822083584
fle.__oracle_base='/apps/oracle'#ORACLE_BASE set from environment
fle.__pga_aggregate_target=1073741824
fle.__sga_target=4294967296
fle.__shared_io_pool_size=0
fle.__shared_pool_size=905969664
fle.__streams_pool_size=0
*.audit_file_dest='/apps/oracle/admin/fle/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/data/oradata/fle/control01.ctl','/data/oradata/fast_recovery_area/fle/control02.ctl'#Restore Controlfile
*.db_block_size=8192
*.db_domain=''
*.db_name='fle'
*.db_recovery_file_dest='/data/oradata/fast_recovery_area'
*.db_recovery_file_dest_size=4294967296
*.db_unique_name='flp'
*.diagnostic_dest='/apps/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=fleXDB)'
*.event='10949 TRACE NAME CONTEXT FOREVER'
*.fal_client='BJ-YZ-207R-66-8'
*.fal_server='BJ-YZ-207R-66-9'
*.log_archive_config='DG_CONFIG=(flp,fle)'
*.log_archive_dest_1='LOCATION=/data/arch/fle VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=flp'
*.log_archive_dest_2='SERVICE=BJ-YZ-207R-66-9 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=fle'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=4
*.O7_DICTIONARY_ACCESSIBILITY=FALSE
*.open_cursors=300
*.pga_aggregate_target=1073741824
*.processes=2000
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=4294967296
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'


主库参数详解:
 
保持同一个Data Guard中所有的DB_NAME相同
DB_NAME=ora11g
 
 为一个数据库指定一个唯一的名称,该参数一经指定就不会发生改动除非DBA主动改动
DB_UNIQUE_NAME=ora11g_primary
 
初始化参数LOG_ARCHIVE_CONFIG用于控制发送归档日志到远程位置、接收远程归档日志,并指定Data  Guard配置的惟一数据库名,默认值为SEND,RECEIVE,NODG_CONFIG。

当设置该参数为SEND时,会激活发送归档日志到远程位置;当设置该能数为NOSEND时,会禁止发送归档日志到远程位置;当设置该参数为RECEIVE时,会激活接收远程归档日志;当设置该参数

为NORECEIVE时,会禁止接收远程归档日志;当设置该参数为DG_CONFIG时,可以最多指定9个惟一数据库名;当设置该参数为NODG_CONFIG时,会禁止指定惟一数据库名。

LOG_ARCHIVE_CONFIG='DG_CONFIG=(ora11g_primary ,ora11g_standby)'   
 
指定本地归档的路径
LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ora11g_primary'
 
指定远端备库的归档路径
LOG_ARCHIVE_DEST_2='SERVICE=ora11g_standby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ora11g_standby'
 
LOG_ARCHIVE_DEST_n(从1到10)定义redo文件路径。该参数必须通过location或service指定归档文件路径。location表示本地路径,service通常是net service name,即接收redo数据的

standby数据库。

注意:每一个LOG_ARCHIVE_DEST_n都有一个对应的LOG_ARCHIVE_DEST_STATE_n参数,该参数拥有以下4个属性值:

ENABLE:默认值,表示允许传输服务

DEFER: 指定对应的log_archive_dest_n参数有效,但暂不使用

ALTERNATE:禁止传输,但是如果其他相关的目的地的连接通通失败,则它将变成enable

RESET:功能与DEFER类似,不过如果传输目的地之前有过错误,它会清除所有错误信息

LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
 
远程登录设置独享模式(z注意保证主备库密码相同)
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
%s log sequence number
%S log sequence number, zero filled %t thread number, RAC的节点中设有THREAD参数, 就是这个值了
%T thread number, zero filled
 ------其中这前4项是可以用在 9I 中的
%a activation ID
%d database ID
%r resetlogs ID that ensures unique names are constructed for the archived log files across multiple incarnations of the database

 Oracle 10g开始,log_archive_format初始化参数必须包含%s, %t 和 %r,以确保生成的归档重做日志名称唯一。
(原因:10g能做穿越resetlog的恢复,所以要加%r.而9i的不能做穿越resetlog的恢复,所以没有%r的参数)


LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
当Primary Database的某些日志没有发送到Standby Database 这时候发生归档裂缝(Archive Gap)
缺失的日志就是裂缝(GAP)。Data Guard 能够自动检测,解决归档裂缝,不需要DBA的介入。这需要配置
FAL_CLIENT,FAL_SERVER这两个参数(FAL:Fetch Archive Log)
从FAL这个名字可以看出,这个过程是 Standby Database 主动发起的取日志的过程,Standby Database 就是
FAL_CLIENT,它是从FAL_SERVER中取这些GAP。10g中,这个FAL_SERVER可以是Primary Database,也可以是其他的
Standby Database
 
FAL_CLIENT和FAL_SERVER两个参数都是Oracle Net NameFAL_CLIENT通过网络向FAL_SERVER发送请求,
FAL_SERVER通过网络向FAL_CLIENT发送缺失的日志
但是这两个连接不一定是一个连接。因此 FAL_CLIENT向FAL_SERVER发送请求时,会携带FAL_CLIENT的参数
值,用来告诉FAL_SERVER应该向哪里发送缺少的日志。这个参数也是一个Oracle Net Name 这个Name在FAL_SERVER
上定义的,用来指向FAL_CLIENT
FAL_SERVER=ora11g_standby
FAL_CLIENT=ora11g_primary
 
如果Primary数据库数据文件发生修改(如新建)则在standby数据库作相应修改
设为AUTO表示自动管理。设为MANUAL表示需要手工管理(注:重命名修改
是不会传到standby数据库)
STANDBY_FILE_MANAGEMENT=AUTO

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是Oracle 11g Active Dataguard的具体配置实例: 1. 确保主库和备库的数据库版本和操作系统版本一致。 2. 确保主库和备库之间可以互相访问。 3. 在主库上启用归档模式,将日志归档到指定的归档目录中。可以使用以下命令启用归档模式: ``` SQL> alter database archivelog; ``` 然后使用以下命令指定归档目录: ``` SQL> alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/arch'; ``` 注意,这里的归档目录需要在主库和备库上都存在,并且需要有足够的空间存储归档文件。 4. 在主库上创建一个备库管理账号,并授权给备库使用。 ``` SQL> create user standby identified by passwd; SQL> grant connect, resource, dba to standby; ``` 5. 在备库上创建一个新的数据库实例,并确保实例名和主库不同。例如,假设主库实例名为ORCL,备库实例名为STBY。 ``` $ export ORACLE_SID=STBY $ sqlplus / as sysdba SQL> create spfile from pfile; SQL> startup nomount; ``` 6. 在备库上创建一个与主库相同的目录结构,并将备库管理账号添加到目录的权限列表中。 ``` $ mkdir -p /u01/app/oracle/oradata/STBY $ chown -R oracle:oinstall /u01/app/oracle/oradata/STBY $ chmod -R 775 /u01/app/oracle/oradata/STBY $ mkdir -p /u01/app/oracle/fast_recovery_area/STBY $ chown -R oracle:oinstall /u01/app/oracle/fast_recovery_area/STBY $ chmod -R 775 /u01/app/oracle/fast_recovery_area/STBY $ mkdir -p /u01/app/oracle/arch/STBY $ chown -R oracle:oinstall /u01/app/oracle/arch/STBY $ chmod -R 775 /u01/app/oracle/arch/STBY $ vi /etc/oratab # 添加STBY实例的启动配置 STBY:/u01/app/oracle/product/11.2.0/dbhome_1:N $ echo "export ORACLE_SID=STBY" >> /home/oracle/.bash_profile $ echo "export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1" >> /home/oracle/.bash_profile $ su - oracle ``` 注意,这里的目录结构需要在主库和备库上都创建,并且需要确保权限设置正确。 7. 在备库上创建一个pfile或spfile文件,并指定主库的连接信息和归档目录的位置。例如: ``` $ vi $ORACLE_HOME/dbs/initSTBY.ora *.db_name='STBY' *.db_unique_name='STBY' *.log_archive_dest_1='LOCATION=/u01/app/oracle/arch/ORCL' *.standby_file_management='AUTO' *.fal_client='STBY' *.fal_server='ORCL' *.db_file_name_convert='/u01/app/oracle/oradata/ORCL','/u01/app/oracle/oradata/STBY' *.log_file_name_convert='/u01/app/oracle/oradata/ORCL','/u01/app/oracle/oradata/STBY' ``` 这里的参数需要根据实际情况进行调整。 8. 在备库上启动数据库实例,并将其连接到主库。 ``` $ sqlplus / as sysdba SQL> alter system set standby_file_management='AUTO'; SQL> alter database mount standby database; SQL> alter system set log_archive_dest_state_1='ENABLE'; SQL> alter system set log_archive_dest_2='SERVICE=ORCL LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCL'; SQL> alter system switch logfile; ``` 9. 在主库上创建一个standby控制文件,并将其传输到备库上。 ``` SQL> alter database create standby controlfile as '/u01/app/oracle/oradata/ORCL/control01.ctl'; $ scp /u01/app/oracle/oradata/ORCL/control01.ctl oracle@stby:/u01/app/oracle/oradata/STBY/control01.ctl ``` 10. 在备库上执行数据复制命令,将主库上的数据复制到备库上。 ``` SQL> create standby database; ``` 这个命令会自动从主库上复制数据到备库上,需要一定的时间。 11. 在主库上启用Active Dataguard,并将备库设置为read-only模式。 ``` SQL> alter database open read only; SQL> alter system set standby_file_management='AUTO'; SQL> alter system set log_archive_dest_state_2='ENABLE'; SQL> alter system set log_archive_dest_2='SERVICE=STBY LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=STBY'; ``` 这样就可以启用Active Dataguard了,备库会自动从主库上同步数据,并且可以进行读取操作。 以上就是Oracle 11g Active Dataguard详细配置实例,需要根据实际情况进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值