- 打开归档
方法一:
alter database mount;
alter database archivelog;
alter database add archivelog 'dest=/opt/dmdbms/data/DAMENG/arch,type=local,file_size=1024,space_limit=2048';
Alter database open;
方法二:
修改配置文件
vim dm.ini
ARCH_INI = 1
vim dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /home/dmdba/dmdbms/data/DAMENG/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
重启数据库
- DIsql备份
- 备份数据库
备份命令
BACKUP DATABASE [[[FULL] [DDL_CLONE]]| INCREMENT [CUMULATIVE][WITH BACKUPDIR '<
基备份搜索目录>'{,'<基备份搜索目录>'}]|[BASE ON BACKUPSET '<基备份目录>']][TO <备份
名>][BACKUPSET '<备份集路径>']
[DEVICE TYPE <介质类型> [PARMS '<介质参数>']]
[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>]
[IDENTIFIED BY <密码>|”<密码>” [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]] [WITHOUT LOG]
[TRACE FILE '<TRACE 文件名>'] [TRACE LEVEL <TRACE 日志级别>]
[TASK THREAD <线程数>][PARALLEL [<并行数>] [READ SIZE <拆分块大小>]];
最简单的
SQL>backup database;
指定路径
SQL> backup database backupset 'db_bak_01';
指定备份集名称
backup database to test_bak_name;
指定备份片大小
backup database to test_bak_size_02 maxpiecesize 50;
指定并行度
backup database to test_bak_size_03 maxpiecesize 40 parallel 4;
基于db_bak_01完成增量备份
SQL> backup database increment with backupdir '/home/dmdba/dmdbms/data/DAMENG/bak/db_bak_01' backupset '/home/dmdba/dmdbms/data/DAMENG/bak/db_bak_01_incre';
-
- 备份表空间
备份命令
BACKUP TABLESPACE <表空间名> [FULL | INCREMENT [CUMULATIVE][WITH BACKUPDIR '<基
备份搜索目录>'{,'<基备份搜索目录>'}]| [BASE ON BACKUPSET '<基备份集目录>']][TO <备份
名>] [BACKUPSET '<备份集路径>']
[DEVICE TYPE <介质类型> [PARMS '<介质参数>']]
[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>]
[IDENTIFIED BY <密码>|”<密码>” [WITH ENCRYPTION<TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]]
[TRACE FILE '<TRACE 文件名>'] [TRACE LEVEL <TRACE 日志级别>]
[TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]];
与库备份相同
-
- 备份表
备份命令
BACKUP TABLE <表名>
[TO <备份名>] [BACKUPSET '<备份集路径>'] [DEVICE TYPE <介质类型> [PARMS '<介质参数>']]
[BACKUPINFO '<备份描述>']
[MAXPIECESIZE <备份片限制大小>]
[IDENTIFIED BY <密码>|”<密码>” [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]]
[TRACE FILE '<TRACE 文件名>'] [TRACE LEVEL <TRACE 日志级别>];
-
- 备份归档日志
备份命令
BACKUP <ARCHIVE LOG |ARCHIVELOG>
[ALL | [FROM LSN <lsn>]| [UNTIL LSN <lsn>]|[LSN BETWEEN <lsn> AND <lsn>] | [FROM
TIME '<time>']|[UNTIL TIME '<time>']|[TIME BETWEEN'<time>'> AND '<time>'
]][<notBackedUpSpec>][DELETE INPUT]
[TO <备份名>][<备份集子句>];
<备份集子句>::=BACKUPSET ['<备份集路径>'][DEVICE TYPE <介质类型> [PARMS '<介质参数>']]
[BACKUPINFO '<备份描述>']
[MAXPIECESIZE <备份片限制大小>]
[IDENTIFIED BY <密码>|”<密码>” [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]]
[WITHOUT LOG]
[TRACE FILE '<TRACE 文件名>'] [TRACE LEVEL <TRACE 日志级别>]
[TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]]
<notBackedUpSpec>::=NOT BACKED UP [<num> TIMES]|[SINCE TIME '<datetime_string>']
备份某个时间段内的日志
backup archivelog time between '2022-03-08 09:00:00' and '2022-03-08 10:05';
-
- 打开trace
backup database trace level 2;
- DIsql备份管理
- 备份集操作
对备份集进行校验
sf_bakset_check('DISK','db_bak_01');
删除备份集
sf_bakset_remove('DISK','DB_DAMENG_FULL_20220308_115724_805299');
sf_bakset_remove('DISK','db_bak_01',1); --1 代表级联删除,将删除对应的增量备份
删除指定条件的备份集
SF_BAKSET_REMOVE_BATCH (
device_type varchar,
end_time datetime,
range int, --1 代表库级,2 代表表空间级,3 代表表级,4 代表归档备份
obj_name varchar(257) --待删除备份集中备份对象的名称,仅表空间级和表级有效
)
例:SQL>sf_DB_BAKSET_REMOVE_BATCH('DISK', NOW(),null,null);
SP_DB_BAKSET_REMOVE_BATCH (
device_type varchar, end_time datetime
)--库级
SP_TS_BAKSET_REMOVE_BATCH (
device_type varchar, end_time datetime, ts_name varchar(128)
) --表空间级
SP_TAB_BAKSET_REMOVE_BATCH (
device_type varchar, end_time datetime,
sch_name varchar(128), tab_name varchar(128)
) --表级
SP_ARCH_BAKSET_REMOVE_BATCH (
device_type varchar, end_time datetime
) --归档日志
-
- 备份集查看
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');
--添加备份集目录,如不添加,则只显示默认目录下的
SQL>SELECT SF_BAKSET_BACKUP_DIR_REMOVE(); ----删除内存中指定的备份目录
SQL>SELECT SF_BAKSET_BACKUP_DIR_REMOVE_ALL(); --删除内存中全部的备份目录
SQL> select * from v$backupset; --查看所有备份集
SQL> select * from v$backupset; -- 显示备份集的数据库相关信息
SQL> select * from v$backupset_arch; --显示备份集中归档文件的信息
SQL> select * from v$backupset_bkp; --显示备份集的备份片信息
SQL> select * from v$backupset_search_dirs; --显示备份搜索路径
SQL> select * from v$backupset_table; --显示备份集的备份表信息
SQL> select * from v$backupset_subs; --显示并行备份中生成的子备份集信息
-
- 备份监控
V$BACKUP_MONITOR 显示当前备份任务实时监控信息
V$BACKUP_FILES 显示当前备份任务待备份数据文件列表
V$BACKUP_HISTORY 显示最近 100 条备份监控信息,可以查看备份时长,读写速度
- DIsql还原
- 表还原
RESTORE TABLE [<表名>] [STRUCT] [KEEP TRXID]
FROM BACKUPSET'<备份集路径>' [DEVICE TYPE <介质类型> [PARMS '<介质参数>']]
[IDENTIFIED BY <密码>|”<密码>” [ENCRYPT WITH <加密算法>]]
[TRACE FILE '<TRACE 文件名>'] [TRACE LEVEL <TRACE 日志级别>];
表还原之后不需要恢复操作。DIsql中就可以完成。
不能从库级或表空间级的备份中还原,只能从对应的表备份中还原
如果这个表已经不存在,需要先还原表结构,再进行表数据库还原
SQL> restore table production.pronew from backupset 'TAB_PRONEW_BTREE_20220310_114821_794631';
restore table production.pronew from backupset 'TAB_PRONEW_BTREE_20220310_114821_794631';
[-2106]:Error in line: 1
Invalid table or view name [PRONEW].
used time: 0.252(ms). Execute id is 0.
SQL> restore table struct from backupset 'TAB_PRONEW_BTREE_20220310_114821_794631';
executed successfully
used time: 25.016(ms). Execute id is 812.
SQL> restore table production.pronew from backupset 'TAB_PRONEW_BTREE_20220310_114821_794631';
executed successfully
used time: 539.813(ms). Execute id is 813.
如果有二级索引,需要先带struct进行还原,且还原后二级索引消失,再进行表还原
SQL> select owner,index_name,status,num_rows from dba_indexes where table_name='PRONEW';
LINEID OWNER INDEX_NAME STATUS NUM_ROWS
---------- ---------- ------------- ------ --------
1 SCOTT INDEX33555597 VALID NULL
2 PRODUCTION INDEX33555629 VALID NULL
used time: 6.775(ms). Execute id is 837.
SQL> create index ind_pronew_name on production.pronew(name);
executed successfully
used time: 95.579(ms). Execute id is 838.
SQL> select owner,index_name,status,num_rows from dba_indexes where table_name='PRONEW';
LINEID OWNER INDEX_NAME STATUS NUM_ROWS
---------- ---------- --------------- ------ --------
1 SCOTT INDEX33555597 VALID NULL
2 PRODUCTION INDEX33555629 VALID NULL
3 PRODUCTION IND_PRONEW_NAME VALID NULL
SQL> restore table production.pronew from backupset 'TAB_PRONEW_BTREE_20220310_114821_794631';
restore table production.pronew from backupset 'TAB_PRONEW_BTREE_20220310_114821_794631';
[-8327]:the table to be restored has secondary indexes or extra constraints.
used time: 8.100(ms). Execute id is 0.
SQL> restore table production.pronew struct from backupset 'TAB_PRONEW_BTREE_20220310_114821_794631';
executed successfully
used time: 19.741(ms). Execute id is 846.
SQL> select owner,index_name,status,num_rows from dba_indexes where table_name='PRONEW';
LINEID OWNER INDEX_NAME STATUS NUM_ROWS
---------- ---------- ------------- ------ --------
1 SCOTT INDEX33555597 VALID NULL
2 PRODUCTION INDEX33555629 VALID NULL
used time: 6.944(ms). Execute id is 847.SQL> restore table production.pronew from backupset 'TAB_PRONEW_BTREE_20220310_114821_794631';
executed successfully
used time: 469.777(ms). Execute id is 855.
- DMRMAN备份
- 配置
CONFIGURE |
CONFIGURE CLEAR |
CONFIGURE DEFAULT <sub_conf_stmt>
<sub_conf_stmt>::=
DEVICE [[TYPE <介质类型> [PARMS '<介质参数>']]|CLEAR] |
TRACE [[FILE '<跟踪日志文件路径>'][TRACE LEVEL <跟踪日志等级>]|CLEAR] |
BACKUPDIR [[ADD|DELETE] '<基备份搜索目录>'{,'<基备份搜索目录>' }|CLEAR] |
ARCHIVEDIR [[ADD|DELETE] '<归档日志目录>'{,'<归档日志目录>'}|CLEAR]
配置备份集搜集目录
备份集搜索目录用于增量备份还原中搜索基备份。如果不指定备份集搜集目录只会在库的默认备份目录和 当前备份执行备份集目录的上级目录下搜索备份集。
RMAN>CONFIGURE DEFAULT BACKUPDIR;
RMAN>CONFIGURE DEFAULT BACKUPDIR '/home/dm_bak1’,'/home/dm_bak2';
增加或删除部分备份集搜索目录
RMAN>CONFIGURE DEFAULT BACKUPDIR ADD '/home/dm_bak3';
RMAN>CONFIGURE DEFAULT BACKUPDIR DELETE '/home/dm_bak3';
配置归档日志搜集目录
归档日志搜索目录用于增量备份还原中搜索归档日志。
RMAN>CONFIGURE DEFAULT ARCHIVEDIR;
RMAN>CONFIGURE DEFAULT ARCHIVEDIR '/home/dm_arch1’,'/home/dm_arch2';
增加或删除部分归档日志搜索目录
RMAN>CONFIGURE DEFAULT ARCHIVEDIR ADD '/home/dm_arch3';
RMAN>CONFIGURE DEFAULT ARCHIVEDIR DELETE '/home/dm_arch3';
-
- 备份
使用控制文件进行备份
/dmrman CTLFILE=/home/dm_cmd/cmd_rman.txt
使用控制命令进行备份
/dmrman CTLSTMT="BACKUP DATABASE'/opt/dmdbms/data/DAMENG/dm.ini';"
脱机备份数据库
RMAN>BACKUP DATABASE'/opt/dmdbms/data/DAMENG/dm.ini';
BACKUP DATABASE '<INI 文件路径 >' [[[FULL][DDL_CLONE]] |INCREMENT
[CUMULATIVE][WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}]|[BASE ON
BACKUPSET '<基备份集目录>']]
[TO <备份名>] [BACKUPSET '<备份集路径>'][DEVICE TYPE <介质类型>[PARMS '<介质参数>']
[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>]
[IDENTIFIED BY <密码>|”<密码>” [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]][WITHOUT LOG]
[TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]];
--DDL_CLONE:数据库克隆。该参数只能用于完全备份中,表示仅拷贝所有的元数据不
拷贝数据。如对于数据库中的表来说,只备份表的定义不备份表中数据
脱机备份归档日志
BACKUP<ARCHIVE LOG | ARCHIVELOG>
[ALL | [FROM LSN <lsn>]|[UNTIL LSN <lsn>] | [LSN BETWEEN < lsn> AND < lsn>] |
[FROM TIME '<time>'] | [UNTIL TIME '<time>'] | [TIME BETWEEN '<time>' AND
'<time>']] [<notBackedUpSpec>][DELETE INPUT]
DATABASE '<INI 文件路径>'
[TO <备份名>][<备份集子句>];
<备份集子句>::= [BACKUPSET '<备份集路径>'] [DEVICE TYPE <介质类型>[PARMS '<介质参数>']
[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>]
[IDENTIFIED BY <密码>|”<密码>” [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]][TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE
<拆分块大小>]]
- DMRMAN备份管理
- 备份集查看
SHOW BACKUPSET '< 备份集目录 >' [<device_type_stmt>][RECURSIVE]
[<database_bakdir_lst_stmt>] [<info_type_stmt>] [<to_file_stmt>]; |
SHOW BACKUPSETS [<device_type_stmt>] <database_bakdir_lst_stmt>
[<info_type_stmt>] [<use_db_magic_stmt>] [<to_file_stmt>];
<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>']
<database_bakdir_lst_stmt>::= DATABASE '<INI_PATH>' |
WITH BACKUPDIR '<备份集搜索目录>'{,'<备份集搜索目录>'} |
DATABASE '<INI_PATH>' WITH BACKUPDIR '<备份集搜索目录>'{, '<备份集搜索目录>'}
<info_type_stmt>::= INFO <信息类型>
<use_db_magic_stmt>::= USE DB_MAGIC <db_magic>
<to_file_stmt>::= TO '<输出文件路径>' [FORMAT TXT | XML]
例:show backupset '/home/dmdba/dmdbms/data/DAMENG/bak/full_db_01';
查看指定目录下所有的备份集
Show backupsets with backupdir '/home/dmdba/dmdbms/data/DAMENG/bak’
当目录下有多个数据库的备份时,使用db_magic指定数据库
RMAN>SHOW BACKUPSETS WITH BACKUPDIR '/home/dm_bak' USE DB_MAGIC 1447060265;
显示的备份集信息分为三类,依次是元数据信息(META INFO)、文件信息(FILE INFO)
和数据库信息(DB INFO)。可只显示部分备份集信息
RMAN> show backupset '/home/dm_bak/DB_FULL_DAMENG_20190522_133248_000770' info
Meta
输出备份信息到文件
show backupsets with backupdir '/home/dmdba/dmdbms/data/DAMENG/bak' info meta to '/tmp/backupset_meta.txt' format txt; --还可以输出xml
-
- 备份集检验
CHECK BACKUPSET '<备份集目录>'
[DEVICE TYPE <介质类型> [PARMS '<介质参数>']][DATABASE '<INI_PATH>'];
-
- 备份集删除
REMOVE BACKUPSET '<备份集目录>'
[<device_type_stmt>]
[<database_bakdir_lst_stmt>][CASCADE]; |
REMOVE [<备份集类型>] BACKUPSETS [<device_type_stmt>] <database_bakdir_lst_stmt>
[[UNTIL TIME '<截止时间串>'] | [BEFORE <n_day>]];
<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>']
<database_bakdir_lst_stmt>::=
DATABASE '<INI_PATH>' |
WITH BACKUPDIR '<备份集搜索目录>' {, '<备份集搜索目录>' } |
DATABASE '<INI_PATH>' WITH BACKUPDIR '<备份集搜索目录>' {, '<备份集搜索目录>' }
<备份集类型>::=
DATABASE |
TABLESPACE [<ts_name>] |
TABLE ["<schema_name>"."<tab_name>"] |
ARCHIVELOG|
ARCHIVE LOG
例:RMAN> remove backupset '/home/dmdba/dmdbms/data/DAMENG/bak/full_db_01';
全部删除
RMAN> remove backupsets with backupdir '/home/dmdba/dmdbms/data/DAMENG/bak';
-
- 备份集导出
- DMRMAN还原恢复
- 命令
库还原
RESTORE DATABASE <restore_type> FROM BACKUPSET '<备份集路径>'
[<device_type_stmt>]
[IDENTIFIED BY <密码>|”<密码>” [ENCRYPT WITH <加密算法>]]
[WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}]
[MAPPED FILE '<映射文件路径>'][TASK THREAD <任务线程数>]
[RENAME TO '<数据库名>'];
<restore_type>::=<type1>|<type2>
<type1>::='<ini_path>' [WITH CHECK] [REUSE DMINI] [OVERWRITE] [FORCE]
<type2>::= TO '<system_dbf_dir>' [WITH CHECK] [OVERWRITE]
<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>']
表空间还原
RESTORE DATABASE '<ini_path>' TABLESPACE <表空间名> [WITH CHECK]
[DATAFILE <文件编号> {,<文件编号>} | '<文件路径>' {,'<文件路径>'}]
FROM BACKUPSET '<备份集路径>' [<device_type_stmt>]
[IDENTIFIED BY <密码>|”<密码>”] [ENCRYPT WITH <加密算法>]
[WITH BACKUPDIR '<基备份搜索目录>' {,'<基备份搜索目录>'}]
[MAPPED FILE '<映射文件路径>']
[TASK THREAD <线程数>];
<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>']
归档日志还原
RESTORE <ARCHIVE LOG | ARCHIVELOG> [WITH CHECK] FROM BACKUPSET '<备份集路径>'
[<device_type_stmt>]
[IDENTIFIED BY <密码>|”<密码>” [ENCRYPT WITH <加密算法>]]
[TASK THREAD <任务线程数>] [NOT PARALLEL]
[ALL | [FROM LSN <lsn>] | [UNTIL LSN <lsn>] | [LSN BETWEEN < lsn> AND < lsn>]
| [FROM TIME '<time>'] | [UNTIL TIME '<time>'] | [TIME BETWEEN '<time>' AND
'<time>'] ]
TO <还原目录> [OVERWRITE <level>];
<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>']
<还原目录>::= ARCHIVEDIR '<归档日志目录>' | DATABASE '<ini_path>'
库恢复
RECOVER DATABASE '<ini_path>'[FORCE]
WITH ARCHIVEDIR '<归档日志目录>'{,'<归档日志目录>'}
[USE DB_MAGIC <db_magic>] [UNTIL TIME '<时间串>'] [UNTIL LSN <LSN>]; |
RECOVER DATABASE '<ini_path>' [FORCE] FROM BACKUPSET '< 备份集 路
径>'[<device_type_stmt>] [IDENTIFIED BY <密码>|”<密码>” [ENCRYPT WITH <加密算法>]];
<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>']
DATABASE:指定还原库目标的 dm.ini 文件路径。
表空间恢复
RECOVER DATABASE '<ini_path>' TABLESPACE <表空间名> [WITH ARCHIVEDIR '归档日志目
录'{,'归档日志目录'}][USE DB_MAGIC <db_magic>];
-
- 还原恢复
数据库恢复是指重做 REDO 日志,有两种方式:从备份集恢复,即重做备份集中的 REDO
日志;从归档恢复,即重做归档中的 REDO 日志。(注:恢复不会使用当前的redo log)
从备份集恢复
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM
BACKUPSET '/home/dm_bak/db_full_bak_for_recover_backupset';
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM
BACKUPSET '/home/dm_bak/db_full_bak_for_recover_backupset';
从归档恢复
SQL>BACKUP ARCHIVELOG FROM LSN 421401 BACKUPSET
'/home/dm_bak/arch_bak_lsn_421401';
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_full_bak_for_recover_arch';
RMAN>REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/data/dm.ini'; --如果使用原备份库,且备份库故障,需要先执行目标库归档修复(因为先写redo再写archive,所以有可能故障时有数据还在redo,没有写到archive里)
RMAN>CHECK BACKUPSET '/home/dm_bak/db_full_bak_for_recover_arch';
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM
BACKUPSET '/home/dm_bak/db_full_bak_for_recover_arch';
RMAN>SHOW BACKUPSET '/home/dm_bak/db_full_bak_for_recover_arch' INFO DB;
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH
ARCHIVEDIR'/home/dm_arch/arch' USE DB_MAGIC 1447060265;
--若还原后,立即执行恢复,可以不用指定 DB_MAGIC
--可以指定多个归档目录,用逗号分隔
归档校验
./dmrachk arch_path=/home/dm_arch/arch -- 若执行后归档恢复过程中,出现归档不足的错误,则利用归档校验工具 dmrachk, 查看归档目录中归档连续性情况,然后再利用备份的本地归档日志,还原到归档目录后,再次执行恢复操作
RMAN>RESTORE ARCHIVELOG FROM BACKUPSET '/home/dm_bak/arch_bak_lsn_421401' ALL
TO ARCHIVEDIR '/home/dm_arch/arch';
归档修复
RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/data/dm.ini';
使用 REPAIR 命令完成指定数据库的归档修复,归档修复会对目标库 dmarch.ini 中
配置的所有本地归档日志目录执行修复。执行修复时,目标库一定不能处于运行状态。一般建议在数据库故障后,应立即执行归档修复, 否则后续还原恢复将会导致联机日志中未刷入本地归档的 REDO 日志丢失,届时再利用本地归档恢复将无法恢复到故障前的最新状态。
--一般的作用是将故障时写到redo但是没写到archive的写到archive里
-
- 高级场景
- 指定映射文件还原
- 高级场景
1. 生成映射文件
RMAN> DUMP BACKUPSET'/home/dm_bak/db_bak_for_map_01' DATABASE
'/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' MAPPED
FILE'/home/dm_mapfile/map_file_01.txt';
2. 手动编辑映射文件中表空间对应的 data_path 属性
3. 指定映射文件还原
RMAN> RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM
BACKUPSET '/home/dm_bak/db_bak_for_map_01' MAPPED FILE
'/home/dm_mapfile/map_file_01.txt';
-
-
- 恢复到指定时间点或LSN
-
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH
ARCHIVEDIR'/home/dm_arch/arch' UNTIL TIME'2018-11-16 10:56:40';
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH
ARCHIVEDIR'/home/dm_arch/arch' UNTIL LSN 50857;
-
-
- 主备环境下指定 DB_MAGIC 收集归档
-
RMAN>RECOVER DATABASE '/opt/dmdbms/data0/DAMENG/dm.ini' WITH ARCHIVEDIR
'/opt/dmdbms/data1/arch' USE DB_MAGIC 1447060264; --使用备库的db_magic
-
-
- 多次故障恢复后使用不同数据库归档恢复
-
与7.3.3一样,关键点在于PERMANNET_MAGIC 不变,只是db_magic发生变化
1. 先用第一次故障前的归档日志进行恢复
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini' FROM BACKUPSET
'/home/dm_bak/B1';
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini' WITH ARCHIVEDIR
'/home/dm_arch/arch';
2. 查看第一次故障修复后的数据库的归档日志获取db_mgaic
./dmrachk arch_fil=/home/dm_arch/arch/ARCHIVE_LOCAL1_2019061208085947282.log
3. 使用第一次故障修复后生成的归档日志做恢复
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini' WITH ARCHIVEDIR
'/home/dm_arch/arch' USE DB_MAGIC 1449535319 ;
4. 更新数据库
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini' UPDATE DB_MAGIC;
-
-
- 恢复表空间中的数据文件
-
- 根据v$datafile获取数据文件的ID
SQL>SELECT ID, PATH FROM V$DATAFILE;
- 还原数据文件
RMAN>RESTORE DATABASE '/home/xm/DAMENG/dm.ini' TABLESPACE TS_FOR_RES_01
DATAFILE 1, 2 FROM BACKUPSET '/home/dm_bak/ts_bak_for_dbf';
也可以指定文件名
RMAN>RESTORE DATABASE '/home/xm/DAMENG/dm.ini' TABLESPACE TS_FOR_RES_01
DATAFILE '/home/xm/DAMENG/ts_for_res_01_02.dbf',
'/home/xm/DAMENG/ts_for_res_01_03.dbf' FROM BACKUPSET
'/home/dm_bak/ts_bak_for_dbf';
- 联机拷贝数据库还原恢复
使用备份集进行还原恢复,在还原阶段,通过重建数据文件、联机日志文件以及更新控
制文件等操作重建了目标库的文件结构,并在恢复阶段重做日志将目标库恢复到最新状态。
理论上,拷贝源库得到的一个副本,相当于目标从备份集还原后的状态,利用归档日志应该
能将该副本恢复到最新状态。
1. 调 用 系 统 过 程 SP_BACKUP_COPY_BEGIN 记录当前系统BEGIN_LSN/BEGIN_SEQ信息
SQL>SP_BACKUP_COPY_BEGIN();
2. 开始拷贝数据库,使用常规方式拷贝数据库文件到新的目录。必须包含配置文件(dm.ini)、控 制文件(dm.ctl)、秘钥文件(dm_service.prikey)、联机日志文件(DAMENG01.log 和DAMENG02.log)以及数据文件(*.DBF)。
3. 调 用 系 统 过 程 SP_BACKUP_COPY_END , 记 录 系 统 各 节 点
END_LSN/END_SEQ信息,以在恢复结束后校验数据完整性
SQL>SP_BACKUP_COPY_END('/home/dm/bak/BAKSET_COPY');
- 修改文件路径位置
编辑dm.ini修改控制文件路径
将控制文件的格式转为文本,修改后再转换为控制文件格式
dmctlcvt TYPE=1 SRC=/home/dm/DB_COPY/dm.ctl DEST=/home/dm/DB_COPY/dmctl.txt
或 dmctlcvt c2t /home/dm/DB_COPY/dm.ctl /home/dm/DB_COPY/dmctl.txt
dmctlcvt TYPE=2 SRC=/home/dm/DB_COPY/dmctl.txt DEST=/home/dm/DB_COPY/dm.ctl
或dmctlvct t2c /home/dm/DB_COPY/dmctl.txt /home/dm/DB_COPY/dm.ctl
5. 还原恢复
启动DMRMAN,利用空备份集还原源库的副本;
RMAN>RESTORE DATABASE '/home/dm/DB_COPY/dm.ini' FROM BACKUPSET
'/home/dm/bak/BAKSET_COPY';
利用源库的归档日志将副本恢复到最新状态;
RMAN>RECOVER DATABASE '/home/dm/DB_COPY/dm.ini' WITH ARCHIVEDIR
'/home/dm/DB_FOR_COPY/DAMENG/arch';
恢复成功后更新副本DB_MAGIC。
RMAN>RECOVER DATABASE '/home/dm/DB_COPY/dm.ini' UPDATE DB_MAGIC;
参考:达梦技术丛书-DM8备份与还原
欢迎访问达梦社区:http://eco.dameng.com