SQL> select name from v$datafile;NAME------------------------------------------------D:\ORADATA\RMANTGT\SYSTEM01.DBFD:\ORADATA\RMANTGT\USERS02.DBF
D:\ORADATA\RMANTGT\USERS01.DBFD:\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;
SQL> startup
第五步 在主数据库上启用限制登录(restrict session)模式
SQL> alter system enable restricted session;
SQL> execute dbms_logstdby.build;
SQL> alter system disable restricted session;
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
SQL> create pfile=''D:\oradata\dataguard_logic_tmp\initLogic.ora'' from spfile;
a、备份的数据文件(在4.2.2处创建)
b、备份的日志文件(在4.2.2处创建)
c、初始化参数文件(在4.2.3处创建)
下面的例子显示了为逻辑备用数据库所作的初始化参数修改。被修改的部分用黑体表示。
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=3002
6*.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
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
如果数据库在安装oracle介质的时候就自动创建了数据库的话,则不用配置。
password=hanson entries=5SQL>startup mount pfile=C:\oracle92\ora92\admin\logicdg\pfile\initLogic.ora
C:\>orapwd file=C:\oracle92\ora92\DATABASE\PWDlogicdg.ORA
password=hanson entries=5SQL>startup mount pfile=C:\oracle92\ora92\admin\logicdg\pfile\initLogic.ora
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
SQL>alter database guard all;
由于使用的控制文件比数据文件要新,所以直接open时会报错,需要进行恢复。
SQL>recover database using backup controlfile until cancel;
然后,直接输入cancel结束恢复。
SQL>alter database open resetlogs;
然后,现在可以运行nid来改变数据库名了:
C:\>nid target=sys/hanson@dataguard dbname=logicdgDBNEWID:
Release 9.2.0.1.0 - ProductionCopyright (c) 1995, 2002,
Oracle Corporation. All rights reserved.Connected to
database RMANTGT (DBID=2455129425)Control Files in
database: D:\ORADATA\LOGICDG\LOGICDG.CTLChange
database ID and database name RMANTGT to LOGICDG? (Y/[N]) => yProceeding
with operationChanging 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 nameDatabase 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 在初始化参数文件中修改数据库名
第二步 关闭逻辑备用数据库
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;
第一步 确定当前临时数据文件
在逻辑备用数据库上,执行如下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表空间空间必须足够,否则逻辑备用数据库在运用主数据库传来的归档日志时会出错。
SQL> alter database register logical logfile ''D:\oradata\logicdg\ARC00290.001'';
SQL>alter database stop logical standby apply;SQL>alter database start logical standby apply;
3.18 使主数据库向备用数据库进行归档
下面的例子显示了如何设置这些参数:
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;
SQL>select sequence#,first_time,next_time,dict_begin,dict_end from dba_logstdby_log order by sequence#;
第二步 在主数据库上归档一些日志
SQL>alter system archive log current;
第三步 再次查询dba_logstdby_log视图
SQL>select sequence#,first_time,next_time,dict_begin,dict_end from dba_logstdby_log order by sequence#;
SQL>select name,value from v$logstdby_stats where name=''coordinator state'';
逻辑备用数据库如果有很多表,那么初始化的过程会需要几个小时,但是,一旦初始化结束,后面的应用重做日志会快很多。
如果applied_scn与newest_scn相同,这就意味着所有重做日志里的可用数据都被应用了。这些值可以与dba_logstdby_log视图里的first_change#的值做比较,来得知有多少日志信息已经被应用了以及有多少没应用。