数据库备份是日常工作最重要的工作之一,数据库备份是为了在数据库发生故障时,通过备份还原,将数据库恢复到可用状态
DM8支持三种方式的备份:逻辑备份、使用联机SQL命令进行备份、DMRMAN工具的备份
在进行备份操作前,先说一些基本概念
数据备份
库备份:备份整个库,拷贝数据库中所有有效数据页如果是联机备份,还会拷贝归档日志
表空间备份:只支持联机状态下进行
表备份:只支持联机状态下进行,一次备份操作只能备份一张表,不支持增量
归档日志备份:既可以联机也可以停机
一致性备份和非一致性备份
一致性备份包含了完整的数据文件和归档日志信息,不指定without log参数即为一致性备份,脱机备份会将检查点之后的redo log拷贝到备份集,因此,脱机备份一定是一致性备份
非一致性备份,只包含了数据文件,没有归档日志,利用非一致性备份的库无法正常启动,必须依靠归档日志。表空间备份、指定了without log参数的联机备份一定是非一致性备份
数据库还原
联机还原:表还原可以在联机状态下进行
脱机还原:是指在数据库关闭状态下,通过dmrman进行还原。
根据备份集类型,数据库还原可以分为库还原、表空间还原和表还原。库和表空间还原必须处于脱机状态下
还原的表空间不能是TEMP表空间
还原原理
还原时,既可以还原到指定的新目录,也可以还原到一个已经存在的库
步骤包括:清理目标库环境;重建数据库文件;拷贝数据页;重建redo log;重置目标库;修改配置参数
一、清理目标库环境:如果指定已经存在的库作为还原目标,首先解析dm.ini获取dm.ctl控制文件路径,删除控制文件中的数据文件,然后根据OVERWRITE选项,如果待还原文件存在,则删除;如果不指定OVERWRITE选项,则会报错;但是会保留目标库中的日志文件、控制文件等
二、重建数据库文件:如果还原到一个已经存在的库,需要指定目标数据库的dm.ini路径作为还原参数,还原过程中会重新创建数据文件,并将相关信息写入到dm.ctl控制文件;如果还原到指定目录,则会在对应目录生成新的dm.ini文件,设置CTL_PATH、SYSTEM_PATHA指向这个新目录,并在这个目录下生成新的控制文件。DMDSC目前不支持还原到新目录
数据文件重建策略:
1)目标库和备份集中的SYSTEM_PATH路径相同,则按照备份集中记录的原始路径创建文件
2)目标库和备份集中的SYSTEM_PATH路径不同,默认在目标库的SYSTEM_PATH目录下创建文件
三、重建redo log:所有库配置文件均认为在指定目录下
四、拷贝数据页:拷贝数据页到指定的目录,由于备份过程中只备份了有效的数据页,空的数据页并没有备份
五、重置目标库:包括
1)更新日志信息,设置当前的CKPT_LSN为备份集中的BEGIN_LSN,并设置日志文件状态为INACTIVE;
2)更新DB_MAGIC,还原后,库中的PERMANENT_MAGIC仍与备份集中的相同
注:SELECT PERMANENT_MAGIC;
SELECT DB_MAGIC FROM V$RLOG;
PERMANENT_MAGIC:永久魔数
DB_MAGIC:数据库魔数,在还原后会变化
3)设置还原标志,标识当前库为指定还原的库,不允许使用
4)更新目标库中的dm.ctl控制文件,把当前库中的数据文件信息记录到控制文件,使用备份集中的秘钥生成新的秘钥文件
六、修改配置参数:
还原到指定库时,默认会保留目标库的配置参数不变,也可以指定REUSE DMINI使用备份集中的dm.ini替换原来的dm.ini文件。还原到指定目录时,生成新的dm.ini文件
表空间还原
表空间还原只可以在脱机状态下进行。通过dmrman执行。如果还原后表空间状态为RES_OFFLINE,表明表空间已经还原,但是数据不完整
查询表空间方式:
select * from dba_data_files;
select * from v$datafile;
select * from v$tablespace;查询的结果中status的取值为int类型
0:ONLIE 1:OFFLINE 2:RES_OFFLINE 3:CORRUPT
注意事项:
1)指定dm.ini必须存在,其中的CTL_PATH必须配置且必须有效
2)若指定目录还原,则指定目录作为数据库的系统目录
3)对于增量备份的还原,需要搜集完整的备份集链表,从前到后,逐个还原备份集。鉴于增量备份的BEGIN_LSN确定规则,不需要重做归档日志
redo log与archive log
redo日志:初始化时就产生,两个,默认大小256M,可选范围为256M——2048M
如果业务变动较为频繁,建议设置2048M,即2G
可以查询v$parameter视图中 LOG_POOL_SIZE
初始化时可以指定大小
./dminit path= page_size=16 log_size=2048
在线修改大小
ALTER DATABASE RESIZE LOGFILE 'LOG1.LOG' to 2048;
ALTER DATABASE RESIZE LOGFILE 'LOG2.LOG' to 2048;
ALTER DATABASE RESIZE LOGFILE 'LOG3.LOG' to 2048;
注意:只能调大,不能调小
archive 日志:默认不开启。生产环境建议开启归档
归档日志文件大小建议和redo log大小设置成一样。归档日志建议单独存放在一块磁盘上
查询归档配置
select * from v$dm_arch_ini;
查询归档状态
select * from v$arch_status;
在线开启方式
alter database mount;
alter database add archivelog 'dest=/dm8/arch,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=0'
alter database archivelog;
alter database open;
也可以修改dm.ini文件中的ARCH_INI值为1
并在数据文件路径下添加dmarch.ini文件
dmarch.ini配置文件
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmarch/ #本地归档文件存放路径
ARCH_FILE_SIZE = 2048 #单位 MB,本地单个归档文件最大值