DataGuard物理备用数据库的配置与维护
物理备用数据库的配置与维护
DataGuard物理备用数据库的
配置与维护
1/16 沈阳东软系统集成工程有限公司
2007年10月19日 初稿
物理备用数据库的配置与维护
修改
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
版本号 变更控制报告编号 更改条款及内容 更改人 审批人 更改日期 1 2
2/16
物理备用数据库的配置与维护
目 录
第1章 建立物理备用数据库 ................................................................................................ 4 1.1 在主数据库上的准备工作 ................................................. 4
1.1.1 将主数据库置为FORCE LOGGING模式 .......................................................................... 4
1.1.2 生成Password文件 ........................................................................................................... 4
1.1.3 配置Standby Redo Log(在最大性能模式下不需要) ...................................................... 4
1.1.4 配置主数据库上的tnsnames.ora文件(在所有的主机上) .............................................. 5
1.1.5 设定主数据库的初始化参数 ................................................................................................ 5
1.1.6 激活数据库归档模式........................................................................................................... 6 1.2 建立物理备用数据库 ..................................................... 7
1.2.1 备份主数据库(主数据库) ................................................................................................ 7
1.2.2 为备用数据库生成一个控制文件(主数据库) .................................................................. 8
1.2.3 为备用数据库建立一个初始化参数文件(主数据库)........................................................ 8
1.2.4 将主数据库的文件拷贝到备用服务器(主数据库) ........................................................... 9
1.2.5 设置备用数据库的环境(备用数据库) ............................................................................. 9
1.2.6 启动备用数据库(备用数据库) ...................................................................................... 10 1.3 验证所建立的备用数据库 ................................................ 11
第2章 物理备用数据库的管理 .......................................................................................... 11 2.1 启动和关闭物理备用数据库 .............................................. 11
2.1.1 启动物理备用数据库.......................................................................................................... 11
2.1.2 关闭物理备用数据库.......................................................................................................... 11 2.2 备用数据库只读模式 .................................................... 12
2.2.1 以只读模式打开备用数据库: .......................................................................................... 12
2.2.2 将备用数据库由只读模式切换到Redo应用模式 ............................................................. 12 2.3 管理主数据库上影响备用数据库的事件 .................................... 12
2.3.1 添加数据文件或建立
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
空间 .............................................................................................. 12
2.3.2 删除表空间或数据文件 ..................................................................................................... 13
2.3.3 数据文件重命名 ................................................................................................................ 14
2.3.4 执行一个带有NOLOGGING 或UNRECOVERABLE子句的操作 .................................. 14 2.4 主数据库与备用数据库监控与维护 ........................................ 15 2.5 归档日志的删除 ........................................................ 16
3/16
物理备用数据库的配置与维护
第1章 建立物理备用数据库
本章内容如下:
, 在主数据库上的准备工作
, 建立物理备用数据库
, 验证所建立的备用数据库
在这里,我们建立的备用数据库的保护模式为最大性能模式(maximum performance mode)(这是缺省的数据保护模式)。
主数据库:主机:hxzgdb1(136.24.19.20)hxzgdb2(136.24.19.23);数据库名:dlds(实例dlds1,dlds2) 备用数据库:主机:dbstandby(136.24.19.244);数据库名:dlds(实例dldsbf)
1.1 在主数据库上的准备工作
1.1.1 将主数据库置为FORCE LOGGING模式
SQL>
ALTER DATABASE FORCE LOGGING;
1.1.2 生成Password文件
如果不存在Password文件,需要建立一个Password文件,其中在DATAGUARD中的每个数据
库中sys的口令需要一致。具体命令如下:
oracle$
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=sys entries=4
1.1.3 配置Standby Redo Log(在最大性能模式下不需要)
Standby Redo Log是在最大保护模式和最大可用模式中需要建立的。
执行下面的步骤配置Standby Redo Log:
, 保证Standby Redo Log的大小要与主数据库中的Redo Log的大小完全相同;
, 确定适当的Standby Redo Log组的数量,oracle推荐用下面的公式来计算:
(maximum number of logfiles for each thread + 1) * maximum number of threads
, 确定或设置相关的数据库参数,主要指MAXLOGFILES和 MAXLOGMEMBERS这两个参数:
, 生成Standby Redo Log文件组:
4/16
物理备用数据库的配置与维护
例:
添加Standby Redo Log文件组到一个特定的线程(THREAD):
SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 5
2> ('/oracle/dbs/log1c.rdo','/oracle/dbs/log2c.rdo') SIZE 500M;
添加Standby Redo Log文件组到一个特定的组:
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 10
2> ('/oracle/dbs/log1c.rdo','/oracle/dbs/log2c.rdo') SIZE 500M;
, 确定Standby Redo Log文件组建立成功:
SQL>SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
GROUP# THREAD# SEQUENCE# ARC STATUS
------ ------- --------- --- ------
3 1 16 NO ACTIVE
4 0 0 YES UNASSIGNED
5 0 0 YES UNASSIGNED
1.1.4 配置主数据库上的tnsnames.ora文件(在所有的主机上) DBPRIMARY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 136.24.19.22)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 136.24.19.24)(PORT = 1521))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dlds)
)
)
DBSTANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 136.24.19.244)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dlds)
)
)
1.1.5 设定主数据库的初始化参数
, 取消原来的LOG_ARCHIVE_DEST方式的参数配置,采用LOG_ARCHIVE_DEST_n方式:
5/16
物理备用数据库的配置与维护
SQL>
ALTER SYSTEM SET LOG_ARCHIVE_DEST='' SCOPE=BOTH SID='dlds1';
ALTER SYSTEM SET LOG_ARCHIVE_DEST='' SCOPE=BOTH SID='dlds2';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/oraarch/dlds1 MANDATORY'
SCOPE=BOTH SID='dlds1';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/oraarch/dlds2 MANDATORY'
SCOPE=BOTH SID='dlds2';
, 添加第二归档路径指向备用数据库
SQL>
alter system set log_archive_dest_2='SERVICE=dbstandby REOPEN=300' scope=both;
SQL>
alter system set log_archive_dest_state_2=enable scope=both;
, 确定参数REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
, 除了上面的必须的参数外,其它参数的说明参见下面的表:
参数名称 参数说明和推荐设置
DB_NAME 8字节的名称,所有备用数据库使用相同的值 DB_UNIQUE_NAME 为每个数据库指定一个唯一的名称
LOG_ARCHIVE_CONFIG 缺省该参数允许数据库传送或接受redo数据 CONTROL_FILES 控制文件的名称路径,推荐使用多个控制文件使得控制文件
损坏时更容易恢复
LOG_ARCHIVE_DEST_n 指定redo数据归档到主数据库或备用数据
LOG_ARCHIVE_DEST_STATE_n 设置为ENABLE,允许redo数据的传送
REMOTE_LOGIN_PASSWORDFILE 推荐配置为EXCLUSIVE或SHARED,所有数据库的sys用户口令相同 LOG_ARCHIVE_FORMAT 归档日志文件的格式
LOG_ARCHIVE_MAX_PROCESSES 最大归档进程(ARCn)数(1-30),缺省值为4 FAL_SERVER 备用数据库向FAL_SERVER请求主数据库没有发送的归档日志 FAL_CLIENT FAL_SERVER向FAL_CLIENT发送缺少的归档日志 DB_FILE_NAME_CONVERT 如果备用数据库的数据文件与主数据库的数据文件路径名称不一致时,
使用该参数进行转换
LOG_FILE_NAME_CONVERT 如果备用数据库的日志文件与主数据库的日志文件路径名称不一致时,
使用该参数进行转换
STANDBY_FILE_MANAGEMENT 设置为AUTO时,当主数据库对数据文件进行增加删除操作时,备用数
据库与主数据库保持同步
1.1.6 激活数据库归档模式
关闭数据库:srvctl stop database -d dlds
sqlplus “/as sysdba”
startup mount;
alter database archivelog;
shutdown immediate;
6/16
物理备用数据库的配置与维护
启动数据库:srvctl start database -d dlds
1.2 建立物理备用数据库
, 备份主数据库(主数据库)
, 为备用数据库生成一个控制文件(主数据库)
, 为备用数据库建立一个初始化参数文件(主数据库)
, 将主数据库的文件拷贝到备用服务器(主数据库)
, 设置备用数据库的环境(备用数据库)
, 启动备用数据库(备用数据库)
1.2.1 备份主数据库(主数据库)
Oracle推荐使用rman来进行数据库的备份,我们使用下面的脚本将数据库备份到/backup目录下如果有备份软件,可以使用备份软件进行备份:
rman target /
RMAN>
run
{
allocate channel t1 type DISK connect 'sys/sys@dlds1';
allocate channel t2 type DISK connect 'sys/sys@dlds2';
backup TAG 'DB'
incremental level 0
format '/backup/db_%d_t%t_s%s_p%p_%T' ( database );
sql 'alter system switch logfile'; backup TAG 'ARC'
format '/backup/log_%d_t%t_s%s_p%p_%T' ( archivelog all delete input ); backup TAG 'CTRL'
format '/backup/crtl_%d_t%t_did%I_%T' (current controlfile);
backup TAG 'SPFILE'
format '/backup/spfile_%d_t%t_s%s_p%p_%T' (spfile);
release channel t1;
release channel t2;
}
7/16
物理备用数据库的配置与维护
1.2.2 为备用数据库生成一个控制文件(主数据库)
SQL>
ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/backup/ctrl.stb';
1.2.3 为备用数据库建立一个初始化参数文件(主数据库)
, 由主数据的spfile生成一个初始化参数文件的拷贝:
SQL>
CREATE PFILE='/backup/pfile.ora' FROM SPFILE;
, 根据备用数据库的配置,修改初始化参数文件,并添加与备用数据库相关的参数(红色部分),结果如下:
*.__db_cache_size=1832111872
*.__java_pool_size=16777216
*.__large_pool_size=16777216
*.__shared_pool_size=593835520
*.__streams_pool_size=0
*.audit_file_dest='/oracle/admin/dlds/adump' *.background_dump_dest='/oracle/admin/dlds/bdump' *.compatible='10.2.0.1.0'
*.control_files='/dev/rdb_control1','/dev/rdb_control2','/dev/rdb_control3'
*.core_dump_dest='/oracle/admin/dlds/cdump' *.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='dlds'
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=2854565376
*.processes=300
*.remote_login_passwordfile='exclusive' *.sessions=350
*.sga_target=3564744704
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/oracle/admin/dlds/udump' *.LOG_ARCHIVE_DEST_1='LOCATION=/oraarch MANDATORY' *.standby_file_management=AUTO
*.standby_archive_dest='/oraarch'
*.fal_server='DBPRIMARY'
*.fal_client='DBSTANDBY'
8/16
物理备用数据库的配置与维护
*.log_file_name_convert='/dev/','/dev/'
1.2.4 将主数据库的文件拷贝到备用服务器(主数据库) , 将上面三步备份出来的文件拷贝到备用数据库上(这里所有的文件都在/backup目录下)。
1.2.5 设置备用数据库的环境(备用数据库)
, 安装oracle软件,版本要与主数据库完全一致
, 编辑oracle用户的.profile文件,指定备用数据库的sid,ORACLE_SID=dldsbf , 建立dump文件的目录
根据参数文件中的设置,建立对应的目录,也可以根据需要修改与主数据库不同: 例如,参数文件中:
*.audit_file_dest='/oracle/admin/dlds/adump' *.background_dump_dest='/oracle/admin/dlds/bdump' *.core_dump_dest='/oracle/admin/dlds/cdump' *.user_dump_dest='/oracle/admin/dlds/udump' 建立相应的目录:
Oracle$
mkdir -p /oracle/admin/dlds/adump
mkdir -p /oracle/admin/dlds/bdump
mkdir -p /oracle/admin/dlds/hdump
mkdir -p /oracle/admin/dlds/udump
, 生成password文件
oracle$
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=sys entries=4
, 配置备用数据库的侦听
使用netca配置:
listener.ora:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /oracle/app/10.2)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
9/16
物理备用数据库的配置与维护
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbstandby)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
, 生成oracle网络服务名(tnsnames.ora)
参见1.1.4节。
, 生成备用数据库的参数文件(spfile)
SQL>
CREATE SPFILE FROM PFILE='/backup/pfile.ora';
, 建立备用数据库所需要的数据文件(lv)
由于数据库使用的是裸设备,所以需要在备用数据库手动上建立与主数据相同逻辑卷(lv)。 生成建立逻辑卷的脚本(在主数据上执行):
lsvg -l oravg1|egrep -v "oravg1|LV NAME"|awk '{print "mklv -y "$1" -T O -w n -s n -r n oravg "$3}' > /backup/mklv.sh
生成修改逻辑卷权限的脚本(在主数据上执行):
lsvg -l oravg1|egrep -v "oravg1|LV NAME"|awk '{print "chown oracle:oinstall /dev/*"$1}' > /backup/chown.sh
其中oravg1是主数据库上的卷组名,oravg是备用数据库上的卷组名
在备用数据库上执行上面的两个脚本,完成lv的建立。
1.2.6 启动备用数据库(备用数据库)
, 使用主数据库的备份在备用数据库的主机上进行恢复,从而建立备用数据库(也可以使用备份软件进行恢复操作):
rman target / nocatalog
RMAN>
#启动数据库到Nomount
STARTUP NOMOUNT;
#恢复控制文件
restore controlfile from '/backup/ctrl.stb'; #启动数据库到mount
sql 'ALTER DATABASE MOUNT STANDBY DATABASE'; #恢复数据库
run{
allocate channel t1 type DISK;
allocate channel t2 type DISK;
restore database;
recover database;
release channel t1;
release channel t2;
}
, 启动Redo 应用:
SQL>
10/16
物理备用数据库的配置与维护
alter database recover managed standby database disconnect from session;
, 到这里,备用数据库配置完成。
1.3 验证所建立的备用数据库
, 在备用数据库上,查看存在的归档日志:
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
, 在主数据库上,归档当前日志:
ALTER SYSTEM ARCHIVE LOG CURRENT;
, 在备用数据库上,查看是否已经接受到归档日志:
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
, 在备用数据库上,查看归档日志是否被应用:
SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
第2章 物理备用数据库的管理
启动和关闭物理备用数据库
以只读模式打开备用数据库
管理主数据库上影响备用数据库的事件
2.1 启动和关闭物理备用数据库
2.1.1 启动物理备用数据库
, 启动数据库到mount状态:
SQL>
startup mount;
, 启动Redo应用:
SQL>
alter database recover managed standby database disconnect from session;
2.1.2 关闭物理备用数据库
, 关闭Redo应用:
SQL>
11/16
物理备用数据库的配置与维护
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
, 关闭备用数据库:
SQL>
SHUTDOWN IMMEDIATE;
2.2 备用数据库只读模式
备用数据库在只读模式下,可以接受到由主数据库传送来的Redo数据,但日志文件不会被应用。 在只读模式下,可以对备用数据库进行查询操作,以完成一些报表工作从而减轻主数据库的压力,也可以由此判断数据同步的正确性。
2.2.1 以只读模式打开备用数据库:
, 当前数据库为Shutdown状态时:
SQL>
STARTUP;
备用数据库会自己判断将数据库启动到只读模式。
, 在备用数据库在Redo应用状态时:
终止Redo应用:
SQL>
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
打开数据库到只读模式:
SQL>
ALTER DATABASE OPEN;
2.2.2 将备用数据库由只读模式切换到Redo应用模式
SQL>
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
2.3 管理主数据库上影响备用数据库的事件
2.3.1 添加数据文件或建立表空间
, 备用数据库使用文件系统,参数STANDBY_FILE_MANAGEMENT设置为AUTO
备用数据库会自动建立相应的数据文件或表空间
, 备用数据库使用裸设备,参数STANDBY_FILE_MANAGEMENT设置为AUTO
12/16
物理备用数据库的配置与维护
需要在添加数据文件或建立表空间之前在备用数据库上建立好与主数据库相同的裸设备文件(lv) 例如,我们要向USERS表空间中添加大小为1G数据文件/dev/ruser02(假定在所有主机上的卷组德PP SIZE都为256M):
在所有主数据库上建立大小为1G的lv
#
mklv -y user02 -T O -w n -s n -r n oravg1 4
在所有备用数据库上建立大小为1G的lv
#
mklv -y user02 -T O -w n -s n -r n oravg 4 在所有主机上修改/dev/ruser02的权限:
#
chown oracle:oinstall /dev/ruser02 在主数据库上添加该数据文件,并切换日志使得备用数据库上能够立即响应: SQL>
ALTER TABLESPACE "USERS" ADD DATAFILE '/dev/ruser02' SIZE 1023M;
ALTER SYSTEM SWITCH LOGFILE;(在主数据库的两个实例上都执行)
在备用数据库的告警日志(/oracle/admin/dlds/bdump/ alert_dldsbf.log)中,可以看到下面的信息表明数据文件在备用数据库上添加成功:
WARNING: File being created with same name as in Primary
Existing file may be overwritten
Fri Oct 19 09:51:27 2007
Recovery created file /dev/ruser02
Successfully added datafile 100 to media recovery
Datafile #100: '/dev/ruser02'
2.3.2 删除表空间或数据文件
, 使用DROP TABLESPACE INCLUDING CONTENTS AND DATAFILES命令删除表空间,要求STANDBY_FILE_MANAGEMENT参数必须设置为AUTO:
例如:
SQL>
DROP TABLESPACE INCLUDING CONTENTS AND DATAFILES tbs_4;
ALTER SYSTEM SWITCH LOGFILE;
13/16
物理备用数据库的配置与维护
2.3.3 数据文件重命名
, 将数据文件所在的表空间OFFLINE
SQL> ALTER TABLESPACE USERS OFFLINE;
, 在所有主机上建立新的lv,db_users01
mklv -y db_users01 -T O -w n -s n -r n oravg1 4
mklv -y db_users01 -T O -w n -s n -r n oravg 4 , 在主数据库上复制user02的内容到db_users01
dd if=/dev/ruser02 of=/dev/rdb_users01 bs=256k , 在主数据库上将数据文件改名,并将表空间online
SQL>
ALTER TABLESPACE USERS RENAME DATAFILE '/dev/ruser02' TO '/dev/rdb_users01';
ALTER TABLESPACE USERS ONLINE;
, 连接到备用数据库上并将Redo应用终止
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; , 停止备用数据库
SQL> SHUTDOWN;
, 复制备用数据库上的数据文件
dd if=/dev/ruser02 of=/dev/rdb_users01 bs=256k , 启动备用数据库到mount
SQL>
STARTUP MOUNT;
, 在备用数据库上将数据文件改名
SQL>
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=MANUAL;
ALTER DATABASE RENAME FILE '/dev/ruser02' TO '/dev/rdb_users01';
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO; , 启动Redo应用进程
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
2.3.4 执行一个带有NOLOGGING 或UNRECOVERABLE子句的操作 , Oracle推荐使用FORCE LOGGING数据库模式来避免由此带来的主数据库与备用数据库数据不同步
的问题。
14/16
物理备用数据库的配置与维护
2.4 主数据库与备用数据库监控与维护
, 查看数据库的告警日志,来确定数据库是否发生过问题。
数据库告警日志的目录是由数据库的初始化参数show parameter background_dump_dest来确定的,可以在通过下面的命令来查询:
SQL>
show parameter background_dump_dest NAME TYPE VALUE ------------------------------------ ----------- ------------------------------
background_dump_dest string /oracle/admin/dlds/bdump
数据库告警日志的名称为alert_{数据库sid}.log
, 查询当前备用数据库运行状态:
SQL>
select open_mode,PROTECTION_MODE from v$database;
例如:
备用数据库为最大保护模式,并以只读方式打开:
OPEN_MODE PROTECTION_MODE
---------- --------------------
READ ONLY MAXIMUM PERFORMANCE
备用数据库为最大保护模式,并数据库处于mount状态:
OPEN_MODE PROTECTION_MODE
---------- --------------------
MOUNTED MAXIMUM PERFORMANCE
, 查询日志传输是否有错误,查看Error列是否有错误输出:
SQL>
col "ID" format 99
col "Archive_dest" format a25
col "Error" format a25
SELECT DEST_ID "ID",
STATUS "DB_status",
DESTINATION "Archive_dest",
ERROR "Error"
FROM V$ARCHIVE_DEST WHERE DEST_ID <=5;
15/16
物理备用数据库的配置与维护
2.5 归档日志的删除
因为如果归档日志所在的文件系统使用率达到100%,就会导致数据库的挂起。所以需要我们定期清理
不需要的归档日志。
, 主数据库的归档日志的删除
通过备份软件来实现,备份软件备份归档日志后会将已经备份的归档日志删除。
, 备用数据库的归档日志的删除
通过编写脚本定期删除日志,并添加到系统的crontab中,例: 脚本说明:删除当前系统时间4天前的所有归档日志 脚本路径:/oracle/scripts/ rmarc.sh
su - oracle "-c
rman target / <
/dev/null 2>/dev/null
16/16