oracle11g dataguard 完全手册_第1页
oracle11g dataguard 完全手册_第2页
oracle11g dataguard 完全手册_第3页
oracle11g dataguard 完全手册_第4页
oracle11g dataguard 完全手册_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、   一、前言:   网络上关于dataguard的配置文章很多,但是很多打着oracle11g的文章实际都是只能在9 10 上运行,比如FAL_CLIENT在11g中已经废弃,但是现在网络上的文章都是没有标注这一点。而且对于具体含义语焉不详对于新手只能知其然而不知其所以然。这篇文章我就想让像我这样的人对于dataguard配置不仅仅知道怎么配置,还要知道为什么需要这样配置,这样的效果才是最好的。  这篇文章不仅仅是记录如何配置,还介绍了为什么是这样,以及注意要点,我希望这个文章可以作为进行dataguard配置的一个参考手册。二、前

2、提1.主库是归档模式:  如果我们不清楚为什么是归档模式,那我们就应该也不会清楚dataguard是用来做什么的。透过很多修饰的官方语言,我们需要明确DG(dataguard简称,后同)实际上的作用就是用来高可用。而实现原理就是从主库获取数据到从库,在主库发生异常的时候,从库接管主库,完成身份的变化。可以一个主库,最多9个从库。同时分为逻辑standby和物理standby这里我们讨论的是物理standby.   一旦创建并配置成 standby 后,dg 负责传输 primary数据库 redo data 到 standby 数据库,standby 数据库通过应

3、用接收到的 redo data 保持与 primary 数据库的事务一致。   这下清楚了吧,需要保证主从库一致,需要传输archive log和redo log到从库,如果不是归档模式无法保证主从库的数据一致。2.从库只需要安装数据库软件,数据从主库传输后完成。3.很多人说11g有了active dataguard(ADG),逻辑standby 实际上已经没什么用处了。4.主从库硬件最好一致。oracle数据库版本需要一致。  (1)内存检查项:     # grep MemTotal /proc/meminfo 

4、;    交换分区检查项:如果内存在1-2G,swap是1.5倍;2-16G,1倍;超过16G,设置为16G即可。     # grep SwapTotal /proc/meminfo     查看共享内存大小:     # df -h /dev/shm   (2)查看系统处理器架构,与oracle安装包一致     # uname -m   (3)空间空间 /tmp

5、必须大于1G     # df -h /tmp5.配置环境数据库用户必须有sysdba权限6.后面的环境:主库 01 数据库实例名:orcl        db_unique_name:orcl              从库 02 数据库实例名:orcl    &#

6、160;  db_unique_name:orcldg三、配置1.判断DG是否已经安装:  select * from v$option where parameter = 'Oracle Data Guard'  如果是true表示已经安装可以配置,否则需要安装相应组件。2.设置主库为强制记录日志。  默认情况下数据库操作会记录redo log,但是在一些特定的情况下可以使用nologging来不生成redo信息  (1)表的批量INSERT(通过/*+APPEND */提示使用“直接路径插入“。或采用SQL*Loader直接

7、路径加载)。表数据不生成redo,但是 所有索引修改会生成redo,但是所有索引修改会生成redo(尽管表不生成日志,但这个表上的索引却会生成redo!)。   (2)LOB操作(对大对象的更新不必生成日志)。   (3)通过CREATE TABLE AS SELECT创建表  (4)各种ALTER TABLE操作,如MOVE和SPLIT  (5)在一些表迁移和表空间迁移中,可以使用alter table a nologging;或者alter tablespace snk nologging;在操作完成后再修改回loggi

8、ng状态。  这里需要多说一句,如果你使用nologging导入大批量数据,以后对这些数据的修改会在redo或者archive log中,但是基准的数据是没有的,所以一旦介质损坏是无法完全恢复的,必须在使用nologging完成切换回logging后,做一次全备或者0级备份。   (1)强制记录日志:sql>alter database force logging;   (2)检查状态(YEs为强制):sql>select name,force_logging from v$database;   (3)如果需要

9、在主库添加或者删除数据文件时,这些文件也会在备份添加或删除,使用如下:      sql>alter system set standy_file_management='AUTO'      默认此参数是manual手工方式 sql>show parameter standby  3.创建standby log files(备用日志文件)   从库使用standby log files来保存从主库接收到的重做日志。既然主要是从

10、库在使用,那为什么需要在主库上也建立   standby log files?原因主要由两个:一是主库可能转换为备库,而备库是需要有standby log files的 二是如果主库   建立了standby log files那备库会自动建立。   建立standby如要注意以下几点:   <1>standby log files的大小和redo log files一样。      查询redo log files文件大小(默认50M,3个)

11、:select group#,bytes/1024/1024 as M from v$log   <2>一般而言, standbyredo 日志文件组数要比 primary 数据库的 online redo 日志文件组数至少多一个。      推荐 standbyredo 日志组数量基于 primary 数据库的线程数(这里的线程数可以理解为 rac 结构中的 rac      节点数)。      有一个推荐的公

12、式可以做参考:(每线程的日志组数+1)*最大线程数      假设现在节点是1个,则=(3+1)*1=4      如果是双节点       则=(3+1)*2=8      这里我们创建4个standby logfile:      另:不建议组号group#紧挨着redo,因为后续redo有可能调整,这里我们从建立从11到14的sta

13、ndby logfile     12345678# cd $ORACLE_BASE/oradata/orcl/# mkdir dg# chown oracle:dba dgsql> alter database add standby logfile group  11 '/opt/oracle/oradata/orcl/dg/standby11.log' size 50M;sql> alter 

14、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 

15、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 &#

16、160;      如果没有sql>orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle     (2)检查REMOTE_LOGIN_PASSWORDFILE值是否为 EXCLUSIVE        sql>show parameter REMOTE_LOGIN_PASSWORDFILE 如果值不是EXCLUSIVE,则:alter system set r

17、emote_login_passwordfile=exclusive scope=spfile;     (3)密码文件需要scp到从库        # scp orapworcl oracle02:/opt/oracle/11.2/dbs 提示输入yes      (4)控制文件:        11g的控制文件一共两

18、份,内容一样,一份在$ORACLE_BASE/oradata/orcl/control01.ctl 一份在/opt/oracle/flash_recovery_area/orcl/control02.ctl 生成standby控制文件:1234sql>shutdown immediatesql>startup mountsql>alter database create standby controlfile as '/tmp/standby_control01.ctl'sql>sta

19、rtup open;  然后在备库建立对应的目录,并授权 mkdir orcl- chown oracle:oinstall(或dba) orclscp control01.ctl oracle02:/opt/oracle/oradata/orclscp control02.ctl oracle02:/opt/oracle/flash_recovery_area/orcl/          5.db_n

20、ame和db_unique_name      默认db_name和db_unique_name和实例名是一致的,这里是orcl      需要注意在DG中主库和从库的db_unique_name是不能一致的,需要区分开的。      这里我们设置主库的db_unique_name为orcl,从库为orcldg      sql>show parameter db_unique_name&#

21、160;     设置:alter system set db_unique_name=orcl scope=spfile;      -注意虽然默认db_unique_name和db_name是一致的,但是需要显式设置,否则在spfile中没有此参数        6.闪回数据库:      强烈建议开启数据库闪回功能。闪回允许你将数据库还原到以前的某一时间点。当发生故障转移时,这个功

22、能非常有用,      它能让你将老的主库闪回到故障前,然后将其转换为备库。如果没有启用闪回功能,你就必须重建备库,意味着要再复制一次数据文件。      除了这个好处,闪回还能在某些情况下让你避免从备份恢复数据。      (1)快速恢复区(Flash/Fast Recovery Area),默认是配置的,但是需要确认这个区域的磁盘够大,至少300G以上(默认3G)       sql

23、>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)查看是否启用,默认是不开启的  

24、;     sql>select flashback_on from v$database;       开启:sql>alter database flashback on;       如果你碰到 ORA-01153 报错,那一定是在备库进行此操作。你需要先取消重做日志应用,启用闪回日志,然后重新启用日志应用。       在主库启用闪回日志,不会同步备库也启用

25、。你必须手动在主库和备库上均启用闪回日志。       如果不启用闪回日志,当出现故障转移时,你将需要完全重新开始创建一个备库。    7.SQL*NET设置      (1)配置主库的监听         虽然可以通过netca来进行配置,但是除了这个默认的外,我们还需要一个静态注册SID_LIST_LISTENER,如果没有此从参数而且  datagua

26、rd启动顺序不正确,主库会报PINGARC1:Heartbeat failed to connect to standby '*'.Error is 12514导致归档无法完成  配置如下 SID_LIST_LISTENER=     (SID_LIST =  (SID_DESC =      (GLOBAL_DBNAME = orcl)      (ORACLE_HOM

27、E = /opt/oracle/11.2)      (SID_NAME = orcl)  )     )          LISTENER =   (DESCRIPTION_LIST =     (DESCRIPTION =     &

28、#160; (ADDRESS = (PROTOCOL = TCP)(HOST = primaryDB)(PORT = 1521)     )   )    #vi $ORACLE_HOME/network/admin/listener.ora 加入上面的内容       (2)配置tnsnames        #vi $ORA

29、CLE_HOME/network/admin/tnsnames.oraORCL =   (DESCRIPTION =     (ADDRESS_LIST =       (ADDRESS = (PROTOCOL = TCP)(HOST = 01)(PORT = 1521)     )     (CONNECT_DATA =

30、       (SERVICE_NAME = orcl)     )   )  ORCLDG =   (DESCRIPTION =     (ADDRESS_LIST =       (ADDRESS = (PROTOCOL = TCP)(HOST =

31、02)(PORT = 1521)     )     (CONNECT_DATA =       (SERVICE_NAME = orcldg)     )   )          (3)传输到备库并修改listener.ora和tnsnames.

32、ora  scp $ORACLE_HOME/network/admin/listener.ora oracle02:/opt/oracle/11.2/network/admin/scp $ORACLE_HOME/network/admin/tnsnames.ora oracle02:/opt/oracle/11.2/network/admin/ -listener.ora: SID_LIST_LISTENER (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcldg) (ORACLE_

33、HOME = /opt/oracle/11.2) (SID_NAME = orcl) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = standbyDB)(PORT = 1521) ) )    tnsnames.ora:不需要修改        8.重做日志传输配置        &#

34、160;(1)配置归档日志位置:  查询已经设置的归档路径sql:archive log list或者show parameter log_archive_dest_1sql> 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;     

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

36、          (2)配置重做日志到备份库:sql>alter system set log_archive_dest_2='SERVICE=orcldg lgwr sync valid_for=(online_logfile,primary_role)                  d

37、b_unique_name=orcldg'     (3)要注意STANDBY_ARCHIVE_DEST 参数不需要,已经被官方弃用。设置此参数后启动数据库,只会报 ORA-32004:      obsolete or deprecated parameter(s) specified for RDBMS instance 错。  9.配置FAL_SERVER    这个参数指定当日志传输出现问题时,备库到哪里去找缺少的归档日志。它用在备库接收的

38、到的重做日志间有缺口的时候。    这种情况会发生在日志传输出现中断时,比如你需要对备库进行维护操作。在备库维护期间,没有日志传输过来,这时缺口就出现了。    设置了这个参数,备库就会主动去寻找那些缺少的日志,并要求主库进行传输。    你是主库,就填写:      fal_server=从库    从库上就反过来:       fal_server=主库 

39、;          注意:FAL_CLIENT在11g中已经废弃,虽然可以配置但是已经不起作用了。    sql>alter system set FAL_SERVER='orcldg'   10.Data Guard 配置里的另外一个库的名字     sql> alter system set log_archive_config = 'dg_config=(orcl

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

41、chive_dest_state_1=enable   *.log_archive_dest_state_2=enable  vi initorcl.oraorcl._db_cache_size=180355072orcl._java_pool_size=4194304orcl._large_pool_size=4194304orcl._oracle_base='/opt/oracle'#ORACLE_BASE set from environmentorcl._pga_aggregate_target=2642411

42、52orcl._sga_target=494927872orcl._shared_io_pool_size=0orcl._shared_pool_size=289406976orcl._streams_pool_size=8388608*.audit_file_dest='/opt/oracle/admin/orcl/adump'*.audit_trail='db'*.compatible='.0'*.control_files='/opt/oracle/oradata/orcl/control01.ctl',&#

43、39;/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

44、='(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_des

45、t_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_

46、tablespace='UNDOTBS1'  scp initorcl.ora oracle02:/opt/oracle/11.2/dbs/    修改备库的initorcl.ora 修改参数如下:*.db_name='orcl'  *.db_unique_name='orcldg'  *.fal_server='orcl'  *.log_archive_config='dg_c

47、onfig=(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' 

48、        然后sql>create spfile from pfile;  11.传输主库数据到备库        (1)scp -l 8192 -rp /opt/oracle/oradata/orcl/ oracle02:/opt/oracle/oradata/          

49、0; 注意目的地不要加orcl 会自动创建目录的            -l是limit限制,这样最大是8192/8=1M速度,是为了解决stalled问题            -rp 循环子目录文件        (2)建立spfile中需要的目录    

50、   如/opt/oracle/admin/orcl/adump dpdump pfile 12.启用物理备用数据库       sql>startup nomount       sql>alter database mount standby database;       (1)启动 redo 应用  SQL> ALTER DATABASE R

51、ECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;  启动实时应用  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;          这个命令指示备库开始使用备用日志文件进行恢复。它也告诉备库命令完成后回到命令行界面   SQL

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

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

54、#160;(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>.启动到只读方式&#

55、160;   SQL>shutdown immediate; SQL>startup nomount; SQL>alter database mount standby database; SQL>alter database open read only;     <3>如果在管理恢复模式下到只读模式SQL> recover managed standby database canc

56、el; SQL> alter database open read only;      这个时候,可以给数据库增加临时数据文件(这个在热备份的时候是没有备份过来的)      如alter tablespace temp add tempfile '/u02/oradata/test/temp01.dbf' size 100M;     <4>.从只读方式到管理恢复方式&

57、#160;    SQL> recover managed standby database disconnect from session;         (4)应用物理备库的几点监控      如果上面出了问题或者我们不知道成功了没有,可以用下面的方法检测     <1>确认主备库里的归档目的地配置都是有效的    

58、;    select DEST_ID, STATUS, DESTINATION, ERROR from V$ARCHIVE_DEST where DEST_ID<=2;        目的地状态status应该显示为 VALID,注意如果上面没有执行redo应用会有一条error信息     <2>确认重做日志是否真的被应用了,在主库执行        se

59、lect 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#

60、 列排序,但我不推荐。如果以 SEQUENCE# 列排序,当你做了一次故障转移后,序列号会再从1开始,        这时使用这个查询,你将不能在结果最后看到最新的记录。我曾经很奇怪为什么查不到新记录,其实是因为新记录不是出现在最后,        我没看到。所以,这个查询都是以 FIRST_TIME 列排序.     <3>主库上检查是否有重做日志缺口        如果你发现日志没有被应用,那可能是重做日志有了缺口,这种情况下备库无法进行日志应用。但如果你的 FAL_SERVER 参数设置正确,这应该不会有问题       

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论