创建物理standby (data guard)

      第一次做 data guard ,刚开始对原理没有理解,做了几次总是失败。后来在大量资料的帮助下终于成功的实现了。下面把操作步骤小结一下,留作参考。(参考前辈的)

**************************************************************

运行Data Guard的条件
1、 在主库和从库的所有机器上必须安装同一个版本的Oracle企业版。
2、 主库必须运行在归档模式下。
3、 主库和从库的操作系统必须一样(允许版本不同),从库可以使用与主库不同的目录结构。
4、 主从库硬件系统的体系结构必须相同。比如:主库运行在64位的Sun Sparc系统上,如果从库是32位的Linux Intel系统就不允许。主从库硬件的配置可以不同,比如:CPU数量、内存大小、存储配置等。
5、 主从库可以是单实例的数据库,也可以是多实例的RAC数据库。
6、 每个主从库必须有它自己的控制文件。
7、 如果把主从库放在了一个系统里,则必须调整初始化参数。
8、 只要使用Data Guard就要保持主库是FORCE LOGGING模式,如果在主库上使用了no logging操作不生成日志,因此数据也不会传递到从库。 9、 管理主从库的用户必须具有SYSDBA权限。

主库:redhat5.5         ip:192.168.1.184     SID:PRIMARYDB
从库:redhat5.5         ip:192.168.1.38       SID:STANDBYDB

操作步骤:
1、安装软件,主库和从库都安装oracle数据库系统(只装产品,不装库);
2、在主库上使用DBCA(Database Configuration Assistant)建一个数据库,SID设为PRIMARYDB;
3、查看并记录主库的归档路径
    SQL> show parameter recover
           NAME                                 TYPE        VALUE
        ------------------------------------ ----------- ------------------------------
           db_recovery_file_dest                string      /opt/app/oracle/flash_recovery_area
           db_recovery_file_dest_size          big integer 2G
           recovery_parallelism                    integer     0
  注意:10g企业版下,归档路径指定参数是 flash_recovery_area , 而做standby时需要为日志文件制定多个归档路径(因为standby本身就是对通过日志文件实现的),所以我们会通过     log_archive_dest_1参数来指定归档路径。而且不能同时指定 flash_recovery_area 和log_archive_dest_1,否则启动时会提示处事话参数文件错误。
 对于该问题,我们可以对Pfile进行手动修改,也可以通过SQL语句动态指定,如下;
   Sql>alter system set log_archive_dest_1='LOCATION=/opt/app/oracle/Archive MANDATORY' scope=both;
4、查看,并记录下主库一些重要文件的路径
    主库控制文件日志文件数据文件的存放位置:SQL> select name from v$datafile;
    我这里是  /opt/app/oracle/oradata/primarydb
    初始化参数,密钥文件的位置:SQL> show parameter spfile
    我这里是  /opt/app/oracle/product/10.2.0/db_1/dbs   
    监听文件的位置
   /opt/app/oracle/product/10.2.0/db_1/network/admin
5、关闭数据库,并启动到mount模式: Sql>shutdown immediate; Sql>startup mount;
6、将主库设置成归档状态和自动归档模式: Sql>alter database archivelog; Sql>alter system set log_archive_start=true scope=spfile;
7、在主库上面创建从库的控制文件standby.ctl : Sql>alter database create standby controlfile as '/opt/standbydb.ctl';
8、在主库上面创建从库的初始化参数文件standby.ora :Sql>create pfile='/opt/standbydb.ora' from spfile;
9、关闭实例: Sql>shutdown immediate;
10、将主库的数据文件,第7步中创建的从库的控制文件,第八步创建的初始化参数文件,以及主库的密钥文件一起拷贝到从库。在从库中创建与主库相同的路径(也可以不同,但是要自    己记清楚每一个路径,并对应到住从库的初始化参数文件里) 存放standbydb.ctl、数据文件; 将口令文件PWDPRIMARYDB更名为PWDSTANDBYDB放到对应的目录下。(windows下密钥文件好像有.ora的后缀名)       
11、 在与主库对应的路径下创建空文件夹bdump、cdump、udump、create、pfile (我这里主库路径为/opt/app/oracle/admin/primarydb);
12、创建并配置住从库的监听和TNS ,并测试是否能 ping 通
15、配置主从库的tnsnames.ora ,都将里面的内容设置成如下内容,使其能够互相通信:
   STANDBYdb = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.38)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME =                 PRIMARY) ) )
 PRIMARYdb = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.184)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = PRIMARY) ) )
16、修改主从库的PFILE,如下:
主库:
#####################################
primarydb.__large_pool_size=4194304
primarydb.__shared_pool_size=159383552
primarydb.__streams_pool_size=0

*.audit_file_dest='/opt/app/oracle/admin/primarydb/adump'
*.background_dump_dest='/opt/app/oracle/admin/primarydb/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/opt/app/oracle/oradata/primarydb/control01.ctl','/opt/app/oracle/oradata/primarydb/control02. ctl','/opt/app/oracle/oradata/primarydb/control03.ctl'
*.core_dump_dest='/opt/app/oracle/admin/primarydb/cdump'
*.db_block_size=8192
*.db_domain='yto.net'
*.db_file_multiblock_read_count=16
*.db_name='primaryd'
*.db_unique_name='primarydb'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=primarydbXDB)'
*.job_queue_processes=10
*.log_archive_start=TRUE
*.log_archive_config='dg_config=(primarydb,standbydb)'
*.log_archive_dest_1='location=/opt/app/oracle/flash_recovery_area'     注:主库本地归档日志路径
*.log_archive_dest_2='service=standbydb arch valid_for=(online_logfiles,primary_role) db_unique_name=standbydb'    注:将日志写到从库归档目录下

*.log_archive_dest_state_2=defer
*.open_cursors=300
*.pga_aggregate_target=184549376
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=554696704
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/opt/app/oracle/admin/primarydb/udump'
*.fal_server=standbydb
*.fal_client=primarydb    
*.db_file_name_convert='/opt/app/oracle/oradata/primarydb','/opt/app/oracle/oradata/primarydb','/opt/app/oracle /oradata/primarydb','/opt/app/oracle/oradata/primarydb'
*.log_file_name_convert='/opt/app/oracle/oradata/primarydb','/opt/app/oracle/oradata/primarydb','/opt/app/oracl e/oradata/primarydb','/opt/app/oracle/oradata/primarydb'

以上四句指定当角色切换时,系统该到哪里去找数据文件日志文件
#################################################
从库:
standbydb.__db_cache_size=381681664
standbydb.__java_pool_size=4194304
standbydb.__large_pool_size=4194304
standbydb.__shared_pool_size=159383552
standbydb.__streams_pool_size=0

*.audit_file_dest='/opt/app/oracle/admin/primarydb/adump'
*.background_dump_dest='/opt/app/oracle/admin/primarydb/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/opt/app/oracle/oradata/primarydb/standby01.ctl','/opt/app/oracle/oradata/primarydb/standby02. ctl','/opt/app/oracle/oradata/primarydb/standby03.ctl'
*.core_dump_dest='/opt/app/oracle/admin/primarydb/cdump'
*.db_block_size=8192
*.db_domain='yto.net'
*.db_file_multiblock_read_count=16
*.db_name='primaryd'
*.db_unique_name='standbydb'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=primarydbXDB)'
*.job_queue_processes=10
*.log_archive_start=TRUE
*.log_archive_config='dg_config(primarydb,standbydb)'
*.log_archive_dest_1='location=/opt/app/oracle/flash_recovery_area' 这是从库本地的归档路径
*.log_archive_dest_2='service=primarydb arch valid_for=(online_logfiles,primary_role) db_unique_name=primarydb'  *.log_archive_dest_state_2=enable

*.open_cursors=300
*.pga_aggregate_target=184549376
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=554696704
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/opt/app/oracle/admin/primarydb/udump'
*.fal_server=primarydb
*.fal_client=standbydb   角色互换
*.db_file_name_convert='/opt/app/oracle/oradata/primarydb','/opt/app/oracle/oradata/primarydb','/opt/app/oracle /oradata/primarydb','/opt/app/oracle/oradata/primarydb'
*.log_file_name_convert='/opt/app/oracle/oradata/primarydb','/opt/app/oracle/oradata/primarydb','/opt/app/oracl e/oradata/primarydb','/opt/app/oracle/oradata/primarydb'
*.standby_file_management=auto

###########################################
13、主库,根据修改后的PFILE创建SPFILE,并启动数据库
create spfile from pfile='pfile的路径'
 然后 startup;
14、从库,根据pfile创建spfile
create spfile from pfile='pfile的路径'
15、启动从库的实例,并且将从库设置成standby模式: Sql>startup nomount; Sql>alter database mount standby database;
16、在从库启动日志应用服务: Sql>alter database recover managed standby database disconnect from session;
17、转到主库,启动到物理从库的归档: Sql>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=PRIMARY' SCOPE=BOTH; Sql>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH;
18、校验Data Guard的运转:
主库,归档当前日志: SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
从库,校验归档日志是否正常接收: SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
从库,查看新的归档日志是否正常用于恢复:
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# APP --------- ---
8 YES
9 YES
10 YES
11 YES
如果都是像以上那样的内容,都是YES的话,那就成功了。
19、这个时候从库只是将日志文件拿过来存放起来,但并没有执行日志文件,所以在主库上所做的操作无法在从库上得到结果,即无法在从库上查询数据。要在从库上查询数据,要执行以下语句:在从库上用sysdba 用户连接  Sql>alter database recover managed standby database disconnect from session ; Sql>alter database recover managed standby database cancel ; Sql>alter database open read only ; 查询数据即可。查询完成以后,需要恢复从库为恢复模式  Sql>alter database recover managed standby database disconnect from session ; 这个功能的可以用来查询前一天(或者前若干时间)以前的数据,比如报表之类的,因为今天只能查询昨天以前的报表,对数据的同步性的要求不是那么严格。查询完后一定要将从库设回恢复模式。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值