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;