ORACLE10g R2单实例 FS→单实例FS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE10g R2单实例 FS→单实例FS相关的知识,希望对你有一定的参考价值。

ORACLE10g R2【单实例FS→单实例FS】

本演示案例所用环境:

 

primary

standby

OS Hostname

pry

std

OS Version

RHEL5.8

RHEL5.8

DB Version

10.2.0.5

10.2.0.5

db_name

stephen

stephen

db_unique_name

stephen

standby

service_names

stephen

standby

instance_name

stephen

standby

Primary database configure

1.启用primary force logging

SQL> select force_logging from v$database;

SQL> alter database force logging;

2.配置redo传输认证

(1) tnsnames.ora

STEPHEN =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = pry)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = stephen)

    )

  )

 

STANDBY =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = std)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = standby)

    )

  )

 

(2)tnsping命令解析网络服务名,命令须返回OK.

此时,standby端未配置监听,无法解析,可以standby配置后再测试。

$ tnsping standby

 

(3) 密码文件

若无密码文件,则创建密码文件。格式:orapw<ORACLE_SID>

cd $ORACLE_HOME/dbs

orapwd file=orapwstephen password=oracle force=y

3.添加standby logfiles

添加standby logfile 的要求:

(1) 确保主和备数据库上的日志文件大小是相同的

(2) 确定备库重做日志文件组的适当数目

Standby logfile数 = (每个线程的logfile数+1)* 线程数

(3) 检查create database时指定的MAXLOGFILES和MAXLOGMEMBERS参数,可以通过trace controlfile出来查看

(4) RAC环境创建standby logfile,指定thread#创建

每个thread的standby logfile数 = 每个thread的logfile数 + 1

 

检查当前环境的logfile:

set lines 200 pages 300

col member for a60

select a.thread#,a.group#,b.member,b.type,a.bytes/1024/1024 MB from v$log a,v$logfile b where a.group#=b.group#

union all

select a.thread#,a.group#,b.member,b.type,a.bytes/1024/1024 MB from v$standby_log a,v$logfile b where a.group#=b.group#;

 

根据查询的logfile 信息上文添加standby logfile的要求,添加合理的standby logfile,然后用上面的sql再次查看当前环境的logfile:

SQL> alter database add standby logfile

     group 4 ‘/u01/oradata/stephen/redo04.log‘ size 50M,

     group 5 ‘/u01/oradata/stephen/redo05.log‘ size 50M,

     group 6 ‘/u01/oradata/stephen/redo06.log‘ size 50M,

     group 7 ‘/u01/oradata/stephen/redo07.log‘ size 50M;

4.修改primary参数文件

备份spfile:

create pfile=‘/tmp/pfile.bak‘ from spfile;

 

修改以下参数,其中stephen,standby分别为primary,standby的db_unqiue_name/TNS-Alias,详见参数详解部分:

alter system set log_archive_config=‘dg_config=(stephen,standby)‘;

alter system set log_archive_dest_1=‘location=/u01/arch valid_for=(all_logfiles,all_roles) db_unique_name=stephen‘;

alter system set log_archive_dest_2=‘service=standby lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=standby‘;

alter system set log_archive_max_processes=30; #根据需求调整个数

 

 

 

确认以下参数默认值,如不为以下参数值,则修改:

alter system set remote_login_passwordfile=exclusive scope=spfile; #exclusive/shared

alter system set log_archive_dest_state_1=enable;

alter system set log_archive_dest_state_2=enable;

 

log_archive_format参数控制归档文件名称格式,默认值以.dbf结尾,为了与datafile区分,建议修改为.arc结尾:

alter system set log_archive_format=‘%t_%s_%r.arc‘ scope=spfile;

 

当primary切换为standby角色后,需要增加修改以下参数,建议配置:

alter system set fal_server=standby;

alter system set fal_client=stephen;

alter system set standby_file_management=auto;

 

# primary和standby的datafile和logfile存储路径不一样时,设定以下参数:

alter system set db_file_name_convert=‘/oradata/standby‘,‘/u01/oradata/stephen‘ scope=spfile;

alter system set log_file_name_convert=‘/oradata/standby‘,‘/u01/oradata/stephen‘ scope=spfile;

 

注:以上参数,指定spfile修改的,实例重启后生效。

5.打开归档模式

首先确认当前数据库是否是归档模式,如果不是,则打开归档模式。

archive log list;

shutdown immediate;

startup mount;

alter database archivelog;

archive log list;

alter database open;

6.备份primary database

可以使用之前的备份,但需要确保备份以来的归档没有丢失。

rman target / <<EOF

run{allocate channel c1 type disk;

allocate channel c2 type disk;

backup full database format ‘/backup/full_%U.bak‘ plus archivelog;

sql ‘alter system switch logfile‘;

backup current controlfile for standby format ‘/backup/c_%U.bak‘;

release channel c1;

release channel c2;

}

EOF

 

 

 

 

Standby database configure

1.配置环境变量

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/10.2/db_1

export ORACLE_SID=standby

export PATH=$ORACLE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib #不同平台变量名不一样

2.配置redo传输认证

(1) listener.ora

配置静态监听:

LISTENER =

  (ADDRESS_LIST=

    (ADDRESS=(PROTOCOL=tcp)(HOST=std)(PORT=1521))

  )   

 

SID_LIST_LISTENER=

  (SID_LIST=

    (SID_DESC=

      (GLOBAL_DBNAME=standby)

      (SID_NAME=standby)           

      (ORACLE_HOME=/u01/app/oracle/product/10.2/db_1)

      )

    )

 

启用监听:

lsnrctl start

lsnrctl status

 

(2) tnsnames.ora

STEPHEN =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = pry)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = stephen)

    )

  )

 

STANDBY =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = std)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = standby)

    )

  )

 

(3) tnsping命令解析网络服务名,命令须返回OK.

$ tnsping stephen

...

OK (0 msec)

 

(4) 密码文件

使用主库的密码文件:

scp pry:$ORACLE_HOME/dbs/orapwstephen $ORACLE_HOME/dbs/orapwstandby

3.创建相关目录

mkdir -p $ORACLE_BASE/admin/standby/{adump,bdump,cdump,dpdump,pfile,udump,hdump}

mkdir -p /oradata/{standby,arch}

4.参数文件

用primary的pfile加以修改,以保证某些参数与primary保持一致,注意主备库内存的大小适当的调整内存相关参数。

scp pry:/tmp/pfile.bak $ORACLE_HOME/dbs/initstandby.ora

 

修改pfile为需要的standby pfile,并创建spfile.特别注意以下事例的参数设定:

*.audit_file_dest=‘/u01/app/oracle/admin/standby/adump‘

*.background_dump_dest=‘/u01/app/oracle/admin/standby/bdump‘

*.core_dump_dest=‘/u01/app/oracle/admin/standby/cdump‘

*.user_dump_dest=‘/u01/app/oracle/admin/standby/udump‘

*.control_files=‘/oradata/standby/control01.ctl‘

*.log_archive_format=‘%t_%s_%r.arc‘

*.log_archive_config=‘dg_config=(standby,stephen)‘

*.log_a rchive_dest_1=‘location=/oradata/arch valid_for=(all_logfiles,all_roles) db_unique_name=standby‘

*.log_a rchive_dest_2=‘service=stephen lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=stephen‘

*.log_archive_dest_state_1=‘enable‘

*.log_archive_dest_state_2=‘enable‘

*.log_archive_max_processes=30  #根据需求调整个数

*.db_name=‘stephen‘

*.db_unique_name=‘standby‘

*.instance_name=‘standby‘

*.service_names=‘standby‘

*.fal_server=‘stephen‘

*.fal_client=‘standby‘

*.standby_file_management=auto

*.remote_login_passwordfile=‘EXCLUSIVE‘ #exclusive/shared

 

#主、备库日志文件和数据文件存放路径不一致,设定以下参数:

*.db_file_name_convert=‘/u01/oradata/stephen‘,‘/oradata/standby‘

*.log_file_name_convert=‘/u01/oradata/stephen‘,‘/oradata/standby‘

 

创建spfile:

create spfile from pfile;

5.恢复standby controlfile

SQL> startup nomount;

RMAN> restore standby controlfile from ‘/backup/c_05qlbira_1_1.bak‘;

6.恢复数据文件

(1)standby 与primary数据文件存放路径一致:

RMAN> sql ‘alter database mount standby database‘;

run

{allocate channel c1 type disk;

allocate channel c2 type disk;

resotore database;

recover database;

release channel c1;

release channel c2;

}

 

(2) standby 与primary数据文件存放路径不一致:

查询primary database的数据文件信息:

set lines 300 pages 300

col name for a60

col member for a60

select file#,name from v$datafile

union all

select file#,name from v$tempfile;

 

启动standby到mount阶段,恢复数据文件:

RMAN> sql ‘alter database mount standby database‘;

run

{set newname for datafile 1 to ‘/oradata/standby/system01.dbf‘;

set newname for datafile 2 to ‘/oradata/standby/sysaux01.dbf‘;

set newname for datafile 3 to ‘/oradata/standby/undotbs1.dbf‘;

set newname for datafile 4 to ‘/oradata/standby/user01.dbf‘;

set newname for tempfile 1 to ‘/oradata/standby/temp01.dbf‘;

restore database;

switch datafile all;

switch tempfile all;

recover database;

}

 

查看standby database log file:

set lines 200 pages 300

col member for a60

select a.thread#,a.group#,b.member,b.type,a.bytes/1024/1024 MB from v$log a,v$logfile b where a.group#=b.group#

union all

select a.thread#,a.group#,b.member,b.type,a.bytes/1024/1024 MB from v$standby_log a,v$logfile b where a.group#=b.group#;

 

7.应用日志

应用archive log:

recover managed standby database disconnect;

 

应用redo logfile:

recover managed standby database using current logfile disconnect;

 

取消应用日志:

recover managed standby database cancel;

8.观察日志传输

跟踪primary,standby database的alert log,观察是否有错误发生,也可以看到应用日志的相关信息。

 

确认standby是否应用日志:

--primary端多切几次日志,观察alert log信息。

alter system switch logfile;

alter system switch logfile;

 

--观察主备库日志序列号

archive log list;

 

--primary端查询v$archived_log视图,确认日志是否被应用:

set lines 300 pages 300

col name for a20

select name,dest_id,thread#,sequence#,standby_dest,applied,registrar,completion_time from v$archived_log

where standby_dest=‘YES‘

order by thread#,sequence#;

 

--primary端查询primary,standby的最大日志序列号是否一致:

select ‘Primary :‘ "DB Role",thread#,max(sequence#)

from v$archived_log

where standby_dest=‘NO‘

group by thread#

union

select ‘Standby :‘ "DB Role",thread#,max(sequence#)

from v$archived_log

where standby_dest=‘YES‘ and applied=‘YES‘

group by thread#

order by thread#;

 

以上是关于ORACLE10g R2单实例 FS→单实例FS的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE11g R2单实例 FS→单实例FS

ORACLE11g R2RAC+ASM→单实例FS

通过RMAN将Oracle 11g R2 RAC数据迁移到单实例数据库

Oracle 11g R2 RAC数据库备份通过RMAN恢复到单实例数据库实现

Oracle 11g单实例RMAN恢复到Oracle 11g RAC

Oracle 11g R2 rac通过rman 恢复到单实例数据库