DM8的数据库备份与还原

一、备份数据库

1.完全备份

执行数据库备份,数据库必须处于 OPEN 状态,MOUNT 和 SUSPEND 状态下不允许执行 数据库备份。

./disql

alter database mount;

alter database add archivelog ‘dest=/dm8/dmarch,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=1024’;

alter database archivelog;

alter database open;

DIsql 中输入备份数据库语句,最简单的不设置其他参数的完全备份语句如下:

SQL>BACKUP DATABASE FULL BACKUPSET ‘/dm8/dm_bak/db_full_bak_01’;

备份语句中的参数 FULL 可以省略,不指定备份类型会默认指定备份类型为完全备份。

2.增量备份

增量备份指基于指定的库(或者表空间)的某个备份(完全备份或者增量备份),备份

自该备份以来所有发生修改的数据页。执行增量备份的主要目的是快速备份数据库中的修改,

减少备份时间和避免重复的备份。

备份策略要根据可接受的最小恢复时间进行制定。例如,每周执行一次完全备份,每天

执行一次增量备份,那么恢复时要重做的归档就不会超过一天。

DIsql 中输入备份数据库语句,最简单的不设置其他参数的增量备份语句如下:

SQL>BACKUP DATABASE INCREMENT WITH BACKUPDIR ‘/dm8/dm_bak’ BACKUPSET ‘/dm8/dm_bak/db_increment_bak_02’;

备份语句中的 INCREMENT 参数不可省略,该参数用来指定执行的备份类型为增量备份。

若要创建累积增量备份,还需要指定 CUMULATIVE 参数,否则缺省为差异增量备份。WITH

BACKUPDIR 参数用来指定基备份集的搜索目录,如果基备份集不在默认备份目录或当前备份目录则该参数不可省略。

二、表空间备份

1.完全备份

SQL>BACKUP TABLESPACE MAIN BACKUPSET ‘ts_bak_01’;

备份集“ts_bak_01”会生成到默认的备份路径下。如要设置其他备份选项需参考下文的联机备份表空间语法。

SQL>BACKUP TABLESPACE MAIN FULL BACKUPSET ‘/dm8/dm_bak/ts_full_bak_01’;

备份语句中的 FULL 参数可以省略,不指定备份类型会默认指定备份类型为完全备份。

增量备份指定基备份集路径

以增量备份用户 MAIN 表空间为例,指定 BASE ON BACKUPSET 参数

2.增量备份

SQL>BACKUP TABLESPACE MAIN BACKUPSET ‘ts_full_bak_01’;

SQL>BACKUP TABLESPACE MAIN INCREMENT BACKUPSET ‘ts_increment_bak_01’;

SQL>BACKUP TABLESPACE MAIN INCREMENT BASE ON BACKUPSET ‘ts_full_bak_01’ BACKUPSET  ‘ts_increment_bak_02’;

DIsql 中输入备份表空间语句,最简单的不设置其他参数的增量备份

语句如下:

SQL>BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR ‘/dm8/dm_bak’ BACKUPSET ‘/dm8/dm_bak/ts_increment_bak_02’;

三、表备份

DIsql 中输入备份表语句,简单的备份语句如下:

SQL>BACKUP TABLE TAB_01 BACKUPSET ‘/dm8/dm_bak/tab_bak_01’;

四、归档备份

SQL>BACKUP ARCHIVE LOG ALL BACKUPSET ‘arch_bak_01’;

备份集“arch_bak_01”会生成到默认的备份路径下。

五、加密备份

SQL>BACKUP DATABASE BACKUPSET ‘/dm8/dm_bak/db_bak_for_encrypt’ IDENTIFIED BY

"cdb546789";

SQL>BACKUP DATABASE BACKUPSET ‘/dm8/dm_bak/db_bak_for_encrypt’ IDENTIFIED BY

"cdb546789" ENCRYPT WITH RC4;

若指定了加密密码,但加密类型 WITH ENCRYPTION 指定为 0,则为非加密备份,如下所示:

SQL>BACKUP DATABASE BACKUPSET ‘/dm8/dm_bak/db_bak_for_encrypt’ IDENTIFIED BY

"cdb546789" WITH ENCRYPTION 0;

备份数据库,输入以下语句:

SQL>BACKUP DATABASE BACKUPSET ‘/dm8/dm_bak/db_bak_for_encrypt_01’ IDENTIFIED BY "cdb546789" WITH ENCRYPTION 2 ENCRYPT WITH RC4;

六、表还原

1) 保证数据库为 OPEN 状态;

2) 创建待备份的表;

SQL>CREATE TABLE TAB_FOR_RES_01(C1 INT);

3) 备份表数据;

SQL>BACKUP TABLE TAB_FOR_RES_01 BACKUPSET ‘/dm8/dm_bak/tab_bak_for_res_01’;

4) 校验备份,此步骤为可选;

SQL>SELECT SF_BAKSET_CHECK(‘DISK’,’/dm8/dm_bak/tab_bak_for_res_01’);

5) 还原表数据。

SQL>RESTORE TABLE TAB_FOR_RES_01 FROM BACKUPSET

‘/dm8/dm_bak/tab_bak_for_res_01’;

表还原实质是表内数据的还原,以及索引和约束等的重建。如果备份文件与目标表中都包含索引或约束该如何还原呢?下面以表中包含索引为例说明如何还原表,具体步骤如下:

1) 保证数据库为 OPEN 状态;

2) 创建待备份的表;

SQL>CREATE TABLE TAB_FOR_RES_02(C1 INT);

3) 创建索引;

SQL>CREATE INDEX I_TAB_FOR_RES_02 ON TAB_FOR_RES_02(C1);

4) 备份表;

SQL>BACKUP TABLE TAB_FOR_RES_02 BACKUPSET ‘/dm8/dm_bak/tab_bak_for_res_02’;

5) 校验备份,此步骤为可选;

SQL>SELECT SF_BAKSET_CHECK(‘DISK’,’/dm8/dm_bak/tab_bak_for_res_02’);

6) 执行表结构还原,表备份和目标表中都包含索引,如果直接执行表数据还原会报错:

还原表中存在二级索引或冗余约束;

SQL>RESTORE TABLE TAB_FOR_RES_02 STRUCT FROM BACKUPSET

‘/dm8/dm_bak/tab_bak_for_res_02’;

7) 执行表数据还原。

SQL>RESTORE TABLE TAB_FOR_RES_02 FROM BACKUPSET

‘/dm8/dm_bak/tab_bak_for_res_02’;

指定还原时不重建索引

表备份时会默认备份表中的索引,还原时使用RESTORE TABLE...WITHOUT INDEX...

语句可选择不还原索引。完整示例如下:

1) 保证数据库为 OPEN 状态;

2) 准备数据,创建待备份的表及索引;

SQL>CREATE TABLE TAB_FOR_IDX_01(C1 INT);

SQL>CREATE INDEX I_TAB_FOR_IDX_01 ON TAB_FOR_IDX_01 (C1);

3) 备份表数据;

SQL>BACKUP TABLE TAB_FOR_IDX_01 BACKUPSET ‘/dm8/dm_bak/tab_bak_for_res_01’;

4) 校验备份,此步骤为可选;

SQL>SELECT SF_BAKSET_CHECK(‘DISK’,’/dm8/dm_bak/tab_bak_for_res_01’);

5) 还原表数据,但不重建索引。

SQL>RESTORE TABLE TAB_FOR_RES WITHOUT INDEX FROM BACKUPSET ‘/dm8/dm_bak/tab_bak_for_res_01’;

指定还原时不重建约束

表备份时会默认备份表中的索引定义,还原时使用 RESTORE TABLE...WITHOUT CONSTRAINT...语句可选择还原时不重建约束。完整示例如下:

1) 保证数据库为 OPEN 状态;

2) 准备数据,创建待备份的表及索引;

SQL>CREATE TABLE TAB_FOR_CONS_01(C1 INT);

SQL>CREATE INDEX I_TAB_FOR_CONS_01 ON TAB_FOR_CONS_01 (C1);

3) 备份表数据;

SQL>BACKUP TABLE TAB_FOR_CONS_01 BACKUPSET ‘/dm8/dm_bak/tab_bak_for_res_01’;

4) 校验备份,此步骤为可选;

SQL>SELECT SF_BAKSET_CHECK(‘DISK’,’/dm8/dm_bak/tab_bak_for_res_01’);

5) 还原表数据,但不还原约束。

SQL>RESTORE TABLE TAB_FOR_RES WITHOUT CONSTRAINT FROM BACKUPSET  ‘/dm8/dm_bak/tab_bak_for_res_01’;

七、使用DMRMAN 进行备份

1.备份数据库

完全备份

1) 保证数据库处于脱机状态;

2) 启动 DMRMAN 命令行工具;

3) DMRMAN 中输入以下命令:

RMAN>BACKUP DATABASE ‘/dm8/data/DAMENG/dm.ini’ FULL BACKUPSET ‘/dm8/dm_bak/db_full_bak_01’;

命令中的 FULL 参数表示执行的备份为完全备份,也可以不指定该参数,DMRMAN 默认执行的备份类型为完全备份。

创建增量备份

1) 保证数据库处于脱机状态;

2) 启动 DMRMAN 命令行工具;

3) DMRMAN 中输入以下命令:

RMAN>BACKUP DATABASE ‘/dm8/data/DAMENG/dm.ini’ INCREMENT WITH BACKUPDIR ‘/dm8/dm_bak’ BACKUPSET ‘/dm8/dm_bak/db_increment_bak_02’;

命令中的 INCREMENT 参数表示执行的备份为增量备份,增量备份时该参数不可省略。

如果增量备份的基备份不在默认备份目录中,则必须指定 WITH BACKUPDIR 参数用于搜索基备份集,或者使用 CONFIGURE DEFAULT BACKUPDIR 命令配置默认的基备份集搜索目录。

2.备份归档

创建归档备份

1) 配置归档;

2) 保证数据库处于脱机状态;

3) 启动 DMRMAN 命令行工具;

4) DMRMAN 中输入以下命令:

RMAN>BACKUP ARCHIVE LOG ALL DATABASE ‘/dm8/data/DAMENG/dm.ini’ BACKUPSET

‘/dm8/dm_bak/arch_all_bak_01’;

命令中的 ALL 参数表示执行的备份为备份所有的归档,也可以不指定该参数,DMRMAN默认执行的备份类型为 ALL 类型归档备份。

创建设置条件的归档备份

1) 配置归档;

2) 保证数据库处于脱机状态;

3) 启动 DMRMAN 命令行工具;

4) DMRMAN 中输入以下命令:

RMAN>BACKUP ARCHIVE LOG LSN BETWEEN 5000 AND 12000 DATABASE ‘/dm8/data/DAMENG/dm.ini’ BACKUPSET ‘/dm8/dm_bak/arch_lsn_bak_02’;

命令中的 LSN BETEEWN start AND end 表示备份 LSN 值在 start 与 end 之间的归档,也可以设置 FROM LSN(TIME)或 UNTIL LSN(TIME)。

3.加密备份

加密备份过程中参数 IDENTIFIED BY 必须指定,参数 WITH ENCRYPTION 和参数ENCRYPT WITH 可不指定。加密备份时若不指定 WITH ENCRYPTION 参数,则该参数默认为 1,若不指定 ENCRYPT WITH 参数,则该参数默认值为 AES256_CFB。

例如,以下两种加密备份命令都是合法的:

RMAN>BACKUP DATABASE ‘/dm8/data/DAMENG/dm.ini’ BACKUPSET ‘/dm8/dm_bak/db_bak_for_encrypt_01’ IDENTIFIED BY "cdb546789";

RMAN>BACKUP DATABASE ‘/dm8/data/DAMENG/dm.ini’ BACKUPSET ‘/dm8/dm_bak/db_bak_for_encrypt_02’ IDENTIFIED BY "cdb546789" ENCRYPT WITH RC4;

若指定了加密密码,但加密类型 WITH ENCRYPTION 参数指定为 0,则为非加密备份,如下所示:

RMAN>BACKUP DATABASE ‘/dm8/data/DAMENG/dm.ini’ BACKUPSET ‘/dm8/dm_bak/db_bak_for_encrypt_03’ IDENTIFIED BY "cdb546789" WITH ENCRYPTION 0;

下面以数据库完全备份为例,创建加密密码为“cdb546789”,加密算法为“rc4”的

复杂加密类型的数据库加密备份,完整步骤如下:

1) 保证数据库处于关闭状态;

2) 备份数据库。启动 DMRMAN 工具并输入以下命令:

RMAN>BACKUP DATABASE ‘/dm8/data/DAMENG/dm.ini’ BACKUPSET ‘/dm8/dm_bak/db_bak_for_encrypt_04’ IDENTIFIED BY "cdb546789" WITH ENCRYPTION 2 ENCRYPT WITH RC4;

对于增量备份加密,如果基备份存在加密,则增量备份使用的加密密码、加密类型和加密算法必须与基备份保持一致;如果基备份未进行加密处理,则对增量备份使用的加密密码、

加密类型和加密算法没有特殊要求。

八、还原数据

数据库备份集分为联机和脱机两种类型。通常情况下,用户会在联机状态下备份数据库,

因此下面以联机数据库备份为例说明使用 DMRMAN 如何执行数据库还原操作。

1) 联机备份数据库,保证数据库运行在归档模式及 OPEN 状态;

SQL>BACKUP DATABASE BACKUPSET ‘/dm8/dm_bak/db_full_bak’;

2) 准备目标库。还原目标库可以是已经存在的数据库,也可使用 dminit 工具初始

化一个新库。如下所示:

./dminit path=/dm8/data db_name=DAMENG

3) 校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;

RMAN>CHECK BACKUPSET ‘/dm8/dm_bak/db_full_bak’;

4) 还原数据库。启动 DMRMAN,输入以下命令:

RMAN>RESTORE DATABASE ‘/dm8/data/DAMENG/dm.ini’ FROM

BACKUPSET ‘/dm8/dm_bak/db_full_bak’;

从备份集恢复

如果备份集在备份过程中生成了日志,且这些日志在备份集中有完整备份(如联机数据库备份),在执行数据库还原后,可以重做备份集中备份的日志,将数据库恢复到备份时的

状态,即从备份集恢复。完整的示例如下:

  1. 启动 DIsql 联机备份数据库;

SQL>BACKUP DATABASE BACKUPSET

‘/dm8/dm_bak/db_full_bak_backupset’;

2) 准备目标库,可以使用备份库,也可以重新生成库;

重新生成库操作如下:

./dminit path=/dm8/data db_name=DAMENG auto_overwrite=1

3) 启动 RMAN,校验备份;

RMAN>CHECK BACKUPSET ‘/dm8/dm_bak/db_full_bak_backupset’;

4) 还原数据库;

RMAN>RESTORE DATABASE ‘/dm8/data/DAMENG/dm.ini’ FROM

BACKUPSET ‘/dm8/dm_bak/db_full_bak_backupset’;

5) 恢复数据库。

RMAN>RECOVER DATABASE ‘/dm8/data/DAMENG/dm.ini’ FROM

BACKUPSET ‘/dm8/dm_bak/db_full_bak_backupset’;

从归档恢复

利用归档恢复数据库至最新状态的完整示例如下:

  1. 启动 DIsql 联机备份数据库,以及备份从检查点开始的本地归档日志;

SQL>BACKUP ARCHIVELOG FROM LSN 421401 BACKUPSET

‘/dm8/dm_bak/arch_bak_lsn_421401’;

SQL>BACKUP DATABASE BACKUPSET ‘/dm8/dm_bak/db_full_bak_arch’;

2) 准备目标库,可以使用备份库,也可以重新生成库;

如果使用原备份库,且备份库故障,需要先执行目标库归档修复;

RMAN>REPAIR ARCHIVELOG DATABASE ‘/dm8/data/dm.ini’;

如果使用新生成的库,生成之后需要先重启一下数据库实例,才可以被还原。重新生成

的库不需要执行归档修复(REPAIR)操作。重新生成库操作如下:

./dminit path=/dm8/data db_name=DAMENG auto_overwrite=1

3) 启动 RMAN,校验备份;

RMAN>CHECK BACKUPSET ‘/dm8/dm_bak/db_full_bak_arch’;

4) 还原数据库;

RMAN>RESTORE DATABASE ‘/dm8/data/DAMENG/dm.ini’ FROM

BACKUPSET ‘/dm8/dm_bak/db_full_bak_arch’;

5) 查看备份集的数据库信息,获取源库的 DB_MAGIC;

数据库更新

以使用正常退出数据库的脱机备份的备份集还原为完整示例,进行说明如下:

1) 启动 DMRMAN 备份数据库,保证数据库处于正常退出的脱机状态;

RMAN>BACKUP DATABASE ‘/dm8/data/DAMENG/dm.ini’ BACKUPSET

‘/dm8/dm_bak/db_full_bak_dbmagic’;

2) 准备目标库,可以使用备份库,也可以重新生成库或者直接指定目录还原;

重新生成库操作如下:

./dminit path=/dm8/data db_name=DAMENG auto_overwrite=1

3) 校验备份;

RMAN>CHECK BACKUPSET ‘/dm8/dm_bak/db_full_bak_dbmagic’;

4) 还原数据库;

RMAN>RESTORE DATABASE ‘/dm8/data/DAMENG/dm.ini’ FROM

BACKUPSET ‘/dm8/dm_bak/db_full_bak_dbmagic’;

5) 恢复数据库;

RMAN>RECOVER DATABASE ‘/dm8/data/DAMENG/dm.ini’ FROM

BACKUPSET ‘/dm8/dm_bak/db_full_bak_dbmagic’;

6) 更新数据库。

RMAN>RECOVER DATABASE ‘/dm8/data/DAMENG/dm.ini’ UPDATE

DB_MAGIC;

恢复数据库到指定时间点/LSN

例如,用户在下午 5 点做了一个误操作,删除了某些重要数据;我们可以指定恢复时

间点到下午 4:59 分,恢复被误删除的数据。

下面以联机数据库备份为例说明如何恢复数据库到指定的时间点/LSN。

1) 准备数据;

SQL>CREATE TABLE TAB_01(C1 INT);

SQL>INSERT INTO TAB_01 VALUES(1);

SQL>COMMIT;

2) 备份数据库;

SQL>BACKUP DATABASE BACKUPSET '/dm8/dm_bak/db_full_bak_for_time_lsn';

3) 正确操作数据库,产生一些归档;

SQL>CREATE TABLE TAB_02(C1 INT);

SQL>INSERT INTO TAB_02 VALUES(1);

SQL>COMMIT;

使用 SELECT SYSDATE 命令查询此时的时间为:2018-11-16 10:56:40。

使用 SELECT FILE_LSN FROM V$RLOG 命令查询此时的 LSN 为:50857。

4) 误操作数据库。此步骤误删除了表 TAB_01 中数据;

SQL>DELETE FROM TAB_01;

SQL>COMMIT;

操作步骤同步骤 3),此时的时间和 LSN 分别为:2018-11-16 10:57:20、50861。

5) 还原数据库。步骤 4)为误操作,因此我们需要将数据库恢复到步骤 3)的状态。

首先需要关闭数据库实例,然后利用 DMRMAN 工具还原数据库:

RMAN> RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/dm_bak/db_full_bak_for_time_lsn';

6) 恢复数据库到指定时间点/LSN。还原后数据库的数据与备份时一致,如果要恢复数据库至步骤 3)的状态可以指定 UNTIL TIME 或 UNTIL LSN 参数重做部分归档。

使用 RECOVER DATABASE...UNTIL TIME 命令恢复到指定的时间:

RMAN>RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' WITH

ARCHIVEDIR'/dm8/dm_arch/arch' UNTIL TIME'2018-11-16 10:56:40';

或者使用 RECOVER DATABASE...UNTIL TIME 命令恢复到指定的 LSN:

RMAN>RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' WITH

ARCHIVEDIR'/dm8/dm_arch/arch' UNTIL LSN 50857;

表空间还原

以联机表空间备份集为例,展示 DMRMAN 如何完成表空间的还原:

1) 联机备份表空间,保证数据库运行在归档模式及 OPEN 状态;

SQL>BACKUP TABLESPACE MAIN BACKUPSET '/dm8/dm_bak/ts_full_bak_for_restore';

2) 校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此

处使用脱机校验;

RMAN>CHECK BACKUPSET '/dm8/dm_bak/ts_full_bak_for_restore';

3) 还原表空间。需要注意,表空间还原的目标库只能是备份集产生的源库,否则将

报错。启动 DMRMAN,输入以下命令:

RMAN>RESTORE DATABASE '/dm8/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE

MAIN FROM BACKUPSET '/dm8/dm_bak/ts_full_bak_for_restore';

表空间恢复

以联机表空间备份为例,展示 DMRMAN 如何完成表空间的恢复:

1) 联机备份表空间,保证数据库运行在归档模式及 OPEN 状态;

SQL>BACKUP TABLESPACE MAIN BACKUPSET '/dm8/dm_bak/ts_full_bak';

2) 校验备份,校验待还原备份集的合法性,此处使用脱机校验;

RMAN>CHECK BACKUPSET '/dm8/dm_bak/ts_full_bak';

3) 还原表空间。启动 DMRMAN,输入以下命令:

RMAN>RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/dm8/dm_bak/ts_full_bak';

4) 恢复表空间。启动 DMRMAN,输入以下命令:

RMAN>RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' TABLESPACE MAIN;

九、使用 MANAGER 工具进行联机备份还原

十、使用 CONSOLE 工具进行脱机备份还原

http://t.csdn.cn/v9RMw

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值