(注意,有些细节与9i下面不同)
[主服务器]
一、将主库设为归档模式
1.备份初始化参数文件
sql> create pfile from spfile;
2.配置归档日志的名称格式
sql>alter system set log_archive_format='%S_%T_%R.log' scope=spfile;
在10G中设置日志格式时,一定要加%R参数,否则一定会出错
3.配置归档位置
sql>alter system set log_archive_dest_1='location=/home1/orcl_arch' scope=spfile
在ORACLE 10G企业版里还可以配置多个归档路径,log_archvile_dest_n(其中n可以为1-10)
4. 置归档模式
将数据库正常关闭
sql>shutdown immediate
启动到MOUNT模式
SQL>startup mount
置为归档模式
SQL>alter database archivelog
打开数据库
SQL>alter database open
查看数据库是否归档
SQL> archive log list;
如果显示为ENABLE则表示已成功归档
或 SQL>select log_mode from v$database;
如果为ARCHIVELOG则表示已成功归档
二、检查是否使用spfile,最好使用spfile,可以自动修改参数。
MSPDB > show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /home/oracle/product/10.2.0/db
_1/dbs/spfilemspdb.ora
三、设置主服务器的强行日志处理
SQL> ALTER DATABASE FORCE LOGGING;
四、查询V$dbfile获得数据文件信息
col name for a90;
set linesize 139;
select * from V$dbfile order by name;
FILE# NAME
---------- ------------------------------------------------------------------------------------------
7 /home/oracle/mspdb_data/mspdb_catalogspace_01.dbf
8 /home/oracle/mspdb_data/mspdb_companyspace_01.dbf
9 /home/oracle/mspdb_data/mspdb_defaultspace_01.dbf
6 /home/oracle/mspdb_data/mspdb_indexspace_01.dbf
5 /home/oracle/mspdb_data/mspdb_productspace_01.dbf
10 /home/oracle/mspdb_data/mspdb_queuespace_01.dbf
3 /home/oracle/oradata/mspdb/sysaux01.dbf
1 /home/oracle/oradata/mspdb/system01.dbf
2 /home/oracle/oradata/mspdb/undotbs01.dbf
4 /home/oracle/oradata/mspdb/users01.dbf
11 /home/oracle/product_data/MSPDB_UNDOTBS_A_01.DBF
12 /home/oracle/product_data/MSPDB_UNDOTBS_B_01.DBF
13 /home/oracle/product_data/MSPDB_UNDOTBS_B_02.DBF
14 /home/oracle/product_data/MSPDB_UNDOTBS_B_03.DBF
五、 为主数据库添加"备用联机日志文件",这里要保证备日志文件与主库联机日志文件相同大小。
添加备用日志文件是规则:
备用日志最少应该比redo log 多一个。推荐的备重做日志数依赖于主数据库上的线程数。
(每线程日志文件最大数目 + 1 ) * 线程数
--------------
-- 在oracle10g下面,无论何种模式,都需要添加standby logfile(比源DB多一组)
-- 这一步十分重要!!
----------------------------
alter database add standby logfile
group 7 ('/home2/oracle/oradata/mspdb/std_redo07a.log','/home2/oracle/oradata/mspdb/std_redo07b.log') size 100m REUSE,
group 8 ('/home2/oracle/oradata/mspdb/std_redo08a.log','/home2/oracle/oradata/mspdb/std_redo08b.log') size 100m REUSE,
group 9 ('/home2/oracle/oradata/mspdb/std_redo09a.log','/home2/oracle/oradata/mspdb/std_redo09b.log') size 100m REUSE,
group 10 ('/home2/oracle/oradata/mspdb/std_redo10a.log','/home2/oracle/oradata/mspdb/std_redo10b.dbf') size 100m REUSE,
group 11 ('/home2/oracle/oradata/mspdb/std_redo11a.log','/home2/oracle/oradata/mspdb/std_redo11b.dbf') size 100m REUSE,
group 12 ('/home2/oracle/oradata/mspdb/std_redo12a.log','/home2/oracle/oradata/mspdb/std_redo12b.dbf') size 100m REUSE,
group 13 ('/home2/oracle/oradata/mspdb/std_redo13a.log','/home2/oracle/oradata/mspdb/std_redo13b.dbf') size 100m REUSE;
[备用服务器]
推荐安装环境与主数据库一样,准备相应目录,
如日志文件路径,归档路径,参数文件路径,数据文件准备存放路径等
$cd $ORACLE_BASE
$mkdir -p admin/mspdb/bdump
$mkdir -p admin/mspdb/cdump
$mkdir -p admin/mspdb/udump
[oracle@Yy224 dbs]$ cat initmspdb.ora
mspdb.__db_cache_size=1644167168
mspdb.__java_pool_size=16777216
mspdb.__large_pool_size=16777216
mspdb.__shared_pool_size=452984832
mspdb.__streams_pool_size=0
*.audit_file_dest='/home2/oracle/admin/mspdb/adump'
*.background_dump_dest='/home2/oracle/admin/mspdb/bdump'
*.compatible='10.2.0.1.0'
*.core_dump_dest='/home2/oracle/admin/mspdb/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='mspdb'
*.db_recovery_file_dest='/home2/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.db_unique_name='mspdb'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=mspdbXDB)'
*.job_queue_processes=10
*.log_archive_dest_1='location=/home2/arch_mspdb'
*.log_archive_format='%S_%T_%R.log'
*.open_cursors=3000
*.pga_aggregate_target=786432000
*.processes=1050
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=2147483648
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/home2/oracle/admin/mspdb/udump'
*.log_file_name_convert='/home/oracle/oradata/mspdb','/home2/oracle/oradata/mspdb'
*.db_file_name_convert='/home/oracle/mspdb_data','/home2/oracle/mspdb_data','/home/oracle/oradata/mspdb','/home2/oracle/oradata/mspdb','/home/oracle/product_data','/home2/oracle/product_data'
#if change controlfile then edit this
*.control_files='/home2/oracle/admin/mspdb/mspdb_standby.ctl'
#standby database parameter
*.standby_file_management=AUTO
*.standby_archive_dest='/home2/arch_mspdb'
*.fal_server='MSPDB_PRIMARY'
*.fal_client='MSPDB_STANDBY'
[主数据库]
1、做一次完整的RMAN热备份
rman target /
RMAN>configure channel 1 device type disk maxpiecesize 2G;
RMAN> backup database format='/home2/hotbak/db_%U_%s.bak';
RMAN> sql "Alter System Archive Log Current";
RMAN> Backup filesperset 10 ArchiveLog all format='/home2/hotbak/log_%U_%s.bak';
-----------------------------------------------------------------------
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at ......
RMAN-06059: expected archived log not found, lost of archived log compromises recoverability
ORA-19625: error identifying file .........
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
-----------------------------------------------------------------------
方法很简单,在rman下执行下面语句就解决了:
change archivelog all crosscheck ;
*********************************************************************************
2、传送相应的备份集到备用服务器
生成密钥,不要输入密码。
ssh-keygen -t rsa
将公用密钥分发到远端服务器上。
scp ~/.ssh/id_rsa.pub username@serveraddr:~/.ssh/authorized_keys
注意:authorized_keys文件确保为644,并且.ssh目录确保为755
3、生成备用服务器口令文件
$rm $ORACLE_HOME/dbs/orapw$ORACLE_SID
$orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=test entries=4
将生成的文件复制到备用库相应的位置
[两台服务器]
1、设定 listener.ora 文件,启动监听
[oracle@Yy224 admin]$ cat listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 2.39.8.24)(PORT = 1522))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = mspdb)
(ORACLE_HOME = /home2/oracle/product/10.2.0/db_1 )
(SID_NAME = mspdb)
)
)
2、修改 tnsnames.ora 文件,确保包含下面的内容 (用于fal_server, fal_client参数)
PPDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MSPDB)
)
)
MSPDB_PRIMARY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 2.39.8.21)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MSPDB)
)
)
MSPDB_STANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 2.39.8.24)(PORT = 1522))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MSPDB)
)
)
3、在主备节点用tnsping测试网络连通性
$ tnsping MSPDB_PRIMARY
$ tnsping MSPDB_STANDBY
在两台服务器上分别测试,确保都能成功!
[主数据库]
1、在主数据库创建备用服务器控制文件
SQL> alter database create standby controlfile as '/home/oracle/admin/mspdb/mspdb_standby.ctl';
Database altered.
创建后将控制文件复制到备用数据库所在的控制文件目录下(以前面参数文件中设置的为准)。
[备用服务器]
1、启动备用数据库 (注意:用pfile文件启动成mount状态,不要open)
SQL> connect / as sysdba
Connected to an idle instance.
SQL>startup nomount pfile=?/dbs/initmspdb.ora;
SQL>alter database mount standby database;
SQL> select name,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;
NAME OPEN_MODE PROTECTION_MODE DATABASE_ROLE
--------- ---------- ------------------------ ----------------
PPDB MOUNTED MAXIMUM PERFORMANCE PHYSICAL STANDBY
2、恢复数据库
[oracle@Yy248 ~]$ rman target /
Recovery Manager: Release 9.2.0.4.0 - 64bit Production
Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
connected to target database: PPDB (DBID=708922967)
RMAN> restore database;
Starting restore at 24-SEP-07
using target database controlfile instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=13 devtype=DISK
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /home1/oradata/ppdb/system01.dbf
... ...
channel ORA_DISK_1: restored backup piece 1
piece handle=/home1/backup/hotbak/db_01iso2bh_1_1_1.bak tag=TAG20070924T105233 params=NULL
channel ORA_DISK_1: restore complete
Finished restore at 24-SEP-07
RMAN> restore archivelog all;
Starting restore at 24-SEP-07
using channel ORA_DISK_1
channel ORA_DISK_1: starting archive log restore to default destination
channel ORA_DISK_1: restoring archive log
archive log thread=1 sequence=89
channel ORA_DISK_1: restoring archive log
archive log thread=1 sequence=90
channel ORA_DISK_1: restoring archive log
archive log thread=1 sequence=91
channel ORA_DISK_1: restoring archive log
archive log thread=1 sequence=92
channel ORA_DISK_1: restoring archive log
archive log thread=1 sequence=93
channel ORA_DISK_1: restoring archive log
archive log thread=1 sequence=94
channel ORA_DISK_1: restoring archive log
archive log thread=1 sequence=95
channel ORA_DISK_1: restored backup piece 1
piece handle=/home1/backup/hotbak/log_02iso2v1_1_1_2.bak tag=TAG20070924T110255 params=NULL
channel ORA_DISK_1: restore complete
Finished restore at 24-SEP-07
(如果出错,则:)
***************************************************************************
RMAN> list backup of archivelog all;
List of Backup Sets
===================
BS Key Size Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
21 289M DISK 00:00:19 07-NOV-07
BP Key: 21 Status: AVAILABLE Tag: TAG20071107T134411
Piece Name: /home1/hotbak/log_0nj0f19c_1_1_23.bak
List of Archived Logs in backup set 21
Thrd Seq Low SCN Low Time Next SCN Next Time
---- ------- ---------- --------- ---------- ---------
1 1877 9479732746 07-NOV-07 9479744854 07-NOV-07
1 1878 9479744854 07-NOV-07 9479756287 07-NOV-07
1 1879 9479756287 07-NOV-07 9479968909 07-NOV-07
1 1880 9479968909 07-NOV-07 9479968917 07-NOV-07
RMAN> restore archivelog sequence between 1877 and 1880;
***************************************************************************
3、直接进入到管理恢复状态
SQL> alter database recover managed standby database disconnect from session;
Database altered.
进入管理恢复模式的标准语法为
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE [
[ NO TIMEOUT | TIMEOUT [integer] ]
[ NODELAY | DELAY [integer] ]
[ DEFAULT DELAY ]
[ NO EXPIRE | EXPIRE [integer] ]
[ NEXT [integer] ]
[ NOPARALLEL | PARALLEL [integer]]
[ THROUGH { ALL | NEXT | LAST } SWITCHOVER ]
[ THROUGH ALL ARCHIVELOG [ THREAD n ] SEQUENCE n ]
[ FINISH [ SKIP [STANDBY LOGFILE] [NOWAIT | WAIT] ] ]
]
以下语句查看差异
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
到此为止,备用数据库的创建全部完成。
[主数据库]
[采用Arch 进程传送归档日志的最大性能模式]
在默认情况下,
Data guard就是最大性能模式,所以不需要采用其它额外的配置,只需要修改主数据库的第二个归档路径即可。
SQL>alter system set log_archive_dest_2='SERVICE=MSPDB_STANDBY REOPEN=60' scope=both;
SQL>alter system set log_archive_dest_state_2=enable scope=both;
SQL>alter system archive log current;
其中reopen表示了如果发生归档失败后,第二次重复的时间间隔(秒),这种方式是从8i以来一直采用的一种方式,
因为比较稳定,不影响数据库的性能,如果发生网络失败等原因,主数据库不会因为远程归档不成功而停下来。
[验证备用服务器是否工作]
可以通过视图查看日志应用情况
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED
FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIM NEXT_TIME APP
---------- --------- --------- ---
89 21-SEP-07 24-SEP-07 NO
90 24-SEP-07 24-SEP-07 NO
91 24-SEP-07 24-SEP-07 NO
92 24-SEP-07 24-SEP-07 YES
93 24-SEP-07 24-SEP-07 YES
94 24-SEP-07 24-SEP-07 YES
95 24-SEP-07 24-SEP-07 YES
96 24-SEP-07 24-SEP-07 YES
[在备用服务器上添加备用日志文件]
1.
SQL> recover managed standby database cancel;
Media recovery complete.
2.
SQL>
alter database add standby logfile
group 7 ('/home2/oracle/oradata/mspdb/std_redo07a.log','/home2/oracle/oradata/mspdb/std_redo07b.log')
size 100m REUSE,
group 8 ('/home2/oracle/oradata/mspdb/std_redo08a.log','/home2/oracle/oradata/mspdb/std_redo08b.log')
size 100m REUSE,
group 9 ('/home2/oracle/oradata/mspdb/std_redo09a.log','/home2/oracle/oradata/mspdb/std_redo09b.log')
size 100m REUSE,
group 10 ('/home2/oracle/oradata/mspdb/std_redo10a.log','/home2/oracle/oradata/mspdb/std_redo10b.dbf')
size 100m REUSE,
group 11 ('/home2/oracle/oradata/mspdb/std_redo11a.log','/home2/oracle/oradata/mspdb/std_redo11b.dbf')
size 100m REUSE,
group 12 ('/home2/oracle/oradata/mspdb/std_redo12a.log','/home2/oracle/oradata/mspdb/std_redo12b.dbf')
size 100m REUSE,
group 13 ('/home2/oracle/oradata/mspdb/std_redo13a.log','/home2/oracle/oradata/mspdb/std_redo13b.dbf')
size 100m REUSE;
3.
SQL> SQL> recover managed standby database disconnect from session;
Media recovery complete.
[设置主服务器日志切换间隔]
MSPDB > show parameter archive_lag_target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target integer 0
MSPDB > alter system set archive_lag_target=900 scope=both;
System altered.
[日常管理]
1、备用服务器的管理模式与只读模式
1.1、启动到管理模式
SQL>shutdown immediate;
SQL>startup nomount pfile=?/dbs/initmspdb.ora;
SQL>alter database mount standby database;
SQL>alter database recover managed standby database disconnect from session;
1.2、启动到只读方式
SQL>shutdown immediate
SQL>startup nomount pfile=?/dbs/initmspdb.ora
SQL>alter database mount standby database
SQL>alter database open read only
1.3、从管理恢复模式转到只读模式
SQL>recover managed standby database cancel;
SQL>alter database open read only;
这个时候,可以给数据库增加数据文件
如
alter tablespace temp add tempfile '/home2/oracle/oradata/mspdb/temp01.dbf' size 200M;
1.4、从只读方式转到管理恢复方式
SQ>recover managed standby database disconnect from session;
(版权所有,转载请注明出处)