您的位置:首页 > 其它

创建物理standby (data guard)

2011-09-28 16:08 615 查看
第一次做 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 ; 这个功能的可以用来查询前一天(或者前若干时间)以前的数据,比如报表之类的,因为今天只能查询昨天以前的报表,对数据的同步性的要求不是那么严格。查询完后一定要将从库设回恢复模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: