1、概念
物理备份是找出那些已经分配,使用的数据页,拷贝并保存到备份集中。物理还原时物理备份的逆过程,一般通过DMRMAN工具或者SQL语句,把备份集中的数据内容(数据文件,数据页,归档文件)重新拷贝,写入目标文件。
联机备份还原:数据库处于运行状态时,提供备份还原操作。
脱机备份还原:数据库处于关闭状态时执行的还原操作。库备份、表空间备份和归档备份可以执行脱机还原。脱机还原操作的目标库必须处于关闭状态。
备份集:用来存放备份过程中产生的备份数据及备份信息。
2、配置归档
2.1联机配置归档
修改数据库为 Mount 状态
ALTER DATABASE MOUNT;
开启归档模式
ALTER DATABASE ARCHIVELOG;
配置本地归档
ALTER DATABASE ADD ARCHIVELOG 'DEST = /home/dm_arch/arch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048';
修改数据库为 Open 状态
ALTER DATABASE OPEN;
2.2手动配置归档
关闭数据库,修改dm.ini
ARCH_INI=1
创建dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dm_arch/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
注意:联机备份是,关闭已配置的本地归档再打开,会造成归档文件部分文件丢失,备份前需调用[checkpoint(100)]命令主动刷新检查点
3、联机备份还原
3.1数据备份
3.1.1手动备份
1、数据库备份
进入disql命令行
全备:BACKUP DATABASE FULL BACKUPSET '/opt/dmdbms/BAK/db_full_bak_01';
备份集:/opt/dmdbms/BAK/db_full_bak_01
设置备份名:BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET '/home/dm_bak/db_bak_3_02';
添加备份描述:BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_04' BACKUPINFO '完全备份';
限制备份大小(最大300M):BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_05' MAXPIECESIZE 300;
备份压缩(级别为5,0-9):BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_06' COMPRESSED LEVEL 5;
设置并行备份:BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_07' PARALLEL 8;
2、表空间备份
BACKUP TABLESPACE MAIN BACKUPSET 'ts_bak_01';
增量备份指定基备份路径:
以增量备份用户 MAIN 表空间为例,指定 BASE ON BACKUPSET 参数执行增量备份
BACKUP TABLESPACE MAIN BACKUPSET 'ts_full_bak_01';
BACKUP TABLESPACE MAIN INCREMENT BACKUPSET 'ts_increment_bak_01';
BACKUP TABLESPACE MAIN INCREMENT BASE ON BACKUPSET'ts_full_bak_01' BACKUPSET 'ts_increment_bak_02';
完全备份:BACKUP TABLESPACE MAIN FULL BACKUPSET '/home/dm_bak/ts_full_bak_01';
增量备份:BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/home/dm_bak' BACKUPSET '/home/dm_bak/ts_increment_bak_02';
3、表备份
备份表不需要服务器配置归档
BACKUP TABLE TAB_01 BACKUPSET 'tab_bak_01';
##备份集“tab_bak_01”会生成到默认的备份路径下
4、归档备份
必须配置归档
BACKUP ARCHIVE LOG ALL BACKUPSET 'arch_bak_01';
3.1.2定时备份
代理-作业-新建作业
3.2管理备份
3.2.1备份目录管理
添加备份目录:SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
删除备份目录:SELECT SF_BAKSET_BACKUP_DIR_REMOVE('DISK','/home/dm_bak');
清除全部备份目录:SELECT SF_BAKSET_BACKUP_DIR_REMOVE_ALL();
3.2.2备份集校验与删除
备份集校验:SELECT SF_BAKSET_CHECK ('DISK','/home/dm_bak/db_bak_for_check');
备份集删除:
--删除指定设备类型和指定备份集目录地备份集
SF_BAKSET_REMOVE
--批量删除满足指定条件的所有备份集
SF_BAKSET_REMOVE_BATCH
--批量删除指定时间之前的数据库备份集
SP_DB_BAKSET_REMOVE_BATCH
--批量删除指定表空间对象及指定时间之前的表空间备份集
SP_TS_BAKSET_REMOVE_BATCH
--批量删除指定表对象及指定时间之前的表备份集。
SP_TAB_BAKSET_REMOVE_BATCH
--批量删除指定时间之前的归档备份集。
SP_ARCH_BAKSET_REMOVE_BATCH
3.3数据还原
表还原:RESTORE TABLE TAB_01 FROM BACKUPSET 'tab_bak_01';
数据库与表空间还原必须通过脱机还原
3.4.管理工具进行联机备份还原
4、脱机备份与还原
DMRMAA:脱机备份还原命令行工具,退出:exit
以下操作需要脱机状态,进入命令行操作:./dmrman
4.1数据备份
数据库完全备份:BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini ' FULL BACKUPSET '/home/dm_bak/db_full_bak_01';
增量备份:BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/home/dm_bak'BACKUPSET '/home/dm_bak/db_increment_bak_02';
归档备份:
要求先设置归档
BACKUP ARCHIVE LOG ALL DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/home/dm_bak/arch_all_bak_01';
4.2备份管理
查看单个备份集信息(SHOW)
RMAN> show backupset '/home/test/yy/dm_bak/db_full_bak_01'
查看多个备份集信息
RMAN>SHOW BACKUPSETS WITH BACKUPDIR '/home/dm_bak1','/home/dm_bak2';
备份集校验(CHECK):CHECK BACKUPSET '/home/dmbak/dbbakforcheck01';
备份集删除(REMOVE):REMOVE BACKUPSET '/home/dm_bak/db_bak_for_remove_01'
备份集导出(LOAD):
[root@192 debug]#export TAPE=/dev/nst0
[root@192 debug]#echo $TAPE /dev/nst0
启动 dmrman,再次执行
[root@192 debug]# ./dmrman
RMAN>LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir';
备份集映射文件导出(DUMP):
导出备份集中数据文件的原始路径
RMAN>DUMP BACKUPSET'/mnt/dmsrc/db_bak'DEVICE TYPE DISK MAPPED FILE '/mnt/dmsrc/db_bak_mapped.txt';
指定 ini_path,导出调整后的数据文件路径到映射文件:
RMAN>DUMP BACKUPSET'/mnt/dmsrc/db_bak'DEVICE TYPE DISK DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
MAPPED FILE '/mnt/dmsrc/db_bak_mapped.txt';
4.3数据还原恢复
4.3.1数据库还原和恢复
1、数据还原(RESTORE)
联机备份数据库,保证数据库运行在归档模式及 OPEN 状态;
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
##准备目标库。还原目标库可以是已经存在的数据库,也可使用 dminit 工具初始化一个新库。如下所示:
./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE SYSDBA_PWD=****** SYSAUDITOR_PWD=******
校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;
RMAN>CHECK BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
还原数据库。启动 DMRMAN,输入以下命令:
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM
BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
2、数据库恢复(RECOVER)
从备份集恢复:
执行还原数据库的命令之后,可以直接执行恢复数据库的命令,如下:
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_backupset';
从归档恢复:
通过使用 WITH ARCHIVEDIR 关键字进行归档恢复,如下:
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH ARCHIVEDIR'/home/dm_arch/arch'
3、数据库更新
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC;
4.3.2表空间还原和恢复
1、表空间还原
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/home/dm_bak/ts_full_bak_for_restore';
注意:表空间还原的目标库只能是备份集产生的源库,否则将报错
2、表空间恢复
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RECOVER/dm.ini' TABLESPACE MAIN;
4.3.3归档还原与修复
1、归档还原
还原归档。启动 DMRMAN,设置 OVERWRITE 为 2,如果归档文件已存在,会报错。
1、指定还原的目标归档日志目录:
RMAN>RESTORE ARCHIVE LOG FROM BACKUPSET '/home/dm_bak/arch_all_for_restore' TO ARCHIVEDIR'/opt/dmdbms/data/DAMENG_FOR_RESTORE/arch_dest' OVERWRITE 2;
2、指定还原目标库的 dm.ini 文件路径:
RMAN>RESTORE ARCHIVE LOG FROM BACKUPSET '/home/dm_bak/arch_all_for_restore' TO DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' OVERWRITE 2;
2、归档修复
单机环境下,确保目标库已经停止工作后,执行归档修复;
RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/data/dm.ini';
DSC 环境下,需要每个节点停止工作后,每个节点独立执行修复操作;
对于两节点 DSC01、DSC02 执行修复如下:
RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/dsc/dm01.ini';
RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/dsc/dm02.ini'
4.4控制台工具进行脱机备份
DM控制台工具CONSOLE来执行脱机的备份与还原操作
dmdba用户启动工具,/tool/manager
5、举例
5.1联机数据库备份与还原
创建一个实例
./dminit path=/dmdata/data PAGE_SIZE=32 EXTENT_SIZE=32 DB_NAME=DMTEST INSTANCE_NAME=DMTEST PORT_NUM=5237 SYSDBA_PWD=199624xHx SYSAUDITOR_PWD=199624xHx
修改dm.ini
ARCH_INI=1
创建dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
启动服务
./dmserver /dmdata/data/DMTEST/dm.ini
进入disql
./disql SYSDBA/199624xHx@localhost:5237
创建users数据表
create table users (id int,name varchar(10));
全量备份数据库
BACKUP DATABASE FULL BACKUPSET '/dmdata/dmbak/db_full_bak_01';
新建数据库DMTEST01,端口5238
./dminit path=/dmdata/data PAGE_SIZE=32 EXTENT_SIZE=32 DB_NAME=DMTEST01 INSTANCE_NAME=DMTEST01 PORT_NUM=5238 SYSDBA_PWD=199624xHx SYSAUDITOR_PWD=199624xHx
还原
./dmrman
校验备份
CHECK BACKUPSET '/dmdata/dmbak/db_full_bak_01';
还原数据库
RESTORE DATABASE '/dmdata/data/DMTEST01/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_01';
恢复数据库
RECOVER DATABASE '/dmdata/data/DMTEST01/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_01';
数据库更新
RECOVER DATABASE '/dmdata/data/DMTEST01/dm.ini' UPDATE DB_MAGIC;
启动服务DMTEST01
/home/dmdba/dmdbms/bin/dmserver /dmdata/data/DMTEST01/dm.ini
进入disql,DMTEST01
./disql SYSDBA/199624xHx@localhost:5238
验证成功
5.2联机表空间和表备份与还原
启动服务
/home/dmdba/dmdbms/bin/dmserver /dmdata/data/DMTEST/dm.ini
进入disql
./disql SYSDBA/199624xHx@localhost:5237
插入一条数据
insert into users(id,name) values (1,'哈哈哈');
全量表空间备份
BACKUP TABLESPACE MAIN BACKUPSET '/dmdata/dmbak/ts_full_bak_01';
表备份
BACKUP TABLE users BACKUPSET '/dmdata/dmbak/tab_bak_01';
表还原
在disql执行:
TRUNCATE table users; 清除users数据
RESTORE TABLE users FROM BACKUPSET '/dmdata/dmbak/tab_bak_01';
表空间还原,进入dmrman
./dmrman
还原表空间
RESTORE DATABASE '/dmdata/data/DMTEST/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/dmdata/dmbak/ts_full_bak_01';
表空间恢复
RECOVER DATABASE '/dmdata/data/DMTEST/dm.ini' TABLESPACE MAIN;
再次启动服务,进入disql,验证成功
5.3脱机数据库备份与还原
进入DMTEST01删除users
drop table users;
退出disql,关闭服务
进入dmrman
脱机备份
BACKUP DATABASE '/dmdata/data/DMTEST/dm.ini' FULL BACKUPSET '/dmdata/dmbak/db_full_bak_02';
校验备份
CHECK BACKUPSET '/dmdata/dmbak/db_full_bak_02';
还原数据库
RESTORE DATABASE '/dmdata/data/DMTEST01/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_02';
恢复数据库
RECOVER DATABASE '/dmdata/data/DMTEST01/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_02';
数据库更新
RECOVER DATABASE '/dmdata/data/DMTEST01/dm.ini' UPDATE DB_MAGIC;
启动DMTEST01服务,进入disql,验证成功
6、总结
1.表空间和表的还原只能在源库,数据库的备份可以应用到不同机器之间进行数据还原。
2.备份分为全量备份和增量备份,首次备份可以全量备份,后续可以增量备份
热备份与数据库状态的关系
部署架构 | 状态 | 使用限制 |
单实例 | open | 支持所有备份类型 |
mount | 支持归档备份 | |
主备 | primary | 支持所有备份类型 |
standby | 支持库级,表空间级,归档备份,DDL_CLONE | |
DSC | open | 支持库备份,表空间备份,表备份 |
DM8物理备份恢复支持情况
DSC备份:dmrman dcr_ini=/home/dmdba/dmdcr.ini