3.创建逻辑备用数据库
3.1 确认主数据库的数据文件和联机日志文件
在主数据库上,查询v$datafile列出所有的逻辑备用数据库所需要的数据文件:
SQL> select name from v$datafile; NAME ------------------------------------------------ D:\ORADATA\RMANTGT\SYSTEM01.DBF D:\ORADATA\RMANTGT\USERS02.DBF D:\ORADATA\RMANTGT\USERS01.DBF D:\ORADATA\RMANTGT\UNDO02.DBF
在主数据库上,查询v$logfile列出所有的逻辑备用数据库所需要的日志文件:
SQL> select group#,type,member from v$logfile; GROUP# TYPE MEMBER ---------- ------- ------------------------------ 1 ONLINE D:\ORADATA\RMANTGT\REDO01.LOG 2 ONLINE D:\ORADATA\RMANTGT\REDO02.LOG 3 ONLINE D:\ORADATA\RMANTGT\REDO03.LOG
3.2 对主数据库生成一份拷贝
在主数据库上,进行以下步骤,以生成一份主数据库文件的冷拷贝备份。
第一步 关闭主数据库
SQL> shutdown;
第二步 拷贝数据文件到临时目录
使用操作系统命令将3.1所找出来的数据文件拷贝到一个临时目录。拷贝到临时目录是因为主数据库后面还会再次被关闭。
第三步 重启主数据库
SQL> startup
第四步 为备用数据库创建一个控制文件的备份拷贝在主数据库上,为备用数据库创建一个控制文件的备份:
SQL> alter database backup controlfile to 'D:\oradata\dataguard_logic_tmp\logicdg.ctl';
第五步 在主数据库上启用限制登录(restrict session)模式
在主数据库上,启用限制登录模式,这样就不允许其他用户登录进行DDL或DML操作。
SQL> alter system enable restricted session;
第六步 创建logminer目录
为了创建逻辑备用数据库,你必须为逻辑备用数据库手工创建目录结构。在主数据库上,采用以下命令创建logminer目录:
SQL> execute dbms_logstdby.build;
第七步 在主数据库上禁用限制登录(restrict session)模式
SQL> alter system disable restricted session;
第八步 确定最后归档的日志文件
为了获得创建逻辑备用数据库的起点,查询v$archived_log视图,确定最后的归档日志,并且在后面创建的过程中,输入该归档日志的名字。
SQL> alter system archive log current; SQL> select name from v$archived_log where (sequence#=(select max(sequence#) from v$archived_log where dictionary_begin='YES' and standby_dest='NO')); NAME ---------------------------------------------------------------------------- D:\ORADATA\RMANTGT\ARCHIVE\ARC00315.001
3.3 为备用数据库准备一个初始化参数文件
在主数据库上通过spfile创建一个传统的文本格式的初始化参数文件。该文本格式的初始化参数文件可以拷贝到备用数据库所在的系统并且可以被手工修改。
SQL> create pfile='D:\oradata\dataguard_logic_tmp\initLogic.ora' from spfile;
在后面的3.11的时候,还需要修改该文件的参数以对应备用数据库,然后还要将其转换为spfile。
3.4 从主数据库所在系统向备用数据库所在系统拷贝文件
在主数据库所在的系统上,使用操作系统命令拷贝以下二进制文件到备用数据库所在的系统。
a、备份的数据文件(在4.2.2处创建)
b、备份的日志文件(在4.2.2处创建)
c、初始化参数文件(在4.2.3处创建)
3.5 为备用数据库设置初始化参数
尽管从主数据库处拷贝的初始化参数文件里的参数设置大部分都适用于逻辑备用数据库,但是有些还是需要修改。
下面的例子显示了为逻辑备用数据库所作的初始化参数修改。被修改的部分用黑体表示。
1*.aq_tm_processes=1 2*.background_dump_dest='C:\oracle92\ora92\admin\logicdg\bdump' 3*.compatible='9.2.0.0.0' 4*.control_files='D:\oradata\logicdg\LOGICDG.CTL' 5*.core_dump_dest='C:\oracle92\ora92\admin\logicdg\cdump' 6*.standby_archive_dest='D:\oradata\logicdg\standby' 7*.parallel_max_servers=9 8*.db_block_size=8192 9*.db_cache_size=25165824 10*.db_domain='' 11*.db_file_multiblock_read_count=16 12*.db_name='rmantgt' 13*.dispatchers='(PROTOCOL=TCP) (SERVICE=ora920XDB)' 14*.fast_start_mttr_target=300 15*.global_names=TRUE 16*.hash_join_enabled=TRUE 17*.instance_name='logicdg' 18*.java_pool_size=33554432 19*.job_queue_processes=10 20*.large_pool_size=8388608 21*.log_archive_dest='' 22*.log_archive_dest_1='location=D:\oradata\logicdg\archive mandatory' 23*.log_archive_start=TRUE 24*.log_parallelism=1 25*.open_cursors=300 26*.pga_aggregate_target=25165824 27*.processes=150 28*.query_rewrite_enabled='FALSE' 29*.remote_login_passwordfile='EXCLUSIVE' 30*.shared_pool_size=50331648 31*.sort_area_size=524288 32*.star_transformation_enabled='FALSE' 33*.timed_statistics=TRUE 34*.undo_management='AUTO' 35*.undo_retention=10800 36*.undo_tablespace='UNDOTBS2' 37*.user_dump_dest='C:\oracle92\ora92\admin\logicdg\udump' 38#如果主数据库和备用数据库在同一台机器上,就需要做以下参数配置 39*.lock_name_space=logicdg
这里,对上面的设置做一个简单解释:
a、db_name:不需要修改,与主数据库保持一致。
b、compatible:不需要修改,与主数据库保持一致。
c、control_files:说明了备用数据库的控制文件所在的路径。
d、log_archive_start:不需要修改,与主数据库保持一致。
e、standby_archive_dest:说明了主数据库向备用数据库传递归档日志的路径。需要主数据库上配置归档路径为备用数据库,这样,主数据库在归档时,会将归档日志文件发送到备用数据库上该参数指定的位置。
f、log_archive_dest_1:说明备用数据库的归档日志所存放的路径。一旦出现switchover,那么该备用数据库成为主数据库,则该参数指定了联机日志文件的归档路径。
g、log_parallelism:不需要修改,与主数据库保持一致。
h、instance_name:如果主数据库和备用数据库在同一台机器上的话,就需要定义该参数并且与主数据库不同。
i、lock_name_space:指定备用数据库所在的实例名称。该参数与instance_name相同。
记住,可能还需要修改一些参数,比如background_dump_dest、user_dump_dest等。
3.6 创建一个windows服务
如果备用数据库所在机器为windows系统,则需要使用oradim创建windows服务。
C:\>oradim -new -sid logicdg -startmode manual
3.7 为主数据库和备用数据库配置监听
在主数据库和备用数据库上,分别为彼此配置监听器。如果使用了data guard broker,则必须使用TCP/IP协议配置监听器。
如果数据库在安装oracle介质的时候就自动创建了数据库的话,则不用配置。
3.8 在备用数据库所在系统启用死亡连接检测
通过在sqlnet.ora文件里设置sqlnet.expire_time参数来检测死亡连接。比如
sqlnet.expire_time=2
3.9 创建Oracle Net连接名
在主数据库和备用数据库里,分别创建连接到主数据库和备用数据库的tnsnames名称。
3.10 启动并mount备用数据库
在备用数据库上,启动并mount备用数据库。
注意,如果是windows系统,则还需要创建密码文件。
C:\>orapwd file=C:\oracle92\ora92\DATABASE\PWDlogicdg.ORA password=hanson entries=5 SQL>startup mount pfile=C:\oracle92\ora92\admin\logicdg\pfile\initLogic.ora
3.11 在逻辑备用数据库上重命名数据文件
在逻辑备用数据库上,需要将从主数据库拷贝来的数据文件所在的路径重新命名,因为要告诉控制文件,现在的数据文件所在的路径已经与主数据库中的路径不一致了,需要更改为当前最新的路径。
C:\>orapwd file=C:\oracle92\ora92\DATABASE\PWDlogicdg.ORA password=hanson entries=5 SQL>startup mount pfile=C:\oracle92\ora92\admin\logicdg\pfile\initLogic.ora
3.12 在逻辑备用数据库上重命名联机日志文件
SQL> select member from v$logfile; MEMBER ---------------------------------------------------------------------------- D:\ORADATA\RMANTGT\REDO01.LOG D:\ORADATA\RMANTGT\REDO02.LOG D:\ORADATA\RMANTGT\REDO03.LOG SQL> alter database rename file 'D:\ORADATA\RMANTGT\REDO01.LOG' to 'D:\oradata\logicdg\redo01.log'; Database altered. SQL> alter database rename file 'D:\ORADATA\RMANTGT\REDO02.LOG' to 'D:\oradata\logicdg\redo02.log'; Database altered. SQL> alter database rename file 'D:\ORADATA\RMANTGT\REDO03.LOG' to 'D:\oradata\logicdg\redo03.log'; Database altered. SQL> select member from v$logfile; MEMBER ---------------------------------------------------------------------------- D:\ORADATA\LOGICDG\REDO01.LOG D:\ORADATA\LOGICDG\REDO02.LOG D:\ORADATA\LOGICDG\REDO03.LOG
3.13 打开database guard
为了防止其他用户在逻辑备用数据库上进行DML操作,在逻辑备用数据库上打开database guard。
SQL>alter database guard all;
由于使用的控制文件比数据文件要新,所以直接open时会报错,需要进行恢复。
SQL>recover database using backup controlfile until cancel;
然后,直接输入cancel结束恢复。
SQL>alter database open resetlogs;
3.14 重新设置逻辑备用数据库名
通过运行oracle的DBNEWID(nid)实用程序,来改变逻辑备用数据库的名称。改变逻辑备用数据库的名称可以防止该逻辑备用数据库与主数据库之间进行交互作用。在运行nid的时候,必须关闭数据库,并启动到mount状态:
然后,现在可以运行nid来改变数据库名了:
C:\>nid target=sys/hanson@dataguard dbname=logicdg DBNEWID: Release 9.2.0.1.0 - Production Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. Connected to database RMANTGT (DBID=2455129425) Control Files in database: D:\ORADATA\LOGICDG\LOGICDG.CTL Change database ID and database name RMANTGT to LOGICDG? (Y/[N]) => y Proceeding with operation Changing database ID from 2455129425 to 2205596403 Changing database name from RMANTGT to LOGICDG Control File D:\ORADATA\LOGICDG\LOGICDG.CTL - modified Datafile D:\ORADATA\LOGICDG\SYSTEM01.DBF - dbid changed, wrote new name Datafile D:\ORADATA\LOGICDG\LOGMNRTS.DBF - dbid changed, wrote new name Datafile D:\ORADATA\LOGICDG\USERS01.DBF - dbid changed, wrote new name Datafile D:\ORADATA\LOGICDG\UNDO02.DBF - dbid changed, wrote new name Control File D:\ORADATA\LOGICDG\LOGICDG.CTL - dbid changed, wrote new name Database name changed to LOGICDG. Modify parameter file and generate a new password file before restarting. Database ID for database LOGICDG changed to 2205596403. All previous backups and archived redo logs for this database are unusable. Shut down database and open with RESETLOGS option. Succesfully changed database name and ID. DBNEWID - Completed succesfully.
3.15 在初始化参数文件中修改数据库名
第一步 修改初始化参数文件中的db_name为logicdg。
第二步 关闭逻辑备用数据库
SQL>shutdown immediate;
第三步 根据pfile创建spfile
SQL> create spfile from pfile='C:\oracle92\ora92\admin\logicdg\pfile\initLogic.ora';
第四步 重启逻辑备用数据库
SQL>startup mount; SQL>alter database open resetlogs;
3.16 为逻辑备用数据库创建一个新的临时表空间
临时数据文件不需要从主数据库拷贝到逻辑备用数据库上。
第一步 确定当前临时数据文件
在逻辑备用数据库上,执行如下SQL:
SQL>select * from v$tempfile;
如果没有记录,则跳到第三步。
第二步 在逻辑备用数据库上删除临时数据文件
SQL>alter database tempfile 'tempfilename' drop;
第三步 在逻辑备用数据库上,添加一个新的临时数据文件
1、确定临时表空间
SQL>select tablespace_name from dba_tablespaces where contents='TEMPORARY';
2、添加一个临时文件
SQL>alter tablespace temp add tempfile 'D:\ORADATA\LOGICDG\temp01.dbf' size 50m reuse;
注意,这里的temp表空间空间必须足够,否则逻辑备用数据库在运用主数据库传来的归档日志时会出错。
3.17 注册归档的日志,并启动SQL应用操作
注册最新的归档日志文件,并应用重做日志里的数据。
第一步 注册最新的归档日志文件
将3.2的第八步查到的归档日志文件注册到逻辑备用数据库。
SQL> alter database register logical logfile 'D:\oradata\logicdg\ARC00290.001';
第二步 在逻辑备用数据库里开始应用重做日志
SQL> alter database start logical standby apply initial;
只有在逻辑备用数据库第一次启动应用重做日志时,指定initial选项。以后启动SQL应用按照以下方法:
SQL>alter database stop logical standby apply; SQL>alter database start logical standby apply;
3.18 使主数据库向备用数据库进行归档
必须在主数据库上设置,以使得主数据库能够向备用数据库归档。
第一步 设置定义归档的初始化参数
在主数据库的log_archive_dest_n和log_archive_dest_state_n参数重设置主数据库向备用数据库的归档。
下面的例子显示了如何设置这些参数:
第一步 设置远程归档参数
SQL> alter system set log_archive_dest_2='service=dataguard mandatory' scope=both; SQL> alter system set log_archive_dest_state_2=enable scope=both;
第二步 启动远程归档
SQL> alter system archive log current;