oracle active data guard,Oracle Active DataGuard配置手册(一)

第一章 搭建Active DG

开始配置dg

Primary db:

1、 判断dataguard是否安装

SQL> select * from v$option where parameter = 'Oracle Data Guard';

PARAMETER

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

VALUE

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

Oracle Data Guard

TRUE

2、 修改主库处于归档模式

SQL> startup mount

SQL> alter database archivelog;

Database altered.

SQL> archive log list

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     34

Next log sequence to archive   36

Current log sequence           36

3、 将primary 数据库置为FORCE LOGGING 模式。通过下列语句:

SQL> select FORCE_LOGGING  from  v$database;

FOR

---

NO

SQL> alter database force logging;

Database altered.

4、 主库创建密码文件

同一个Dataguard中所有数据库必须拥有独立的密码文件,并且保证sys用户拥有相同密码来保证redo的传输。

$ orapwd file=orapworcl password=welcome entries=3

5、 主库配置standby redo log

SQL> startup mount

Database mounted.

SQL> alter database add standby logfile group 4

2  ('/u4/ora11/app/orcl/oradata/orcl/dg_redo1.log') size 50m;

Database altered.

SQL> alter database add standby logfile group 5

2  ('/u4/ora11/app/orcl/oradata/orcl/dg_redo2.log') size 50m;

Database altered.

6 配置监听

主库:

$ cat listener.ora

ORCL=

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.190)(PORT = 1522))

)

)

ADR_BASE_LISTENER = /u4/ora11/app/orcl

$ cat tnsnames.ora

LISTENER_ORCL =

(ADDRESS = (PROTOCOL = TCP)(HOST = redhat1.tools.com)(PORT = 1522))

ORCL =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = redhat1.tools.com)(PORT = 1522))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl.tools.com)

)

)

DG =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = redhat1.tools.com)(PORT = 1524))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = dg.tools.com)

)

)

备库:

$ cat lis*.ora

DG=

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = redhat1.tools.com)(PORT = 1524))

)

)

ADR_BASE_LISTENER = /u4/dg/app/oradg

$ cat tnsnames.ora

LISTENER_DG =

(ADDRESS = (PROTOCOL = TCP)(HOST = redhat1.tools.com)(PORT = 1524))

DG =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = redhat1.tools.com)(PORT = 1524))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = dg.tools.com)

)

)

ORCL =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = redhat1.tools.com)(PORT = 1522))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl.tools.com)

)

)

7、修改Primary 数据库客户端初始化参数文件

注:主要此处修改项较多,为了方便,我们首先创建并修改pfile,然后再通过pfile 重建spfile,你当然也可以通过alter system set 命令直接修改spfile 内容。

SQL> create pfile from spfile;

File created.

修改主库初始化参数文件,增加下列内容

*.DB_UNIQUE_NAME=orcl

*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,dg)'

*.LOG_ARCHIVE_DEST_1= 'LOCATION=/u4/ora11/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl'

*.LOG_ARCHIVE_DEST_2='SERVICE=dg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dg'

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE

*.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

#--------配置standby 角色的参数用于角色转换

*.FAL_SERVER=dg

*.FAL_CLIENT=orcl

*.STANDBY_FILE_MANAGEMENT=AUTO

*.DB_FILE_NAME_CONVERT='/u4/dg/app/oradg/oradata/dg','/u4/ora11/app/orcl/oradata/orcl '

*.LOG_FILE_NAME_CONVERT= '/u4/dg/app/oradg/oradata/dg','/u4/ora11/app/orcl/oradata/orcl '

然后将Pfile 拷贝到备库上

$ cp /u4/ora11/app/orcl/product/11.2.0/dbhome_1/dbs/initorcl.ora .

$ pwd

/u4/dg/app/oradg/product/11.2.0/dbhome_1/dbs

$ id

uid=1010(oradg) gid=110(dba) groups=110(dba)

8 在主库上创建备份库需要的控制文件

SQL> startup mount

SQL> ALTER  DATABASE  CREATE  STANDBY  CONTROLFILE  AS  '/tmp/orcl.ctl';

Database altered.

9、用修改后的init.ora启动主库,然后创建主库的spfile

SQL> create spfile from pfile;

File created.

10、复制数据文件到standby 服务器(方式多样,不详述)

注意需要复制所有数据文件,备份的STANDBY控制文件及客户端初始化参数文件(这里最好把密码文件也复制到备库,否则后面有可能会报错,具体错误后面会体现)

在standby库操作:

$ cp -r /u4/ora11/app/orcl/oradata/orcl .

$ pwd

/u4/dg/app/oradg/oradata

$ ls

dg_bak  orcl

$ mv orcl dg

$ cp /tmp/orcl.ctl /u4/dg/app/oradg/oradata/dg

$ cd /u4/dg/app/oradg/oradata/dg

$ ls

control01.ctl  dg_redo2.log  redo01.log  redo03.log    system01.dbf  undotbs01.dbf

dg_redo1.log   orcl.ctl      redo02.log  sysaux01.dbf  temp01.dbf    users01.dbf

复制主库参数文件:

$ cp /u4/ora11/app/orcl/product/11.2.0/dbhome_1/dbs/initorcl.ora .

$ pwd

/u4/dg/app/oradg/product/11.2.0/dbhome_1/dbs

Standby db配置

1、   创建控制文件

$ mv orcl.ctl control01.ctl

$ cp control01.ctl control02.ctl

$ pwd

/u4/dg/app/oradg/oradata/dg

2、配置listener,tnsname

同前面

3、设置备库参数文件

$ cat initdg.ora

dg.__db_cache_size=603979776

dg.__java_pool_size=16777216

dg.__large_pool_size=16777216

dg.__oracle_base='/u4/dg/app/oradg'#ORACLE_BASE set from environment

dg.__pga_aggregate_target=872415232

dg.__sga_target=1308622848

dg.__shared_io_pool_size=0

dg.__shared_pool_size=654311424

dg.__streams_pool_size=0

*.audit_file_dest='/u4/dg/app/oradg/admin/dg/adump'

*.audit_trail='none'

*.compatible='11.2.0.0.0'

*.control_files='/u4/dg/app/oradg/oradata/dg/control01.ctl','/u4/dg/app/oradg/oradata/dg/control02.ctl'

*.db_block_size=8192

*.db_domain='tools.com'

*.db_name='dg'  ---这里其实应该设置为orcl,否则后面会报错,具体看后面文档

*.db_recovery_file_dest='/u4/dg/app/oradg/flash_recovery_area'

*.db_recovery_file_dest_size=4070572032

*.diagnostic_dest='/u4/dg/app/oradg'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=dgXDB)'

*.local_listener='LISTENER_DG'

*.memory_target=2177892352

*.open_cursors=300

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.undo_tablespace='UNDOTBS1'

*.DB_UNIQUE_NAME=dg

*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,dg)'

*.LOG_ARCHIVE_DEST_1= 'LOCATION=/u4/dg/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dg'

*.LOG_ARCHIVE_DEST_2= 'SERVICE=orcl  LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE

*.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

#--------配置standby 角色的参数用于角色转换

*.FAL_SERVER=orcl

*.FAL_CLIENT=dg

*.STANDBY_FILE_MANAGEMENT=AUTO

*.DB_FILE_NAME_CONVERT ='/u4/ora11/app/orcl/oradata/orcl','/u4/dg/app/oradg/oradata/dg'

*.LOG_FILE_NAME_CONVERT='/u4/ora11/app/orcl/oradata/orcl','/u4/dg/app/oradg/oradata/dg'

4、创建密码文件:---这里其实最好直接复制主库密码文件,免得出错

$ orapwd file=orapwdg password=welcome entries=3

5、在备库上建立spfile

SQL> startup nomount

SQL> create spfile from pfile;

File created.

6、 尝试启动备库

SQL> startup nomount

SQL>  alter database mount standby database;

alter database mount standby database

*

ERROR at line 1:

ORA-01103: database name 'ORCL' in control file is not 'DG'

故障处理:在standby环境中db_name在主库和从库必须是一样的

SQL> show parameter db_name

NAME                                 TYPE        VALUE

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

db_name                              string      DG

SQL> show parameter db_uni

NAME                                 TYPE        VALUE

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

db_unique_name                       string      dg

SQL> alter system set db_name='orcl' scope=spfile;

System altered.

SQL> shutdown immediate

SQL> startup nomount

SQL> show parameter db_name

NAME                                 TYPE        VALUE

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

db_name                              string      orcl

SQL> alter database mount standby database;

Database altered.

SQL> show parameter db_uni

NAME                                 TYPE        VALUE

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

db_unique_name                       string      dg

SQL>

但是在open的时候报错了

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-10458: standby database requires recovery

ORA-01152: file 1 was not restored from a sufficiently old backup

ORA-01110: data file 1: '/u4/dg/app/oradg/oradata/dg/system01.dbf'

故障处理:

查看备库:

SQL>  SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS

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

TO PRIMARY

查看主库:

SQL>  SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS

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

FAILED DESTINATION

状态怎么是这个呢?

再次查看主库相关参数

SQL> show parameter log_archive_dest_2;

NAME                                 TYPE        VALUE

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

log_archive_dest_2                   string         SERVICE=dg  LGWR ASYNC VALID_F

OR=(ONLINE_LOGFILES,PRIMARY_RO

LE) DB_UNIQUE_NAME=dg

没看出有什么问题

察看主库alert.log,发现错误如下

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

Errors in file /u4/ora11/app/orcl/diag/rdbms/orcl/orcl/trace/orcl_arc1_12785.trc:

ORA-16191: Primary log shipping client not logged on standby

PING[ARC1]: Heartbeat failed to connect to standby 'dg'. Error is 16191.

Tue Dec 06 20:43:10 2011

Error 1017 received logging on to the standby

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

Check that the primary and standby are using a password file

and remote_login_passwordfile is set to SHARED or EXCLUSIVE,

and that the SYS password is same in the password files.

returning error ORA-16191

莫非是密码文件的问题?

尝试直接ftp主库的密码文件到备用库

$ mv orapwdg orapwdg.bak

$ cp  /u4/ora11/app/orcl/product/11.2.0/dbhome_1/dbs/orapworcl .

$ mv orapworcl orapwdg

然后重新启动主库和备库,发现备库居然开始应用日志了

SQL> startup nomount

SQL> alter database mount standby database;

Database altered.

SQL> alter database open read only;

Database altered.

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

Database altered.

SQL> select OPEN_MODE from v$database;

OPEN_MODE

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

READ ONLY WITH APPLY

看来就是密码文件的问题啊,哈哈

日志是传过去了,但是是否已经apply到备库了呢?

在备库:

SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

SEQUENCE# APPLIED

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

44 YES

45 YES

46 YES

47 YES

48 YES

49 YES

50 YES

51 YES

52 YES

53 YES

下面检测下在主库建立的表是否应用到了备库

SQL> select * from test;

no rows selected

发现表已经有了

下面尝试插入数据

在主库:

SQL> insert into test values(1);

1 row created.

SQL> commit;

Commit complete.

SQL> alter system switch logfile;

System altered.

SQL> !id

uid=1008(ora11) gid=110(dba) groups=110(dba)

SQL>

到备库查询:

SQL> select * from test;

TEL

----------

1

SQL> !id

uid=1010(oradg) gid=110(dba) groups=110(dba)

SQL>

发现已经有了,做到了read only并且可以应用日志!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值