复制数据库--读书笔记

前段时间给一客户通过RMAN复制数据库搭建了data guard,这是《精通ORACLE.10G备份与恢复》一书中复制数据库一章的读书笔记,巩固一下基础知识,笔记中的例子来自于实验,与书中个别地方不一样,记录下来以作参考。[@more@]

管理复制数据库

17.1、复制数据库综述

复制数据库是主数据库(产品数据库)的副本数据库或克隆数据库,既可以包含主数据库的全部数据文件,也可只包含主数据库的部分数据文件。

1、复制数据库的作用

在产品数据库运行的同时,复制数据库可以独立运行。具有如下作用:

为应用开发小组提供用于编程和测试的模拟数据库;

为经验不足的DBA提供锻炼数据库管理技能的模拟数据库;

DBA提供用于测试和验证备份与恢复的模拟数据库。

2、复制数据库的文件

当在其他主机上建立复制数据库时,要求该主机必须与主数据库所在地的机器具有相同的OS平台。当主数据库和复制数据库在同一台主机上时,主数据库和复制数据库必须使用不同的目录结构。与产品数据库一样,复制数据库也包括数据文件、重做日志和控制文件三种物理文件。

A、数据文件。在建立复制数据库时,复制数据库必须包含主数据库SYSTEM表空间和UNDO表空间的数据文件。以用户管理方式建立复制数据库,则需要将主数据库的数据文件备份拷贝到复制数据库的相应目录,并在建立控制文件时通过DATAFILE选项指定数据文件;如果使用RMAN方式,则可以使用SET NEWNAME命令设置复制数据库的相应数据文件。

B、控制文件。复制数据库的控制文件通过配置初始化参数CONTROL_FILES来指定其位置和名称的,每个复制数据库至少包含一个控制文件。以用户管理方式建立时,须使用CREATE CONTROLFILE命令建立复制数据库的控制文件;使用RMAN时,RMAN会自动根据初始化参数CONTROL_FILES在相应位置建立控制文件。

C、重做日志。复制库的重做日志组和日志成员个数可以与主数据库不同。以用户方式建立复制库时,那么日志组和日志成员在建立控制文件时使用LOGFILE选项指定,且当执行SQL语句ALTER DATABASE OPEN RESETLOGS打开复制数据库时会自动建立日志成员;用RMAN时建立复制库,则在执行DUPLICATE命令时通过LOGFILE选项指定日志成员。

17.2、用户管理的复制数据库

使用用户管理方式建立复制库,必须备份建立复制数据库所需的所有数据文件。SYSTEMUNDO表空间的数据文件是必须备份的。必须使用CREATE CONTROLFILE命令建立复制库的控制文件。为了简化控制文件的建立,应该将主数据库的控制文件备份到跟踪文件中。下面以备份xtdb数据库的所有数据文件,备份控制文件到跟踪文件为例子,说明备份主数据库的方法。

sqlplus / as sysdba

SQL> select name from v$datafile;

NAME

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

D:XTDBSYSTEM1.DBF

D:XTDBUNDO1.DBF

D:XTDBSYSAUX1.DBF

D:XTDBEXAMPLE001.DBF

D:XTDBUSERS01.DBF

SQL> alter database begin backup;

SQL> host copy d:xtdb*.dbf d:backup*.dbf

d:xtdbEXAMPLE001.DBF

d:xtdbSYSAUX1.DBF

d:xtdbSYSTEM1.DBF

d:xtdbUNDO1.DBF

d:xtdbUSERS01.DBF

SQL> alter database end backup;

SQL> alter system archive log current;

SQL> alter database backup controlfile to trace resetlogs;

A、在同一主机上建立用户管理的复制数据库

如果将复制库与主数据库放在同一主机上,则必须将复制库的相关文件放到不同位置,并且必须修改初始化参数db_name*_destlog_archive_dest_nbackground_dump_destuser_dump_dest等)。下面以建立实例名和数据库名都是dupdb的复制库为例,说明在同一主机上建立用户管理的复制库的方法,如下:

1)、建立存放复制数据库各种相关文件的OS目录。为了将复制数据库的各种文件放到与主数据库相关文件不同的OS目录中,必须建立相应的OS目录。假设将复制库的数据文件、控制文件和重做日志放到d:dupdb目录中,将alert文件和后台进程跟踪文件放在d:dupdbbdump目录中,将用户进程跟踪文件放在d:dupdbudump目录中,将归档日志放在d:dupdbarchive目录。

mkdir d:dupdb

mkdir d:dupdbbdump

mkdir d:dupdbudump

mkdir d:dupdbarchive

D:>mkdir d:dupdb

D:>mkdir d:dupdbbdump

D:>mkdir d:dupdbudump

D:>mkdir d:dupdbarchive

2)、建立例程服务。在UNIX/Linux平台上建立复制数据库时,需要使用ORAPWD工具为实例建立口令文件;在Windows平台上建立复制库时,必须为复制库建立实例服务,使用ORADIM可以建立实例服务。

D:>oradim -new -sid dupdb -intpwd oracle

3)、建立参数文件。

连接到主数据库建立文本参数文件。

conn / as sysdba

create pfile from spfile;

编辑文本参数文件initdupdb.ora。因为复制库和主库在同一个主机上,所以必须修改db_nameinstance_nameservice_namescontrol_files*_dest等初始化参数。如下:

db_name=dupdb

instance_name=dupdb

service_names=dupdb

control_files=d:dupdbcontrol01.ctl

log_archive_dest_1='location=d:dupdbarchive'

user_dump_dest=d:dupdbudump

background_dump_dest=d:dupdbbdump

建立服务器参数文件

create spfile='%oracle_home%databasespfileDUPDB.ora' from pfile='%oracle_home%databaseinitDUPDB.ora'

4)复制主库的数据文件备份到复制库所在目录。当建立复制库时,其数据文件必须使用主库的数据文件备份。当复制数据文件备份时,SYSTEMUNDO的数据文件是必须的。

SQL> host copy d:backup*.dbf d:dupdb

d:backupEXAMPLE001.dbf

d:backupSYSAUX1.dbf

d:backupSYSTEM1.dbf

d:backupUNDO1.dbf

d:backupUSERS01.dbf

5)、启动实例,并建立控制文件。如果没有为复制库配置监听程序和网络服务名,则当启动实例时必须设置环境变量ORACLE_SID。在启动实例后,可为复制库建立控制文件。可以手工编写CREATE CONTROLFILE命令建立控制文件,但建议修改主库跟踪文件内容,依据修改后的跟踪文件建立控制文件。

set oracle_sid=dupdb

sqlplus / as sysdba

startup nomount

CREATE CONTROLFILE SET DATABASE "DUPDB" RESETLOGS ARCHIVELOG

MAXLOGFILES 32

MAXLOGMEMBERS 2

MAXDATAFILES 32

MAXINSTANCES 16

MAXLOGHISTORY 1752

LOGFILE

GROUP 1 'D:DUPDBDUPDB1A.LOG' SIZE 4M,

GROUP 2 'D:DUPDBDUPDB2A.LOG' SIZE 4M

DATAFILE

'D:DUPDBSYSTEM1.DBF',

'D:DUPDBUNDO1.DBF',

'D:DUPDBSYSAUX1.DBF',

'D:DUPDBEXAMPLE001.DBF',

'D:DUPDBUSERS01.DBF'

CHARACTER SET ZHS16GBK;

6)、恢复复制数据库。因为OPEN状态下备份了主库的数据文件,所以这些数据文件实际处于不同步状态。因此在建立了控制文件之后,还必须在复制数据库上执行恢复操作,以应用主库的归档日志,并且在应用了最后一个归档日志之后取消恢复。因为复制库和主库使用了不同的归档位置,为了应用主库的归档日志,应使用set logsource指定要使用的归档目录。当恢复制库时必须指定USING BACKUP CONTROLFILE UNTIL CANCEL选项。

SQL>set logsource 'd:xtdbarchive'

SQL>recover database using backup controlfile until cancel;

注意,在应用归档日志过程中,由于日志命名方式的原因,可能导致Oracle找不到相关日志,可以通过手动应用日志的方式进行恢复,即通过手动指定具体的归档日志文件。

7)、打开复制库。在恢复了复制库之后,用RESETLOGS打开复制库。在用RESETLOGS打开复制数据库时,会自动建立复制库的所有重做日志。但是没有创建临时表空间,需要自行创建。

SQL>alter database open resetlogs;

B、在不同主机上建立用户管理的复制数据库

如果要将复制库放在与主库不同的主机上,则复制库既可以使用与主库相同的目录结构,也可以使用不同的目录结构;复制库的初始化参数既可以与主库完全相同,也可以与主库不同。具体步骤如下:

1)、建立存放复制库各种相关文件的OS目录。

2)、建立实例服务。

3)、建立参数文件。

4)、将主数据库的数据文件备份、参数文件和归档日志复制到复制库所在的主机。

5)、启动实例,建立控制文件。

6)、恢复复制数据库。

SQL>set logsource 'd:dupdbarchive'

以上目录为归档日志拷贝的目录。

SQL>recover database using backup controlfile until cancel;

7)、打开复制库。

alter database open resetlogs;

17..3RMAN管理的复制数据库

当使用RMAN方式建立复制库时,必须先使用RMAN备份主库的所有数据文件、控制文件和归档日志。例如:

rman target /

backup database include current controlfile plus archivelog format='d:backup%d_%s.bak';

RMAN中,建立复制库使用duplicate命令。

缺省情况下,当建立复制库时,会包含主库中的所有数据文件。如果不希望复制库中包含只读表空间的数据文件,则在执行duplicate时指定skip readonly选项;如果要跳过特定表空间,则在执行duplicate时指定skip tablespace选项;如果在不同主机上建立复制库,且与主库采用完全相同的目录结构和文件名,则在执行duplicate时指定nofilenamecheck选项;如果要将复制库恢复到过去的时间点,则可以使用set untilduplicate..until命令。当使用RMAN方式建立复制库时,应注意:

skip tablespace时不能指定SYSTEMUNDO表空间。

当在不同主机上建立复制库时,必须将RMAN备份集文件复制到目标主机的相同目录下。

A、在同一主机上建立RMAN管理的复制数据库

具体步骤如下:

1)、建立存放复制数据库各种相关文件的OS目录。

D:>mkdir d:dupdb1

D:>mkdir d:dupdb1bdump

D:>mkdir d:dupdb1udump

D:>mkdir d:dupdb1archive

2)、建立复制库实例服务

D:>oradim -new -sid dupdb1 -intpwd oracle

3)、建立复制库实例的参数文件

4)、启动实例。

set oracle_sid=dupdb1

sqlpplus / as sysdba

startup nomount

5)、建立复制库。在启动实例后,就可以运行RMAN建立复制数据库了。注意,当建立复制数据库时,必须同时连接到主库和复制库实例。当连接主库时,指定TARGET选项;当连接到复制库实例时,指定AUXILIARY选项。为了复制库的数据文件使用不同的目录,需要使用SET NEWNAME命令指定数据文件的新位置;为了指定重做日志的新位置和名称,需要在DUPLICATE命令后指定LOGFILE选项。举例如下:

set oracle_sid=dupdb1

rman target sys/oracle@xtdb auxiliary sys/oracle

RMAN> run {

set newname for datafile 1 to 'D:dupdb1SYSTEM1.DBF';

set newname for datafile 2 to 'D:dupdb1UNDO1.DBF';

set newname for datafile 3 to 'D:dupdb1SYSAUX1.DBF';

set newname for datafile 4 to 'D:dupdb1EXAMPLE001.DBF';

set newname for datafile 5 to 'D:dupdb1USERS01.DBF';

set newname for tempfile 1 to 'd:dupdb1temp01.dbf';

duplicate target database to dupdb1 logfile

'd:dupdb1dupdb11A.log' size 4m,

'd:dupdb1dupdb12A.log' size 4m;

}

当执行以上命令之后,会依次建立复制库的数据文件、控制文件、重做日志和临时文件。在复制数据库建立完成之后,RMAN会自动打开复制库。

B、在不同主机上建立RMAN管理的复制库

如果要将复制库放在与主库不同的主机上,则复制库既可以使用与主库相同的目录结构,也可以使用不同的目录结构;复制库的初始化参数既可以与主库完全相同,也可以与主库不同。具体步骤如下:

1)、建立存放复制数据库各种相关文件的OS目录。

2)、建立实例服务。

3)、建立参数文件。

4)、将主数据库的备份集文件、参数文件复制到复制库所在的主机。当复制备份集文件到复制库所在主机时,应将备份集文件放到与主数据库备份集相同的OS目录下;参数文件则放入相应的位置,并将名字改好。

5)、启动实例。

6)、建立复制库。在启动了复制数据库的实例之后,就运行RMAN建立辅助库了。因复制库建立在远程主机上,所以必须在远程主机上配置监听程序,在主库上配置网络服务名。当连接主库时,指定target选项,当连接复制库时,指定auxiliary选项。例如:

rman target sys/oracle@xtdb auxiliary sys/oracle@dupdb1

RMAN> run {

set newname for datafile 1 to 'D:dupdb1SYSTEM1.DBF';

set newname for datafile 2 to 'D:dupdb1UNDO1.DBF';

set newname for datafile 3 to 'D:dupdb1SYSAUX1.DBF';

set newname for datafile 4 to 'D:dupdb1EXAMPLE001.DBF';

set newname for datafile 5 to 'D:dupdb1USERS01.DBF';

set newname for tempfile 1 to 'd:dupdb1temp01.dbf';

duplicate target database to dupdb1 logfile

'd:dupdb1dupdb11A.log' size 4m,

'd:dupdb1dupdb12A.log' size 4m;

}

当执行以上命令之后,会依次建立复制库的数据文件、控制文件、重做日志和临时文件。在复制数据库建立完成之后,RMAN会自动打开复制库。

17.4、小结

在同一主机和不同主机上使用用户管理方式建立复制库的方法。注意,在建立复制库之前,必须备份主库,且复制库必须包含主库的SYSTEMUNDO表空间的数据文件备份。

在同一主机和不同主机上使用RMAN建立复制数据库的方法。注意,当在不同主机上建立复制库时,必须将主库的RMAN备份文件复制到目标主机的相同目录下。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9523925/viewspace-1032412/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9523925/viewspace-1032412/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值