oracle dataguard配置步骤

rac,dataguard,stream被认为是oracle的高可用的三架马车。

 

三架马车各有侧重:

rac主要解决了单节点故障,实现负载均衡,也实现了高性能。常用于24x7的商业应用。

dataguard用冗余的方式实现高可用的,解决容灾。

stream更加丰富,主要是应用层面的数据共享。

 

前一段主要进行了rac的环境搭建,这两天在虚拟机上进行了dataguard环境搭建和测试,开始想对之前的rac作为primary ,但是一直没有成功。还是一步步从简单的开始,从单实例来做,创建一个单实例的数据库,在同一台机器上搭建一个standby数据库。将自己的搭建步骤整理写出来,加深印象,供以后搭建参考,搭建的难点在于参数文件的配置。

 

环境:

操作系统:redhat 4 32位 2.6.9-89.ELsmp

数据库版本:oracle 10g 10.2.0.1

已经有一个单实例的数据库了。

我是参考三思笔记搭建的,数据库名字直接用上面的名字了。下面所指的主数据库,primary数据库都是指jssweb, standby数据库指jsspdg。

 

我的数据库路径是

oracle_home=/usr/oracle/product/10.2.0/db_1

ORACLE_BASE=/usr/oracle

文件路径是:/usr/oracle/oradata/数据库名字/数据文件,控制文件,日志文件和归档日志文件。

 

搭建步骤:

1、确定primary数据库是归档模式

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /usr/oracle/oradata/jssweb
Oldest online log sequence     34
Next log sequence to archive   36
Current log sequence           36

如果非归档模式

先设置归档位置

参看参数

SQL> show parameter archive log;

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
archive_lag_target                   integer                0
log_archive_config                   string                 DG_CONFIG=(jssweb,jsspdg)
log_archive_dest                     string
log_archive_dest_1                   string                 LOCATION=/usr/oracle/oradata/j
                                                            ssweb VALID_FOR=(ALL_LOGFILES,
                                                            ALL_ROLES) DB_UNIQUE_NAME=jssw
                                                            eb

如果没有设置归档位置,先暂时设置一个归档位置,再重新启动数据为归档模式

 

SQL> alter system set log_archive_dest_1='LOCATION=/usr/oracle/oradata/jssweb'

 

然后

SQL> shutdown immediate

……

SQL> startup mount

SQL> alter database archivelog;

SQL> alter database open;

 

2、先确定primary数据库是FORCED LOGGING模式,目的是所有ddl语句都写redo log,及时是有nologging限制的ddl语句。

SQL> alter database force logging;
alter database force logging
*
ERROR at line 1:
ORA-12920: database is already in force logging mode

说明已经是FORCED LOGGING

 

3、创建standby数据库的文件夹。主要是standby和primary的启动参数文件需要用。

用oracle用户

在/usr/oracle/admin下创建jsspdg文件夹

在/usr/oracle/admin/jsspdg/下创建adump  bdump  cdump  dpdump  pfile  udump这些文件夹。

 

4、创建standby的控制文件,控制文件名直接用control01.ctl

在主primary数据库中创建

登录主数据库

SQL> alter database create standby controlfile as '/usr/oracle/oradata/jsspdg/control01.ctl';

 

5、创建主数据库的pfile,主要是在此pfile基础上修改primary和standby数据库的参数文件。

SQL> create pfile from spfile;

这时候在/usr/oracle/product/10.2.0/db_1/dbs/目录下会多出来一个initjssweb.ora的文件

我们就在这个参数文件的基础上进行修改

复制一份initjssweb.ora,重新命名为standby数据库的参数文件initjsspdg.ora,也可以在修改好的primary数据的参数文件的基础上修改。

[oracle@rac3 dbs]$cp initjssweb.ora     initjsspdg.ora

 

修改主数据库的参数文件:initjssweb.ora 

jssweb.__db_cache_size=92274688
jssweb.__java_pool_size=4194304
jssweb.__large_pool_size=4194304
jssweb.__shared_pool_size=62914560
jssweb.__streams_pool_size=0
*.audit_file_dest='/usr/oracle/admin/jssweb/adump'
*.background_dump_dest='/usr/oracle/admin/jssweb/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/usr/oracle/oradata/jssweb/control01.ctl','/usr/oracle/oradata/jssweb/control02.ctl','/usr/oracle/oradata/jssweb/control03.ctl'
*.core_dump_dest='/usr/oracle/admin/jssweb/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='jssweb'
*.db_recovery_file_dest='/usr/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=jsswebXDB)'
*.job_queue_processes=10
*.log_archive_dest_1='LOCATION=/usr/oracle/oradata/jssweb'
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=50
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=60
*.sga_target=167772160
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/usr/oracle/admin/jssweb/udump'

#添加下面内容;
DB_UNIQUE_NAME=jssweb
LOG_ARCHIVE_CONFIG='DG_CONFIG=(jssweb,jsspdg)'
LOG_ARCHIVE_DEST_1='LOCATION=/usr/oracle/oradata/jssweb VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=jssweb'
LOG_ARCHIVE_DEST_2='SERVICE=jsspdg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=jsspdg'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
FAL_SERVER=jsspdg
FAL_CLIENT=jssweb
DB_FILE_NAME_CONVERT='/usr/oracle/oradata/jsspdg','/usr/oracle/oradata/jssweb'
LOG_FILE_NAME_CONVERT='/usr/oracle/oradata/jsspdg','/usr/oracle/oradata/jssweb'
STANDBY_FILE_MANAGEMENT=AUTO

 

修改主数据库的参数文件:initjsspdg.ora 内容如下:

jsspdg.__db_cache_size=88080384
jsspdg.__java_pool_size=4194304
jsspdg.__large_pool_size=4194304
jsspdg.__shared_pool_size=67108864
jsspdg.__streams_pool_size=0
*.audit_file_dest='/usr/oracle/admin/jsspdg/adump'
*.background_dump_dest='/usr/oracle/admin/jsspdg/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/usr/oracle/oradata/jsspdg/control01.ctl'
*.core_dump_dest='/usr/oracle/admin/jsspdg/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.DB_FILE_NAME_CONVERT='/usr/oracle/oradata/jssweb','/usr/oracle/oradata/jsspdg'
*.db_name='jssweb'
*.db_recovery_file_dest='/usr/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.DB_UNIQUE_NAME='jsspdg'
*.FAL_CLIENT='jsspdg'
*.FAL_SERVER='jssweb'
*.job_queue_processes=10
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(jssweb,jsspdg)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/usr/oracle/oradata/jsspdg VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=jsspdg'
*.LOG_ARCHIVE_DEST_2='SERVICE=jssweb LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=jssweb'
*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'
*.LOG_ARCHIVE_DEST_STATE_2='ENABLE'
*.LOG_FILE_NAME_CONVERT='/usr/oracle/oradata/jssweb','/usr/oracle/oradata/jsspdg'
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=50
*.REMOTE_LOGIN_PASSWORDFILE='EXCLUSIVE'
*.sessions=60
*.sga_target=167772160
*.STANDBY_FILE_MANAGEMENT='AUTO'
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/usr/oracle/admin/jsspdg/udump'
service_names=jsspdg
instance_name=jsspdg

 

6、复制数据库文件,日志文件到standby的文件夹下:

复制方式很多可以直接拷贝,也可以用数据库复制

登录主库

SQL>alter database begin backup;

SQL>host cp /usr/oracle/oradata/jssweb/*.dbf /usr/oracle/oradata/jsspdg/

SQL>alter database end backup;

SQL>alter system archive log current ;

 

7、配置tnsnames和listener

tnsnames.ora

内容为:

JSSWEB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac3)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = jssweb)
    )
  )

JSSPDG =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac3)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = jsspdg)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )
listener.ora内容如下:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /usr/oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac3)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )

 

测试配置正确与否,可以测试一下

tnsping jssweb

tnsping jsspdg

 

8、创建standby数据库jsspdg密码文件:

可以用orapwd创建

orapwd file='/usr/oracle/product/10.2.0/db_1/dbs/orapwjsspdg'  password=sys entries=5

 

9、重启primary数据库和standby数据库

 

primary数据库jssweb

 

SQL>shutdown immediate

SQL>startup pfile='/usr/oracle/product/10.2.0/db_1/dbs/initjssweb.ora' nomount;

SQL>alter database mount;

SQL>alter database open;

也可以

SQL>shutdown immediate

SQL>create spfile from pfile;

SQL>startup

 

standby数据库jsspdg

SQL>create spfile from pfile;

SQL>startup mount;

 

10、启用redo

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

disconnect from session参数是可选的,如果不写需要另起一个session,当前session会挂起。

 

11、测试

主库:

SQL>ALTER SYSTEM SWITCH LOGFILE;


SQL> SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG ;

MAX(SEQUENCE#)
--------------
            35

 

STANDBY数据库


SQL> SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG ;

MAX(SEQUENCE#)
--------------
            35

如果结果一样说明执行成功。也可以直接去归档日志目录先查看归档的文件是否生成,两个数据库中都应该有。

至此环境已经搭建好了至于switchover和failover以后补充。

 

你可能感兴趣的:(oracle,数据库,File,database,logging,archive)