备份恢复12——复制数据库与备用数据库

  1. 云栖社区>
  2. 博客>
  3. 正文

备份恢复12——复制数据库与备用数据库

长烟慢慢 2012-05-24 09:00:11 浏览540
展开阅读全文

1、建立复制数据库:

分为用户管理的方式建立复制数据库和rman建立复制数据库。

对于用户管理的复制数据库来说,还可以分为本机建立复制数据库和不在本机建立复制数据库,但是这两个方式区别不大,建立 数据库的方法步骤与建库的方法基本类似。不写了,自己参照书  P257 页做吧。

重点写写rman管理的方式建立复制数据库吧,这个才是重点。当使用rman管理的方式建立复制数据库时,必须首先使用rman备份主数据库的多有数据文件、控制文件和归档日志。示例如下:C:\> rman target sys/liu1232 mynewdb nocatalog;

RMAN >backup database include current controlfile plus archivelog format='g:\backup\%d_%s.bak';

在rman环境中,建立复制数据库是使用duplicate命令来完成的。默认情况下,当建立复制数据库时,会包含主数据库的所有数据文件。如果不希望复制数据库包含只读表空间的数据文件,则在执行duplicate命令时可以带有skip readonly选项;如果要跳过特定的表空间,则执行duplicate命令时可以大有skip  tablespace选项;如果在不同主机上建立复制数据库,并且与主数据库采用完全相同的目录结构和文件名,则在执行duplicate命令时必须制定nofilenamecheck选项;如果要将复制数据库恢复到过去的时间点,则可以使用set until命令完成duplicate 。。until命令。当使用rman管理的方式建立复制数据库时,需呀注意以下两点:

* skip tablespace选项不能指定system表空间和undo表空间。

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

在同一主机上建立rman管理的复制数据库:

下面以建立实例名和数据库名都是dupdb的复制数据库为例,说明建立的步骤:

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

> mkdir /tmp/oradata/dupdb

> mkdir /tmp/oradata/dupdb/bdump

> mkdir /tmp/oradata/dupdb/udump

> mkdir /tmp/oradata/dupdb/archive

2)建立复制数据库实例名:当在unix系平台上建立复制数据库时时,需要使用ORAPWD工具为实例建立口令文件;当在windows平台上建立复制数据库时,必须为复制数据库建立例程服务,使用oradim工具可以建立例程服务。下面以为复制数据库dupdb建立例程服务为例,说明建立例程服务的方法。实例如下:

c:\> oradim  -new  -sid dupdb  -intpwd  oracle

3)建立复制数据库实例的参数文件。可以在主库上使用create pfile命令为复制数据库建立文本参数文件,然后手工编辑相应的初始化参数,最后使用create spfile命令为复制数据库建立服务器参数文件。

SQL> create pfile = '$ORACLE_HOME/dbs/initdupdb.ora'  from spfile; ;

编辑文本参数initdupdb.ora。修改db_name  instance_name  service_names control_files *_dest 等参数。

建立服务器参数文件。SQL>create spfile = '$ORACLE_HOME/spfiledupdb.ora'  from pfile = '$ORACLE_HOME/inttdupdb.ora';

4)启动实例如果没有为复制数据库配置监听程序和网络服务名,那么当启动实例时,必须设置环境变量oracle_sid. 示例如下:

> set oracle_sid = dupdb

> sqlplus / as sysdba

SQL> startup nomount;

5)建立复制数据库。在启动的例程之后,就可以运行rman建立复制数据库了。注意,当建立复制数据库时,必须同时连接到主数据库和复制数据库实例。当连接主数据库时指定target选项;当连接到复制数据库时,指定auxiliary选项。为了使得复制数据库的数据文件使用不同的目录,需呀使用set newname命令指定数据文件的新位置;为了指定重做日志的新位置和名称,需要在duplicate命令后指定logfile选项。示例如下:


用rman在不同主机上建立复制数据库的方法与此基本类似,不赘述了。自己参考吧。

2、建立物理备用数据库:

1.data guard综述

dg由一个产品数据库和一个或多个备用数据库组成,并且这些数据库可以分布到不同地区,他们之间的互联是通过oracle net来完成的。

物理备用数据库简介:他具有与主数据库完全相同的物理副本,通过应用主数据库的重做数据,物理备用数据库与主数据库保持同步。当主数据库发生事务变化时,oracle会将重做数据写入到重做日志和归档日志。再将归档日志传送到物理备用数据库的所有主机之后,物理备用数据库可以直接应用这些事务变化,从而保持与主数据库的同步性。

逻辑备用数据库简介:注意物理备用数据库与主库具有完全相同的物理结构,而逻辑备用数据库的物理结构域主库的可以不同,当主数据库发生事务变化时,oracle会将重做数据写入到重做日志和归档日志。再将归档日志传送到逻辑备用数据库的所有主机之后,oracle会将重做数据转化为相应的sql语句,最终在逻辑备用数据库上执行sql语句。从而维持逻辑备用数据库与主库的同步性。

用户管理的方式建立物理备用数据库不说了。直接用rman建立吧。首先必须使用 rman备份主数据库的所有数据文件,并且必须建立备用 控制文件备份。

示例:

RMAN>  backup database plus archivelog format = '/home/oracle/rman/%d_%s.bak';

RMAN> backup current controlfile for standby format='/home/oracle/rman/%d_%s.bak';


如果将备库与主库放在同一个主机上,则必须为备库专门建立os目录,并且必须配置初始化参数db_file_name_convert 和 log_file_name_convbert 示例将会在同一主机上使用rman备份建立物理备用数据库standby3,。下面看具体步骤:

1)建立存放备用数据库的相关文件的os目录:

> mkdir  /home/oracle/rman

> mkdir  /home/oracle/rman/bdump

> mkdir  /home/oracle/rman/udump

> mkdir  /home/oracle/rman/archive


2)建立例程服务:

当在unix系平台上建立复制数据库时时,需要使用ORAPWD工具为实例建立口令文件;当在windows平台上建立复制数据库时,必须为复制数据库建立例程服务,使用oradim工具可以建立例程服务。下面以为复制数据库dupdb建立例程服务为例,说明建立例程服务的方法。实例如下:

orapwd file=$ORACLE_HOME/dbs/orapwmydb password=admin entries=5 force=y

c:\> oradim  -new  -sid dupdb  -intpwd  oracle

3)配置监听程序和网络服务名。主库和备库交互是通过oracle net来完成的,必须进行网络配置,为了使得监听程序可以监听主库demo和备库standby3,需要配置并重新启动监听程序;为了使得主库和备库可以交互访问,应该fenb 为主库和备库配置网络服务名,在下面的示例中,demo表示主库demo的网络服务名,standby3表示备用数据库standby3的网络服务名。

4)准备主数据库参数文件。当使用备用数据库时,需要将主数据库归档日志传送到备用数据库相应的目录。为了使得主库和备库可以正常运转,必须合理配置主库的初始化参数。因为某些初始化参数不能使用alter system命令直接修改,所以当该版主库的初始化参数时,应该首先使用create pfile命令建立文本参数文件,然后手工并将文件参数文件,最后使用create spfile重建服务器参数文件。具体步骤如下:

连接到主库,家里pfile:SQL> create pfile from spfile;

编辑省的pfile文件initdemo.ora,手工编辑相关初始化参数,


3、逻辑备用数据库:

如果,使用物理备用数据库,那么物理备用数据库会应用主数据库的所有重做数据;但如果使用逻辑备用数据库,那么逻辑备用数据库只会维护主数据库的部分方案,并且对于方案对象和数据类型有一些限制。

逻辑备用数据库可以用于降低主库的工作负载,如果主库的负载量很大,那么可以将数据统计,数据报表和执行查询等操作转移到逻辑备用数据库来完成,从而节省数据库的cpu和io开销。

确定 逻辑备用数据库所支持的数据库方案。当使用逻辑备用数据库时,逻辑备用数据库只会维护部分数据库方案。通过在主数据库上查询数据字典视图DBA_LOGSTDBY_SKIP,可以显示逻辑备用数据库要跳过的数据库方案。下面以显示逻辑备用数据库所支持的所有数据库方案,说明使用该数据字典视图的方法。示例如下:

SQL> select  username from dba_users where username not in (select owner from dba_logstdby_skip);



2、建立逻辑备用数据库

为了建立逻辑备用数据库,必须首先建立物理备用数据库。在建立了物理备用数据库之后,还应该应用所有的归档日志,以维持物理备用数据库的一致性。本次操作将使用之前建立的物理备库standby1为基础,物理备库的standby1的所有文件都存放在相应的目录中,为例使得该物理备库与主库保持同步,应该使得物理备库自动应用归档日志:

c:\> sqlplus sys/oracle@standby1 as sysdba

SQL> alter database recovery managed standby database cisconnect from session;

执行了以上命令之后,物理备库会自动应用归档日志,通过在备用数据库上查询动态性能视图v$archived_log,可以确定还未应用的归档日志。示例:

SQL > select name from v$archived_log where applied='no;

执行此句之后,如果还返回结果,那表示还存在尚未应用的归档日志;如果该语句不返回任何结果,则说明已经应用了所有的归档日志。接下来既可以开始建立逻辑备用数据库了,具体步骤如下:

1)激活主库和备库的补充日志特征。当执行dml操作时,oracle只会讲被修改列的的重做数据记载到重做日志。为了使得备用数据库能够正确的标识表行,必须激活补充日志特征,示例如下:

SQL> conn sys/oracle@demo as sysdba

SQL > alter database add supplemental log data(primary key , unique index ) columns; 

SQL> conn sys/oracle@standby1 as sysdba

SQL> alter database add supplemental log data (primary key , unique index ) columns;

通过在主库或者备库上查询动态性能视图v$database,可以确定是否激活了补充日志特征,示例如下:

SQL> select supplemental_log_data_pk  pk_log, supplemental_log_data_ui  ui_log  from v$database;

2)建立逻辑备用控制文件。当将物理备库转变为逻辑备库时,必须在主库上为连接备库建立逻辑备用控制文件。示例:

c:\> sqlplus sys/oracle@demo as sysdba

SQL> alter database create logical standby controlfile as 'd:\backup\control01.ctl' reuse;

3) 复制逻辑备用控制文件到备库。首先应该关闭备库,然后使用os命令cp复制逻辑备用控制文件,示例:

SQL> conn sys/oracle@standby1 as sysdba

SQL>shutdown immediate

SQL> ho cp d:\backup\control01.ctl  d:\standby1;

4)激活逻辑备库。在将逻辑备用控制文件复制到备用库的相应位置之后,装载逻辑备用数据库,然后应用归档日志,最后激活备用数据库,示例:

sqlplus sys/oracle@standby1 as sysdba

SQL> startup mount

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

SQL> alter database activate standby database;

5)修改逻辑备用数据库的数据库名。在激活了逻辑备库之后,为了防止主库和备库的相互影响,应该改变逻辑备库的数据库名称,改变数据库名可以使用dbnewid工具来完成,当改变逻辑备用数据库的数据库名时,要求逻辑备用数据库必须处于mount状态。示例:


如上所示,在运行了dbnewid工具之后,必须重新建立口令文件。为了重新建立口令文件,首先需要删除原有的口令文件,然后使用orapwd工具建立新口令文件。示例如下:

SQL>ho del %oracle_home%\database\pwdstandby1.ora

SQL>ho orapwd file=%oracle_home%\database\pwdstandby1.ora  password=oracle

6)改变参数文件的数据库名,在运行dbnewid工具之后,已经改变了所有数据文件和控制文件所记载的数据库名以及dbid,但是没有修改初始化参数db_name.因此,在执行dbnewd工具之后,dba必须修改初始化参数db_name.因为初始化参数DB_name不能使用alter system命令直接修改,所以,为了修改该参数,必须建立文本参数文件,然后手工修改文本参数文件,最后根据文本参数文件建立spfile,步骤如下:

7)启动逻辑备用数据库,并修改全局数据库名。在重新建立了口令文件,修改了初始化参数DB_NAME后,就可以启动逻辑备库了。在启动时,必须首先装载数据库,然后resetlogs选项打开逻辑备库。打开逻辑备库之后,修改其全局数据库名。示例:

SQL> conn sys/oracle@stanby1  as sysdba

SQL> startup mount

SQL>alter database open resetlogs;

SQL>alter database rename global_name to standby1;

8)为逻辑备用数据库增加临时文件。打开逻辑备库之后,为了防止在逻辑备库上排序错误,应该为其增加临时文件。通过查询数据字典视图dba_tablespaces,可以显示临时表空间名称;通过执行alter tablespace 。。。add tempfile 可以为临时表空间增加临时文件。示例:

SQL>select tablespace_name from dba_tablespaces where contents='TEMPORARY';

SQL> alter tablespace temp add  tempfile;


逻辑备用数据库的管理

1、开始sql apply

在建立了逻辑备用数据库之后,为了使得逻辑备用数据库与主数据库保持同步,必须应用sql操作。开始sql apply的示例如下:

SQL> alter database start logical standby apply;

当在逻辑备库上执行围炉操作时,可以停止应用sql,示例:

SQL> alter database stop logical standby apply;

2、显示已注册的归档日志

当主数据库上执行日志切换时,会将归档日志传送到逻辑备用数据库。通过在逻辑备用数据库上查询数据字典视图dba_logstdby_log可以显示已经注册的所有归档日志。示例:

SQL> conn sys/oracle@standby  as sysdba

SQL> select sequence#,applied from dba_logstdby_log;

sequence#用于标识已经被注册到逻辑备用数据库的日志序列号,applied用于标识归档日志是否应用(yes——已应用; no——未应用; current——正在应用)

3、检查是否正在应用重做数据。

通过在逻辑备用数据库上查询动态性能视图v$logstandby_stats,可以检查逻辑备用数据库是够正在应用重做数据。示例:

SQL> SELECT value  from  v$logstandby_stats  where  name='coordinator state';

value

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

initializing

如上所示,initializing标识协调进程(coordinator process)正在初始化,初始化标识日志应用服务正在准备sql apply; applying表示正在应用sql。注意,如果查询该动态性能使它没有返回行,则表示没有启动sql apply。

4、检查sql  apply的进度。

通过在逻辑备用数据库上产销数据字典视图dba_logstdby_progress,可以监视 sql apply的进程。示例如下:

SQL> select applied_scn , newest_scn from dba_logstdby_progress;

applied_scn用于标记已经应用到的scn值,newest_scn用于标识罪行的scn值,注意,如果返回值不一致,则表述可能没有启动sql  apply。

5、验证数据变化

当启动sql apply之后,如果主数据库的相关表发生变化,并且被记载到归档日志,那么在逻辑备用数据库可以查看到数据库变化。示例如下:

SQL> conn sys/oracle@demo as sysdba

connnected

SQL> update scott.emp set sal = 1111 where empno=7788;

SQL>commit;

SQL> alter system archive log current;

SQL>conn sys/oracle@standby1 as sysdba

SQL> select sal from scott.emp where empno=7788;

sal

-----

1111

6、转变逻辑数据库为主数据库

当主库发生重大事故时,可以激活逻辑备用数据库,并将其转变为主库,在将逻辑备库转变为主库之后,该数据库就可以作为普通数据库使用了。下面以激活逻辑备库standby1为例,如下:

C:\>sqlplus sys/oracle@standby1 as sysdba

SQL> alter database stop logical stanby apply;

SQL> alter database activate logical standby database;

网友评论

登录后评论
0/500
评论
长烟慢慢
+ 关注