当前位置:Gxlcms > 数据库问题 > oracle11g dataguard 安装手册(转)

oracle11g dataguard 安装手册(转)

时间:2021-07-01 10:21:17 帮助过:5人阅读


sql> alter database add standby logfile group 12 ‘/opt/oracle/oradata/orcl/dg/standby12.log‘ size 50M; 

sql> alter database add standby logfile group 13 ‘/opt/oracle/oradata/orcl/dg/standby13.log‘ size 50M; 

sql> alter database add standby logfile group 14 ‘/opt/oracle/oradata/orcl/dg/standby14.log‘ size 50M; 

  4.密码文件和控制文件的创建传输
     (1)一般数据库默认就有密码文件,存放在$ORACLE_HOME/dbs/orapwSID  这里为orapworcl
        如果没有sql>orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle
     (2)检查REMOTE_LOGIN_PASSWORDFILE值是否为 EXCLUSIVE
        sql>show parameter REMOTE_LOGIN_PASSWORDFILE
如果值不是EXCLUSIVE,则:alter system set remote_login_passwordfile=exclusive scope=spfile;
     (3)密码文件需要scp到从库
        # scp orapworcl oracle@192.168.215.102:/opt/oracle/11.2/dbs 提示输入yes
     (4)控制文件:
        11g的控制文件一共两份,内容一样,一份在$ORACLE_BASE/oradata/orcl/control01.ctl
一份在/opt/oracle/flash_recovery_area/orcl/control02.ctl

生成standby控制文件:

sql>shutdown immediate 

sql>startup mount 

sql>alter database create standby controlfile as ‘/tmp/standby_control01.ctl‘; 

sql>startup open; 

然后在备库建立对应的目录,并授权
mkdir orcl--- chown oracle:oinstall(或dba) orcl

scp control01.ctl oracle@192.168.215.102:/opt/oracle/oradata/orcl 

scp control02.ctl oracle@192.168.215.102:/opt/oracle/flash_recovery_area/orcl/ 

5.db_name和db_unique_name
      默认db_name和db_unique_name和实例名是一致的,这里是orcl
      需要注意在DG中主库和从库的db_unique_name是不能一致的,需要区分开的。
      这里我们设置主库的db_unique_name为orcl,从库为orcldg
      sql>show parameter db_unique_name
      设置:alter system set db_unique_name=orcl scope=spfile;
      --注意虽然默认db_unique_name和db_name是一致的,但是需要显式设置,否则在spfile中没有此参数
   6.闪回数据库:
      强烈建议开启数据库闪回功能。闪回允许你将数据库还原到以前的某一时间点。当发生故障转移时,这个功能非常有用,
      它能让你将老的主库闪回到故障前,然后将其转换为备库。如果没有启用闪回功能,你就必须重建备库,意味着要再复制一次数据文件。
      除了这个好处,闪回还能在某些情况下让你避免从备份恢复数据。
      (1)快速恢复区(Flash/Fast Recovery Area),默认是配置的,但是需要确认这个区域的磁盘够大,至少300G以上(默认3G)
       sql>show parameter db_recovery_file_dest
       可以修改位置:sql>alter system set db_recovery_file_dest=‘新路径‘;
       更改大小:sql>alter system set db_recovery_file_dest_size=400G;

      (2)查看是否启用,默认是不开启的
       sql>select flashback_on from v$database;
       开启:sql>alter database flashback on;
       如果你碰到 ORA-01153 报错,那一定是在备库进行此操作。你需要先取消重做日志应用,启用闪回日志,然后重新启用日志应用。
       在主库启用闪回日志,不会同步备库也启用。你必须手动在主库和备库上均启用闪回日志。
       如果不启用闪回日志,当出现故障转移时,你将需要完全重新开始创建一个备库。

  7.SQL*NET设置
(1)配置主库的监听
         虽然可以通过netca来进行配置,但是除了这个默认的外,我们还需要一个静态注册SID_LIST_LISTENER,如果没有此从参数而且
  dataguard启动顺序不正确,主库会报PING[ARC1]:Heartbeat failed to connect to standby ‘***‘.Error is 12514导致归档无法完成
  配置如下

SID_LIST_LISTENER= 

(SID_LIST = 

(SID_DESC = 

(GLOBAL_DBNAME = orcl) 

(ORACLE_HOME = /opt/oracle/11.2) 

(SID_NAME = orcl) 

) 

) 

LISTENER = 

(DESCRIPTION_LIST = 

(DESCRIPTION = 

(ADDRESS = (PROTOCOL = TCP)(HOST = primaryDB)(PORT = 1521)) 

) 

) 

#vi $ORACLE_HOME/network/admin/listener.ora 加入上面的内容

(2)配置tnsnames
#vi $ORACLE_HOME/network/admin/tnsnames.ora

ORCL = 

(DESCRIPTION = 

(ADDRESS_LIST = 

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.215.101)(PORT = 1521)) 

) 

(CONNECT_DATA = 

(SERVICE_NAME = orcl) 

) 

) 

ORCLDG = 

(DESCRIPTION = 

(ADDRESS_LIST = 

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.215.102)(PORT = 1521)) 

) 

(CONNECT_DATA = 

(SERVICE_NAME = orcldg) 

) 

) 

(3)传输到备库并修改listener.ora和tnsnames.ora

scp $ORACLE_HOME/network/admin/listener.ora oracle@192.168.215.102:/opt/oracle/11.2/network/admin/
scp $ORACLE_HOME/network/admin/tnsnames.ora oracle@192.168.215.102:/opt/oracle/11.2/network/admin/
          
--listener.ora:
          SID_LIST_LISTENER
   (SID_LIST =
     (SID_DESC =
        (GLOBAL_DBNAME = orcldg)
        (ORACLE_HOME = /opt/oracle/11.2)
        (SID_NAME = orcl)
      )
    )


 LISTENER =
   (DESCRIPTION_LIST =
     (DESCRIPTION =
       (ADDRESS = (PROTOCOL = TCP)(HOST = standbyDB)(PORT = 1521))
     )
   )

   tnsnames.ora:不需要修改

8.重做日志传输配置
(1)配置归档日志位置:
  查询已经设置的归档路径sql:archive log list或者show parameter log_archive_dest_1

sql> alter system set log_archive_dest_1=‘LOCATION=/opt/oracle/oradata/orcl/archive1 valid_for=(all_logfiles,primary_role) db_unique_name=orcl‘ scope=spfile;

     还可以使用快速恢复区作为归档目录,如LOCATION=use_db_recovery_file_dest
     官方文档里说使用 valid_for=(online_logfiles, all_roles),这将导致备库无法归档备用日志文件,因为它们不是在线日志。
     但如果使用 all_logfiles 选项,主备库将都能归档在线以及备用日志。
     如果你想在备库进行备份,并同时备份归档日志的话,必须使用 all_logfiles。
(2)配置重做日志到备份库:

sql>alter system set log_archive_dest_2=‘SERVICE=orcldg lgwr sync valid_for=(online_logfile,primary_role)  

db_unique_name=orcldg‘;

(3)要注意STANDBY_ARCHIVE_DEST 参数不需要,已经被官方弃用。设置此参数后启动数据库,只会报 ORA-32004:
     obsolete or deprecated parameter(s) specified for RDBMS instance 错。

  9.配置FAL_SERVER
    这个参数指定当日志传输出现问题时,备库到哪里去找缺少的归档日志。它用在备库接收的到的重做日志间有缺口的时候。
    这种情况会发生在日志传输出现中断时,比如你需要对备库进行维护操作。在备库维护期间,没有日志传输过来,这时缺口就出现了。
    设置了这个参数,备库就会主动去寻找那些缺少的日志,并要求主库进行传输。
    你是主库,就填写:
      fal_server=从库
    从库上就反过来:
       fal_server=主库
           注意:FAL_CLIENT在11g中已经废弃,虽然可以配置但是已经不起作用了。

    sql>alter system set FAL_SERVER=‘orcldg‘;

  10.Data Guard 配置里的另外一个库的名字
     sql> alter system set log_archive_config = ‘dg_config=(orcl,orcldg)‘;

   以上的办法是我们采用alter system的方式在线修改,还有一种比较方便的办法(但是容易出错,所以方便和安全什么时候都不可兼得)
   sql>create pfile from spfile;
   # 手工修改pfile
   sql>create spfile from pfile;
   然后用pfile生成spfile 同时传输pfile到从库修改后生成spfile
   注意手工增加:
   *.log_archive_dest_state_1=enable
   *.log_archive_dest_state_2=enable
vi initorcl.ora

orcl.__db_cache_size=180355072 

orcl.__java_pool_size=4194304 

orcl.__large_pool_size=4194304 

orcl.__oracle_base=‘/opt/oracle‘#ORACLE_BASE set from environment 

orcl.__pga_aggregate_target=264241152 

orcl.__sga_target=494927872 

orcl.__shared_io_pool_size=0 

orcl.__shared_pool_size=289406976 

orcl.__streams_pool_size=8388608 

*.audit_file_dest=‘/opt/oracle/admin/orcl/adump‘ 

*.audit_trail=‘db‘ 

*.compatible=‘11.2.0.0.0‘ 

*.control_files=‘/opt/oracle/oradata/orcl/control01.ctl‘,‘/opt/oracle/flash_recovery_area/orcl/control02.ctl‘#Restore Controlfile 

*.db_block_size=8192 

*.db_domain=‘‘ 

*.db_name=‘orcl‘ 

*.db_recovery_file_dest=‘/opt/oracle/flash_recovery_area‘ 

*.db_recovery_file_dest_size=4039114752 

*.diagnostic_dest=‘/opt/oracle‘ 

*.dispatchers=‘(PROTOCOL=TCP) (SERVICE=orclXDB)‘ 

*.fal_server=‘orcldg‘ 

*.job_queue_processes=1000 

*.log_archive_config=‘dg_config=(orcl,orcldg)‘ 

*.log_archive_dest_1=‘LOCATION=/opt/oracle/oradata/orcl/archive1 valid_for=(all_logfiles,primary_role) db_unique_name=orcl‘ 

*.log_archive_dest_2=‘SERVICE=orcldg lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=orcldg‘ 

*.log_archive_format=‘orcl_%t_%s_%r.dbf‘ 

*.memory_target=756023296 

*.open_cursors=300 

*.processes=150 

*.remote_login_passwordfile=‘EXCLUSIVE‘ 

*.standby_file_management=‘AUTO‘ 

*.undo_tablespace=‘UNDOTBS1‘ 

scp initorcl.ora oracle@192.168.215.102:/opt/oracle/11.2/dbs/
    修改备库的initorcl.ora 修改参数如下: 

*.db_name=‘orcl‘ 

*.db_unique_name=‘orcldg‘ 

*.fal_server=‘orcl‘ 

*.log_archive_config=‘dg_config=(orcldg,orcl)‘ 

*.log_archive_dest_1=‘LOCATION=/opt/oracle/oradata/orcl/archive1 valid_for=(all_logfiles,primary_role) db_unique_name=orcldg‘ 

*.log_archive_dest_2=‘SERVICE=orcl lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=orcl‘ 

    然后sql>create spfile from pfile;
11.传输主库数据到备库
        (1)scp -l 8192 -rp /opt/oracle/oradata/orcl/ oracle@192.168.215.102:/opt/oracle/oradata/
            注意目的地不要加orcl 会自动创建目录的
            -l是limit限制,这样最大是8192/8=1M速度,是为了解决stalled问题
            -rp 循环子目录文件
        (2)建立spfile中需要的目录
       如/opt/oracle/admin/orcl/adump dpdump pfile

12.启用物理备用数据库
       sql>startup nomount
       sql>alter database mount standby database;
  (1)启动 redo 应用
  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
  启动实时应用
  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
          这个命令指示备库开始使用备用日志文件进行恢复。它也告诉备库命令完成后回到命令行界面

   SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
   此时只是暂时 redo 应用,并不是停止 Standby 数据库,standby 仍会保持接收只不过不会再应用
                 接收到的归档,直到你再次启动 redo 应用为止

(2)停止standby
           正常情况下,首先
     SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
    然后再sql>shutdown immediate
    当然也可以直接shutdown immediate

(3)备用服务器的管理模式与只读模式
    <1>.启动到管理模式

SQL>shutdown immediate; 

SQL>startup nomount; 

SQL>alter database mount standby database; 

SQL>alter database recover managed standby database disconnect from session;

    <2>.启动到只读方式    

SQL>shutdown immediate; 

SQL>startup nomount; 

SQL>alter database mount standby database; 

SQL>alter database open read only; 

     <3>如果在管理恢复模式下到只读模式

SQL> recover managed standby database cancel;

SQL> alter database open read only;

      这个时候,可以给数据库增加临时数据文件(这个在热备份的时候是没有备份过来的)
      如alter tablespace temp add tempfile ‘/u02/oradata/test/temp01.dbf‘ size 100M;
     <4>.从只读方式到管理恢复方式
     SQL> recover managed standby database disconnect from session;
(4)应用物理备库的几点监控
      如果上面出了问题或者我们不知道成功了没有,可以用下面的方法检测
<1>确认主备库里的归档目的地配置都是有效的
        select DEST_ID, STATUS, DESTINATION, ERROR from V$ARCHIVE_DEST where DEST_ID<=2;
        目的地状态status应该显示为 VALID,注意如果上面没有执行redo应用会有一条error信息
<2>确认重做日志是否真的被应用了,在主库执行
        select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG where name = ‘JED2‘ order by FIRST_TIME;
        如果归档和日志应用均正常,APPLIED 和 ARCHIVED 列都应该是 YES。(如果没有应用redo,applied应该是NO)
        很多教程里都让这个查询以 SEQUENCE# 列排序,但我不推荐。如果以 SEQUENCE# 列排序,当你做了一次故障转移后,序列号会再从1开始,
        这时使用这个查询,你将不能在结果最后看到最新的记录。我曾经很奇怪为什么查不到新记录,其实是因为新记录不是出现在最后,
        我没看到。所以,这个查询都是以 FIRST_TIME 列排序.
<3>主库上检查是否有重做日志缺口
        如果你发现日志没有被应用,那可能是重做日志有了缺口,这种情况下备库无法进行日志应用。但如果你的 FAL_SERVER 参数设置正确,这应该不会有问题
        select STATUS, GAP_STATUS from V$ARCHIVE_DEST_STATUS where DEST_ID = 2;
        如果一切正常,应该返回 VALID 和 NO GAP .切记启用redo应用才能显示No GAP
<4>在主备库上执行以下查询查看数据库状态
         select * from V$DATAGUARD_STATUS order by TIMESTAMP;
<5>检查是否成功:
        主库上查看日志传送情况:
        sql>select dest_name,status,error from v$archive_dest;
        应该log_archive_dest_1和2状态应该是valid
        切换几次日志:
        sql>alter system switch logfile;
                      查看日志序号:
        sql>select sequence# from v$archived_log;
                      备库验证:
        sql>select sequence#,applied from v$archived_log;
13.dataguard启动关闭顺序
       (1)监听
          先启从库再起主库
   #lsnrctl start
       (2)启动
          先启从库:

   sql>startup nomount
   sql>alter database mount standby database;
   sql>alter database recover managed standby database using current logfile disconnect from session;


   在启主库
   sql>startup
        (3)关闭:和开启正好相反
           先关主库:
    sql>shutdown immediate
    再关从库:
    sql>alter database recover managed standby database cancel;
    sql>shutdown immediate;

oracle11g dataguard 安装手册(转)

标签:

人气教程排行