管理复制数据库
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、用户管理的复制数据库
使用用户管理方式建立复制库,必须备份建立复制数据库所需的所有数据文件。SYSTEM和UNDO表空间的数据文件是必须备份的。必须使用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和*_dest(log_archive_dest_n、background_dump_dest、user_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_name、instance_name、service_names、control_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)复制主库的数据文件备份到复制库所在目录。当建立复制库时,其数据文件必须使用主库的数据文件备份。当复制数据文件备份时,SYSTEM和UNDO的数据文件是必须的。
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..3、RMAN管理的复制数据库
当使用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 until或duplicate..until命令。当使用RMAN方式建立复制库时,应注意:
skip tablespace时不能指定SYSTEM和UNDO表空间。
当在不同主机上建立复制库时,必须将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、小结
在同一主机和不同主机上使用用户管理方式建立复制库的方法。注意,在建立复制库之前,必须备份主库,且复制库必须包含主库的SYSTEM和UNDO表空间的数据文件备份。
在同一主机和不同主机上使用RMAN建立复制数据库的方法。注意,当在不同主机上建立复制库时,必须将主库的RMAN备份文件复制到目标主机的相同目录下。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9523925/viewspace-1032412/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9523925/viewspace-1032412/