单机搭建Data Guard

搭建环境:

Red Hat Linux Enterprise 5.4

Oracle 10g R2

主机操作系统主要信息为192.168.199.128.

搭建准备:

已存在主库(生产库)DB_NAME=mustang   SID=april

 

开始搭建Data Guard

首先需要准备好参数文件,设定一些必要的参数。在主库,先通过spfile生成pfile文件:

  
  
  
  
  1. SQL>create pfile=’/home/oracle/product/10.2initapril.ora’ from spfile;  

然后修改主库新生成的initapril.ora参数文件。在原有的基础上添加如下内容:

  
  
  
  
  1. db_unique_name=mustang 
  2.  
  3. log_archive_config='DG_CONFIG=(mustang,standby)' 
  4.  
  5. log_archive_dest_2='service=standby arch async valid_for=(online_logfiles,primary_role) 
  6.  
  7. db_unique_name=standby
  8.  
  9. log_archive_dest_1='location=/home/oracle/archive valid_for=(all_logfiles,all_roles) 
  10.  
  11. db_unique_name=mustang
  12.  
  13. log_archive_dest_state_1=enable 
  14.  
  15. log_archive_dest_state_2=enable 
  16.  
  17. log_archive_format=%t_%s_%r.arc 
  18.  
  19. log_archive_max_processes=30 
  20.  
  21. fal_server=standby 
  22.  
  23. fal_client=mustang 
  24.  
  25. db_file_name_convert='standby','mustang' 
  26.  
  27. log_file_name_convert='/home/oracle/','/home/oracle/standby/' 
  28.  
  29. standby_file_management=auto 

修改完参数文件之后,要重新打开主库,然后通过iniapril.ora来创建spfile。如下:

  
  
  
  
  1. SQL>create spfile=’/home/oracle/product/10.2.0/db_1/dbs/spfileapril.ora’ from pfile=’ 
  2. /home/oracle/product/10.2.0/db_1/dbs/initapril.ora’; 

接下来的工作就是要通过主库的参数文件,创建备库需要的参数文件,在主库上运行:

  
  
  
  
  1. SQL>create pfile=’ /home/oracle/product/10.2.0/db_1/dbs/initstandby.ora’ from spfile; 

编辑initstandby.ora。如下所示:

  
  
  
  
  1. standby.__db_cache_size=213909504 
  2.  
  3. standby.__large_pool_size=4194304 
  4.  
  5. *.control_files='/home/oracle/standby/standby.ctl' 
  6.  
  7. *.db_file_multiblock_read_count=8 
  8.  
  9. *.db_file_name_convert='standby','mustang' 
  10.  
  11. *.db_files=80 
  12.  
  13. *.db_name='mustang' 
  14.  
  15. *.db_unique_name='standby' 
  16.  
  17. *.fal_client='standby' 
  18.  
  19. *.fal_server='mustang' 
  20.  
  21. *.global_names=TRUE 
  22.  
  23. *.instance_name='standby' 
  24.  
  25. *.log_archive_config='DG_CONFIG=(mustang,standby)' 
  26.  
  27. *.log_archive_dest_1='location=/home/oracle/standby/archive' 
  28.  
  29. *.log_archive_dest_2='service=mustang arch async valid_for=(online_logfiles,primary_role) 
  30.  
  31. db_unique_name=mustang
  32.  
  33. *.log_archive_dest_state_1='enable' 
  34.  
  35. *.log_archive_dest_state_2='enable' 
  36.  
  37. *.log_archive_format='%t_%s_%r.arc' 
  38.  
  39. *.log_archive_max_processes=30 
  40.  
  41. *.log_buffer=32768 
  42.  
  43. *.log_checkpoint_interval=10000 
  44.  
  45. *.log_file_name_convert='/home/oracle/','/home/oracle/standby/' 
  46.  
  47. *.max_dump_file_size='10240' 
  48.  
  49. *.parallel_max_servers=5 
  50.  
  51. *.processes=50 
  52.  
  53. *.service_names='standby' 
  54.  
  55. *.sga_max_size=300M 
  56.  
  57. *.sga_target=300M 
  58.  
  59. *.standby_file_management='auto' 
  60.  
  61. *.undo_management='auto' 
  62.   *.undo_tablespace='undotbs' 

保存initstandby.ora参数文件。通过initstandby.ora生成动态文件spfilestandby.ora

  
  
  
  
  1. SQL>create spfile=’/home/oracle/product/10.2.0/db_1/dbs/spfilestandby.ora’ from pfile=’ 
  2.  
  3. /home/oracle/product/10.2.0/db_1/dbs/initstandby.ora’; 

在主库上创建我们的密码文件:

  
  
  
  
  1. [oracle@localhost dbs]$orapwd file=’ /home/oracle/product/10.2.0/db_1/dbs/orapwstandby’ password=oracle  entries=10 

通过主库的控制文件生成我们备库的控制文件:

  
  
  
  
  1. SQL>alter database create standby controlfile as ‘/home/oracle/standby.ctl’;  

开始创建备库:

首先创建备库的目录结构,这里我们以主库位于同一目录:

主库:/home/oracle/mustang    主库归档文件:/home/oracle/archive

于是我们在/home/oracle下创建我们的备库目录:

  
  
  
  
  1. mkdir standby 
  2.  
  3. cd standby 
  4.  
  5. mkdir archive 
  6.  
  7. mkdir bdump 
  8.  
  9. mkdir udump 

目录结构完成。

下一步就是要配置监听(如果没有监听standby是启动不了的)。在配置监听之前,首先要进行一步就是要生成备库的密码文件:  

  
  
  
  
  1. [oracle@localhost dbs]$orapwd file=’ /home/oracle/product/10.2.0/db_1/dbs/orapwstandby’ password=oracle  entries=10 

将路径切换到/home/oracle/product/10.2.0/db_1/network/admin下。通过ls命令可以看到:

[oracle@localhost admin]$ ls

listener.ora  shrept.lst  sqlnet.log  tnsnames.ora

再配置监听之前,要先将我们的监听服务停止:lsnrctl stop

开始配置监听

首先配置tnsnames.ora文件。设定服务名(因为我们这里是单机,所以配置在本机上配置就行了,如果是两台机的话,就要在主备库的tnsnames.ora同时修改):

  
  
  
  
  1. april
  2.  
  3.    (DESCRIPTION
  4.  
  5.         (ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1521)) 
  6.  
  7.         (CONNECT_DATA
  8.  
  9.            (SERVER=DEDICATED
  10.  
  11.            (SERVICE_NAME=mustang
  12.  
  13.          ) 
  14.  
  15.     ) 
  16.  
  17.   
  18.  
  19. standby
  20.  
  21.    (DESCRIPTION
  22.  
  23.         (ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1522)) 
  24.  
  25.         (CONNECT_DATA=  
  26.  
  27.            (SERVER=DEDICATED
  28.  
  29.            (SERVICE_NAME=standby
  30.  
  31.          ) 
  32.  

接下来配置listener.ora文件(建议用途netmgr配置,比较方便,因为手工配置容易出错)。配置如下:

  
  
  
  
  1. SID_LIST_LISTENER = 
  2.  
  3.   (SID_LIST = 
  4.  
  5.     (SID_DESC = 
  6.  
  7.       (GLOBAL_DBNAME = mustang
  8.  
  9.       (ORACLE_HOME = /home/oracle/product/10.2.0/db_1) 
  10.  
  11.       (SID_NAME = april
  12.  
  13.     ) 
  14.  
  15.    (SID_DESC = 
  16.  
  17.       (GLOBAL_DBNAME = standby
  18.  
  19.       (ORACLE_HOME = /home/oracle/product/10.2.0/db_1) 
  20.  
  21.       (SID_NAME = standby
  22.  
  23.     ) 
  24.  
  25.   ) 
  26.  
  27.   
  28.  
  29. LISTENER = 
  30.  
  31.   (DESCRIPTION_LIST = 
  32.  
  33.     (DESCRIPTION = 
  34.  
  35.       (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) 
  36.  
  37.     ) 
  38.  
  39.     (DESCRIPTION = 
  40.  
  41.       (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1522)) 
  42.  
  43.     ) 
  44.  
  45.   ) 
  46.  
  47.  
  48. TRACE_LEVEL_LISTENER = USER   
  49.  

至此我们的监听配置就完成,启动监听器:

  
  
  
  
  1. [oracle@localhost admin]$ lsnrctl start 

出现如下内容说明,已经配置成功:

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 26-JUL-2012 20:59:37

Copyright (c) 1991, 2005, Oracle.  All rights reserved.

Starting /home/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.1.0 - Production

System parameter file is /home/oracle/product/10.2.0/db_1/network/admin/listener.ora

Log messages written to /home/oracle/product/10.2.0/db_1/network/log/listener.log

Trace information written to /home/oracle/product/10.2.0/db_1/network/trace/listener.trc

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1522)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1521)))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production

Start Date                26-JUL-2012 20:59:37

Uptime                    0 days 0 hr. 0 min. 0 sec

Trace Level               user

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /home/oracle/product/10.2.0/db_1/network/admin/listener.ora

Listener Log File         /home/oracle/product/10.2.0/db_1/network/log/listener.log

Listener Trace File       /home/oracle/product/10.2.0/db_1/network/trace/listener.trc

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1522)))

Services Summary...

Service "mustang" has 1 instance(s).

  Instance "april", status UNKNOWN, has 1 handler(s) for this service...

Service "standby" has 1 instance(s).

  Instance "standby", status UNKNOWN, has 1 handler(s) for this service...

The command completed successfully

我们也可以通过tnsping来检查,是否配置成功:

  
  
  
  
  1. [oracle@localhost admin]$ tnsping standby 

TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 26-JUL-2012 21:00:45

Copyright (c) 1997, 2005, Oracle.  All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1522)) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=standby)))

OK (20 msec)


   
   
   
   
  1. [oracle@localhost admin]$ tnsping april 

TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 26-JUL-2012 21:00:51

Copyright (c) 1997, 2005, Oracle.  All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=mustang)))

OK (30 msec)

看到以上提示,说明我们的监听配置完全正确。

 

复制相关文件到备库的目录下:

  
  
  
  
  1. [oracle@localhost mustang]$cp /home/oracle/mustang/*.dbf /home/oracle/standby 
  2.  
  3. [oracle@localhost mustang]$cp /home/oracle/standby.ctl /home/oracle/standby/

接下来,开始启动我们的主库和备库,最好打开两个窗口进行实验:

在主库窗口:

1)指定以april实例开始我们的主库:

  
  
  
  
  1. export ORACLE_SID=april 

2

  
  
  
  
  1. [oracle@localhost admin]$ sqlplus sys/oracle@april as sysdba  

3)开启主库的归档模式和force logging:  

 

 

  
  
  
  
  1. SQL>alter database archivelog;  
  2.  
  3. SQL>alter database force logging;   

 

 

在备库窗口:

1)  指定以standby实例打开我们的备库:

  
  
  
  
  1. export ORACLE_SID=standby 

2) 

  
  
  
  
  1. [oracle@localhost admin]$ sqlplus sys/oracle@standby as sysdba 

 

3)  使standby数据库处于恢复状态,主备库归档日志同步

  
  
  
  
  1. SQL>alter database recover managed standby database disconnect from session: 

 

接下来就要查看我们的Data Guard是否正常。

我们在主库环境下,查看当前的归档日志情况:

  
  
  
  
  1. SQL>select sequence#,first_time,next_time from v$archived_log order by sequence#; 

然后切换到备库环境下,查看当前的归档日志情况:

  
  
  
  
  1. SQL>select sequence#,first_time,next_time from v$archived_log order by sequence#; 

接着我们再次切换到主库环境下,进行一次日志切换:

  
  
  
  
  1. SQL>alter system switch logfile; 

再次查看主库的归档情况:

  
  
  
  
  1. SQL>select sequence#,first_time,next_time from v$archived_log order by sequence#; 

这时,你会发现多了2个归档文件。

我们再切到备库,查看:

  
  
  
  
  1. SQL>select sequence#,first_time,next_time from v$archived_log order by sequence#; 

发现备库的归档文件也同样多了。

至此,可以说明我们的归档同步了。

在主库下:我们新建一个表,然后往表中插入数据,先不要commit。我们发现备库中也同样有了这个表,但是还没有数据,如果我们commit掉主库的事务,备库中该表就有了数据了。

我们可以查看主库和备库的switchover参数。

  
  
  
  
  1. SQL>select switchover_status,database_role from v$database; 

   

DG搭建工作至此完成。刚刚学习Data Guard,上文有不正确的地方,还请多多批评赐教!

 

 

 

 

你可能感兴趣的:(oracle,Data,单机,dg,guard)