签到成功

知道了

CNDBA社区CNDBA社区

DM7 达梦数据库 物理备份还原之 联机备份(SQL备份) 使用手册

2019-09-02 15:45 4266 0 原创 DM 达梦
作者: dave

在之前的博客我们了解了DM 物理备份的相关概念,如下:https://www.cndba.cn/dave/article/3595

DM7 达梦数据库 物理备份 相关概念说明
https://www.cndba.cn/dave/article/3594

本篇我们看物理联机备份的操作。

DM 联机执行 SQL 语句方式支持数据库、 用户表空间、用户表和归档的备份,用户表空间、用户表的还原。在进行联机库级备份、归档备份表空间备份和表空间还原时,必须保证系统处于归档模式,否则联机备份还原不能进行。https://www.cndba.cn/dave/article/3595

1启动归档模式

联机备份是一种不一致的备份,在恢复时依赖与归档日志来保证事物的一致性,关于归档的配置和归档模式的启用参考之前的博客,这里不在重复描述:https://www.cndba.cn/dave/article/3595

DM7 达梦数据库 重做日志管理 及 归档模式切换
https://www.cndba.cn/dave/article/3575https://www.cndba.cn/dave/article/3595

SQL> select arch_mode from v$database;

LINEID     ARCH_MODE
---------- ---------
1          Y

used time: 3.003(ms). Execute id is 1485.
SQL>  select name,value from v$parameter where name like 'ARCH%';

LINEID     NAME     VALUE
---------- -------- -----
1          ARCH_INI 1

SQL> select arch_name,arch_type,arch_dest,arch_file_size from v$dm_arch_ini;

LINEID     ARCH_NAME      ARCH_TYPE ARCH_DEST   ARCH_FILE_SIZE
---------- -------------- --------- ----------- --------------
1          ARCHIVE_LOCAL2 LOCAL     /dm/dmarch2 128
2          ARCHIVE_LOCAL3 LOCAL     /dm/dmarch  128

used time: 1.824(ms). Execute id is 1592.

2数据库备份与还原

2.1 语法说明

语句执行完后会在默认的备份路径下生成备份集目录,默认的备份路径为 dm.ini 中 BAK_PATH 配置的路径,若未配置,则使用 SYSTEM_PATH 下的 bak目录。

备份语法如下:

BACKUP DATABASE [[[FULL] [DDL_CLONE]]| INCREMENT [CUMULATIVE][WITH BACKUPDIR ‘<
基备份搜索目录>’{,’<基备份搜索目录>’} |[BASE ON ']][TO <备份 名> ]BACKUPSET [‘<备份集路径>’]
[DEVICE TYPE <介质类型> [PARMS ‘<介质参数>’]]
[BACKUPINFO ‘<备份描述>’] [MAXPIECESIZE <备份片限制大小>]
[IDENTIFIED BY <密码>[WITH ENCRYPTION ][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]] [WITHOUT LOG]
[TRACE FILE ‘< TRACE 文件名>’] [TRACE LEVEL < TRACE 日志级别>]
[TASK THREAD <线程数>][PARALLEL [<并行数>]];

参数说明:

1)FULL:备份类型。FULL 表示完全备份,可不指定,服务器会默认为完全备份。
2)DDLCLONE:数据库克隆。该参数只能用于完全备份中,表示仅拷贝所有的元数据不拷贝数据。如对于数据库中的表来说,只备份表的定义不备份表中数据。表空间和表备份不支持该参数。
3)INCREMENT:备份类型。INCREMENT 表示增量备份,若要执行增量备份必须指定该参数。
4)CUMULATIVE:用于增量备份中,指明为累积增量备份类型,若不指定则缺省为差异增量备份类型。
5)WITH BACKUPDIR:用于增量备份中,指定基备份的搜索目录,最大长度为 256 个字节。若不指定,服务器自动在默认备份目录下搜索基备份。如果基备份不在默认的备份目录下,增量备份必须指定该参数。
6)BASE ON:用于增量备份中,指定基备份集目录。
7)TO:指定生成备份名称。若未指定,系统随机生成,默认备份名格式为:DB
备份类型数据库名备份时间。其中,备份时间为开始备份时的系统时间。
8)BACKUPSET:指定当前备份集生成路径。若指定为相对路径,则在默认备份路径中生成备份集。若不指定,则在默认备份路径中按约定规则,生成默认备份集目录。库级备份默认备份集目录名生成规则: DB 库名备份类型时间,如DB_DAMENG_FULL_20160518_143057_123456。表明该备份集为 2016 年 5 月 18 日14时30分57秒123456毫秒时生成的库名为DAMENG的数据库完全备份集。若库名超长,使上述完整名称长度大于 128 个字节,则去掉库名字段,调整为 DB备份类型时间。
9)DEVICE TYPE:指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK。DISK表示存储备份集到磁盘,TAPE 表示存储到磁带。
10)PARMS:只对介质类型为 TAPE 时有效。
11)BACKUPINFO:备份的描述信息。最大不超过 256 个字节。
12)MAXPIECESIZE:最大备份片文件大小上限,以 M 为单位,最小 128M,32 位系统最大 2G,64 位系统最大 128G。
13)IDENTIFIED BY:指定备份时的加密密码。密码应用双引号括起来,这样避免一些特殊字符通不过语法检测。密码的设置规则遵行 ini 参数 pwd_policy 指定的口令策略。
14)WITH ENCRYPTION:指定加密类型,0 表示不加密,不对备份文件进行加密处理;1表示简单加密,对备份文件设置口令,但文件内容仍以明文存;2 表示完全数据加密,对备份文件进行完全的加密,备份文件以密文方式存储。
15)ENCRYPT WITH:加密算法。缺省情况下,算法为 AES256_CFB。
16)COMPRESSED:取值范围 0~9。0 表示不压缩,1 表示 1 级压缩,9 表示 9 级压缩。压缩级别越高,压缩越慢,但压缩比越高。若未指定,但指定 COMPRESSED,则默认 1;否则,默认 0。
17)WITHOUT LOG:联机数据库备份是否备份日志。如果使用,则表示不备份,否则表示备份。如果使用了 WITHOUT LOG 参数,则使用 DMRMAN 工具还原时,必须指定 WITH ARCHIVEDIR 参数。
18)TRACE FILE:指定生成的 TRACE 文件。启用 TRACE,但不指定 TRACE FILE 时, 默认在 DM 数据库系统的 log 目录下生成 DM_SBTTRACE
年月.log 文件;若使用相对路径,则生成在执行码同级目录下。若用户指定,则指定的文件不能为已经存在的文件,否则报错;也不可以为 ASM 文件。
19)TRACE LEVEL:有效值 1、2,默认为 1表示不启用TRACE,此时若指定了TRACE FILE, 会生成 TRACE 文件,但不写入 TRACE 信息;为 2 启用 TRACE 并写入 TRACE 相关内容。
20)TASK THREAD:备份过程中数据处理过程线程的个数,取值范围 0~64,默认为 4。若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为主机核数。线程数(TASK THREAD)并行数(PARALLEL)不得超过 512。
21)PARALLEL:指定并行备份的并行数,取值范围 0~128。若不指定,则默认为 4,指定0 或者 1 均认为为非并行备份。若未指定关键 PARALLEL,则认为非并行备份。并行备份不支持存在介质为 TAPE 的备份。线程数(TASK THREAD)
并行数(PARALLEL)不得超过 512。
22)COMPRESSED:取值范围 0~9。0 表示不压缩,1 表示 1 级压缩,9 表示 9 级压缩。压缩级别越高,压缩越慢,但压缩比越高。若未指定,但指定 COMPRESSED,则默认 1;否则,默认 0。
23)WITHOUT LOG:联机数据库备份是否备份日志。如果使用,则表示不备份,否则表示备份。如果使用了 WITHOUT LOG 参数,则使用 DMRMAN 工具还原时,必须指定 WITH ARCHIVEDIR 参数。
24)TRACE FILE:指定生成的 TRACE 文件。启用 TRACE,但不指定 TRACE FILE 时,默认在 DM 数据库系统的 log 目录下生成 DMSBTTRACE年月.log 文件;若使用相对路径,则生成在执行码同级目录下。若用户指定,则指定的文件不能为已经存在的文件,否则报错;也不可以为 ASM 文件。
25)TRACE LEVEL:有效值 1、2,默认为 1表示不启用TRACE,此时若指定了TRACE FILE,会生成 TRACE 文件,但不写入 TRACE 信息;为 2 启用 TRACE 并写入 TRACE 相关内容。

2.2 操作示例

#创建完全备份集,备份名设置为“WEEKLY_FULL_BAK”。
#备份语句中的参数 FULL 参数可以省略,不指定备份类型服务器会默认指定备份类型为完全备份。
#这个备份目录必须是不存在的目录,如果存在就会报如下错误:
SQL> backup database to weekly_full_bak backupset '/dm/dmbackup'  backupinfo 'dave full backup';
backup database to weekly_full_bak backupset '/dm/dmbackup'  backupinfo 'dave full backup';
[-8055]:Backup directory exists.
used time: 6.138(ms). Execute id is 0.

#备份生成的文件名同目录名,所以备份集命名需要保证有意义一些:
SQL> backup database to weekly_full_bak backupset '/dm/dmbak'  backupinfo 'dave full backup';
executed successfully
used time: 00:00:01.335. Execute id is 1489.

/dm/dmbak
[dmdba@dm1 dmbak]$ ll -lh
总用量 45M
-rw-r--r-- 1 dmdba dinstall 5.0K  9月  2 08:31 dmbak_1.bak
-rw-r--r-- 1 dmdba dinstall  45M  9月  2 08:31 dmbak.bak
-rw-r--r-- 1 dmdba dinstall  89K  9月  2 08:31 dmbak.meta
[dmdba@dm1 dmbak]$ 


#增量备份
SQL> backup database increment with backupdir '/dm/dmbackup' backupset '/dm/dmbackup/inc_back';
executed successfully
used time: 00:00:01.146. Execute id is 1492.
SQL> 

[dmdba@dm1 inc_back]$ pwd
/dm/dmbackup/inc_back
[dmdba@dm1 inc_back]$ ll -lh
总用量 1.3M
-rw-r--r-- 1 dmdba dinstall 1.2M  9月  2 08:33 inc_back.bak
-rw-r--r-- 1 dmdba dinstall  81K  9月  2 08:33 inc_back.meta
[dmdba@dm1 inc_back]$ 


SQL>  backup database to weekly_full_bak2 backupset '/dm/dmbak/fullback'  backupinfo 'dave full backup2';
executed successfully
used time: 00:00:01.359. Execute id is 1582.
SQL> 

#尝试联机恢复报错,因为联机不支持数据库级别的恢复:
SQL> restore database from backupset '/dm/dmbak/fullback';
restore database from backupset '/dm/dmbak/fullback';
[-8242]:Error in line: 1
try to restore online database.
used time: 1.619(ms). Execute id is 0.
SQL>

3表空间备份与还原

3.1 语法说明

 DIsql 工具中使用 BACKUP 语句也可以备份单个表空间。同备份数据库一样,执行表空间备份服务器也必须运行在归档模式下。

备份语法:

BACKUP TABLESPACE <表空间名> [FULL | INCREMENT [CUMULATIVE][WITH BACKUPDIR ‘<基备份搜索目录>’{,’<基备份搜索目录>’}]| [BASE ON BACKUPSET ‘<基备份集目录>’]][TO <备份
名>] BACKUPSET [‘<备份集路径>’]
[DEVICE TYPE <介质类型> [PARMS ‘<介质参数>’]]
[BACKUPINFO ‘<备份集描述>’] [MAXPIECESIZE <备份片限制大小>]
[IDENTIFIED BY < 加密密码 >[WITH ENCRYPTION ][ENCRYPT WITH < 加密算法 >]]
[COMPRESSED [LEVEL <压缩级别>]]
[TRACE FILE ‘ ‘] [TRACE LEVEL ]
[TASK THREAD <线程数>][PARALLEL [<并行数>]];

几点不同的参数如下,其他参数同DB备份命令:

TO:指定生成备份名称。若未指定,系统随机生成,默认备份名格式为:DB备份类型表空间名备份时间。其中,备份时间为开始备份的系统时间。
BACKUPSET:指定当前备份集生成路径。若指定为相对路径,则在默认备份路径中生成备份集。若不指定,则在默认备份路径下以约定规则生成默认的表空间备份集目录。表空间级备份默认备份集目录名生成规则:TS
表空间名备份类型时间,如TSMAIN_INCREMENT_20160518_143057_123456。表明该备份集为 2016 年 5 月 18日 14 时 30 分 57 秒 123456 毫秒时生成的表空间名为 MAIN 的表空间增量备份集。若表空间名称超长,使上述完整名称长度大于 128 个字节,则去掉表空间名字段,调整为 TS备份类型_时间。

还原语法:

RESTORE TABLESPACE <表空间名> [DATAFILE<<文件编号> {,<文件编号>} | ‘<文件路径>’ {,’<文件路径>’}>]
FROM BACKUPSET ‘<备份集路径>’ [DEVICE TYPE <介质类型> [PARMS ‘<介质参数>’]]
[IDENTIFIED BY <加密密码>] [ENCRYPT WITH <加密算法>]
[WITH BACKUPDIR ‘<备份目录>’ {,’<备份目录>’}]
[WITH ARCHIVEDIR ‘归档目录’{,’归档目录’}]
[MAPPED FILE ‘<映射文件>’]
[TRACE FILE ‘ ‘] [TRACE LEVEL ][TASK THREAD <线程数>][NOT PARALLEL]
[UNTIL TIME ‘<时间串>’] [UNTIL LSN ];

https://www.cndba.cn/dave/article/3595

3.2 操作示例

3.2.1使用表空间完全备份还原表空间

表空间的还原、恢复操作是一次性完成,因此还原后不需要执行恢复操作。使用表空间完全备份还原表空间的完整步骤如下:

1) 配置归档。
2) 保证数据库处于 OPEN 或 MOUNT 状态。
3) 备份表空间。
SQL> BACKUP TABLESPACE MAIN BACKUPSET '/dm/dm_bak/ts_full_bak_01';
executed successfully
used time: 00:00:01.109. Execute id is 1552.
SQL> 

4) 校验表空间备份。此步骤为可选,如果确定备份文件合法可不进行备份校验。
SQL> SELECT SF_BAKSET_CHECK('DISK','/dm/dm_bak/ts_full_bak_01');

LINEID     SF_BAKSET_CHECK('DISK','/dm/dm_bak/ts_full_bak_01')
---------- ---------------------------------------------------
1          1

used time: 12.186(ms). Execute id is 1553.
SQL> 

5) 修改表空间为脱机。
SQL> ALTER TABLESPACE MAIN OFFLINE;
executed successfully
used time: 108.222(ms). Execute id is 1554.

6) 还原表空间。
SQL> RESTORE TABLESPACE MAIN FROM BACKUPSET '/dm/dm_bak/ts_full_bak_01';
executed successfully
used time: 460.284(ms). Execute id is 1555.

7) 修改表空间为联机。
SQL> ALTER TABLESPACE MAIN ONLINE;
executed successfully
used time: 14.690(ms). Execute id is 1556.
SQL>

3.2.2使用表空间增量备份还原表空间

在增量备份与基备份同目录情况下,使用增量备份还原表空间步骤与完全备份一致。
当增量备份与基备份不在同一个目录下时需要使用 RESTORE TABLESPACE…WITH BACKUPDIR语句还原。这里以后面一种情况为例说明使用增量备份还原表空间。步骤如下:

1) 配置归档。
2) 保证数据库处于 OPEN 或 MOUNT 状态。
3) 完全备份表空间。
SQL> BACKUP TABLESPACE MAIN BACKUPSET '/dm/dm_bak/ts_full_bak_02';
executed successfully
used time: 00:00:01.128. Execute id is 1557.

4)多次增量备份表空间。
SQL> BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/dm/dm_bak' BACKUPSET  '/dm/dm_bak2/ts_incre_bak_02_01';
BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/dm/dm_bak' BACKUPSET  '/dm/dm_bak2/ts_incre_bak_02_01';
[-8088]:No data updates or logs are generated, no need to back up.
used time: 00:00:02.096. Execute id is 0.

#创建对象:
[dmdba@dm1 dm_bak]$ disql dexp/"www.cndba.cn"

Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 9.676(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> create table inc_bak as select * from sysobjects;
executed successfully
used time: 15.214(ms). Execute id is 1559.
SQL> 
SQL> BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/dm/dm_bak' BACKUPSET  '/dm/dm_bak2/ts_incre_bak_02_01';
executed successfully
used time: 00:00:01.100. Execute id is 1560.
SQL> create table inc_bak2 as select * from sysobjects;
executed successfully
used time: 15.109(ms). Execute id is 1561.

#注意这里报错:begin LSN [145846] <= base end LSN[145969], cancel.
SQL> BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/dm/dm_bak', '/dm/dm_bak2' BACKUPSET '/dm/dm_bak3/ts_incre_bak_02_02';
BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/dm/dm_bak', '/dm/dm_bak2' BACKUPSET '/dm/dm_bak3/ts_incre_bak_02_02';
[-8084]:begin LSN [145846] <= base end LSN[145969], cancel.
used time: 00:00:02.047. Execute id is 0.

#切换下日志在备份就好了:
SQL> alter system switch logfile;
executed successfully
used time: 38.074(ms). Execute id is 0.
SQL> BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/dm/dm_bak', '/dm/dm_bak2' BACKUPSET '/dm/dm_bak3/ts_incre_bak_02_02';
executed successfully
used time: 00:00:01.116. Execute id is 1569.
SQL> 

5) 校验表空间备份。此步骤为可选,如果确定备份文件合法可不进行备份校验。
SQL> SELECT SF_BAKSET_CHECK('DISK','/dm/dm_bak3/ts_incre_bak_02_02');

LINEID     SF_BAKSET_CHECK('DISK','/dm/dm_bak3/ts_incre_bak_02_02')
---------- --------------------------------------------------------
1          1

used time: 8.659(ms). Execute id is 1570.

6) 修改表空间为脱机:
SQL> ALTER TABLESPACE MAIN OFFLINE;
executed successfully
used time: 161.507(ms). Execute id is 1571.

7) 使用增量备份 ts_incre_bak_02_02 还原表空间。
SQL> RESTORE TABLESPACE MAIN FROM BACKUPSET '/dm/dm_bak3/ts_incre_bak_02_02' WITH BACKUPDIR '/dm/dm_bak2','/dm/dm_bak';
executed successfully
used time: 407.225(ms). Execute id is 1572.

8) 修改表空间为联机。
SQL> ALTER TABLESPACE MAIN ONLINE;
executed successfully
used time: 13.063(ms). Execute id is 1573.
SQL>

3.2.3使用数据库备份还原表空间

使用数据库备份还原表空间可以快速还原一个或多个表空间,而不影响数据库中其他的表空间和对象。在数据库中仅有特定的表空间损坏且没有表空间备份的情况下,可以选择使用此种方式还原。

https://www.cndba.cn/dave/article/3595
https://www.cndba.cn/dave/article/3595

具体步骤如下:

1) 配置归档。
2) 保证数据库处于 OPEN 或 MOUNT 状态。
3) 创建数据库完全备份,备份集存放目录为“/dm/dm_bak”。
SQL> BACKUP DATABASE BACKUPSET '/dm/dm_bak/db_full_bak_for_ts';
executed successfully
used time: 00:00:01.413. Execute id is 1574.

4) 校验表空间备份。此步骤为可选,如果确定备份文件合法可不进行备份校验。
SQL> SELECT SF_BAKSET_CHECK('DISK','/dm/dm_bak/db_full_bak_for_ts ');

LINEID     SF_BAKSET_CHECK('DISK','/dm/dm_bak/db_full_bak_for_ts')
---------- -------------------------------------------------------
1          1

used time: 11.955(ms). Execute id is 1575.

5) 修改表空间为脱机。
SQL> ALTER TABLESPACE MAIN OFFLINE;
executed successfully
used time: 110.527(ms). Execute id is 1576.

6) 还原表空间。
SQL> RESTORE TABLESPACE MAIN FROM BACKUPSET '/dm/dm_bak/db_full_bak_for_ts';
executed successfully
used time: 422.803(ms). Execute id is 1577.

7) 修改表空间为联机。
SQL> ALTER TABLESPACE MAIN ONLINE;
executed successfully
used time: 13.168(ms). Execute id is 1578.
SQL>

3.2.4指定归档目录还原

由于磁盘空间的影响,服务器归档可能出现分布在多个目录的情况。出现这种情况时就需要指定归档目录还原。还原时指定多个归档目录的操作步骤如下:

1) 备份用户表空间 MAIN。
SQL> BACKUP TABLESPACE MAIN BACKUPSET '/dm/dm_bak/ts_bak_for_arch';
executed successfully
used time: 00:00:01.122. Execute id is 1593.

2) 校验备份。此步骤可选。
SQL>SELECT SF_RMAN_BAKSET_CHECK('DISK','/dm/dm_bak/ts_bak_for_arch');

3) 还原用户表空间 MAIN。假设归档日志分布在目录为/dm/dm_arch1 和/dm/dm_arch2 两个目录下。
SQL>  ALTER TABLESPACE MAIN OFFLINE;
executed successfully
used time: 348.301(ms). Execute id is 1594.
SQL> RESTORE TABLESPACE MAIN FROM BACKUPSET '/dm/dm_bak/ts_bak_for_arch' WITH ARCHIVEDIR'/dm/dmarch2', '/dm/dmarch';
executed successfully
used time: 388.097(ms). Execute id is 1595.
SQL> ALTER TABLESPACE MAIN ONLINE;
executed successfully
used time: 14.014(ms). Execute id is 1596.
SQL>

3.2.5还原表空间中指定的数据文件

DM7 不仅支持从数据库备份和表空间备份中还原表空间,还支持还原表空间中特定的数据文件。若表空间已经被破坏,则不允许执行特定数据文件的还原。使用数据库备份还原表空间或表空间中的数据文件与使用表空间备份操作类似,区别在于 RESTORE 语句中指定的备份集为数据库备份集。因此,本节仅以使用表空间备份为例说明还原数据文件的操作步骤。

1)创建待备份的表空间 AnQing, 并在库目录下创建 3 个数据文件。

SQL> SELECT ID, PATH FROM V$DATAFILE;

LINEID     ID          PATH                              
---------- ----------- ----------------------------------
1          0           /dm/dmdbms/data/cndba/SYSTEM.DBF
2          0           /dm/dmdbms/data/cndba/ROLL.DBF
3          0           /dm/dmdbms/data/cndba/TEMP.DBF
4          0           /dm/dmdbms/data/cndba/MAIN.DBF
5          0           /dm/dmdbms/data/cndba/BOOKSHOP.DBF
6          0           /dm/dmdbms/data/cndba/DMHR.DBF
7          0           /dm/dmdbms/data/cndba/DAVE01.DBF
8          1           /dm/dmdbms/data/DAVE02.DBF

8 rows got

used time: 3.482(ms). Execute id is 1597.
SQL> CREATE TABLESPACE AnQing DATAFILE 'AnQing01.dbf' SIZE 128;
executed successfully
used time: 45.376(ms). Execute id is 1598.
SQL> ALTER TABLESPACE AnQing ADD DATAFILE 'AnQing02.dbf' SIZE 128;
executed successfully
used time: 19.353(ms). Execute id is 1599.
SQL>  ALTER TABLESPACE AnQing ADD DATAFILE 'AnQing03.dbf' SIZE 128;
executed successfully
used time: 20.790(ms). Execute id is 1600.

2) 备份表空间。
SQL> BACKUP TABLESPACE ANQING BACKUPSET '/dm/dm_bak/ts_bak_for_dbf';
executed successfully
used time: 00:00:01.092. Execute id is 1603.


3)查询数据文件的文件编号或路径。还原指定的数据文件需知道数据文件对应的文件编号或路径,相关信息可通过查询动态视图 V$DATAFILE 获取。
SQL> SELECT ID, PATH FROM V$DATAFILE;

LINEID     ID          PATH                              
---------- ----------- ----------------------------------
1          0           /dm/dmdbms/data/cndba/SYSTEM.DBF
2          0           /dm/dmdbms/data/cndba/ROLL.DBF
3          0           /dm/dmdbms/data/cndba/TEMP.DBF
4          0           /dm/dmdbms/data/cndba/MAIN.DBF
5          0           /dm/dmdbms/data/cndba/BOOKSHOP.DBF
6          0           /dm/dmdbms/data/cndba/DMHR.DBF
7          0           /dm/dmdbms/data/cndba/DAVE01.DBF
8          1           /dm/dmdbms/data/DAVE02.DBF
9          0           /dm/dmdbms/data/cndba/AnQing01.dbf
10         1           /dm/dmdbms/data/cndba/AnQing02.dbf
11         2           /dm/dmdbms/data/cndba/AnQing03.dbf

11 rows got

used time: 1.191(ms). Execute id is 1602.


4) 校验备份。此步骤为可选。
SQL> SELECT SF_BAKSET_CHECK('DISK','/dm/dm_bak/ts_bak_for_dbf');

LINEID     SF_BAKSET_CHECK('DISK','/dm/dm_bak/ts_bak_for_dbf')
---------- ---------------------------------------------------
1          1

used time: 10.494(ms). Execute id is 1605.

5) 通过文件编号 还原表空间ANQING中的数据文件AnQing02.dbf 和AnQing03.dbf。
SQL> ALTER TABLESPACE ANQING OFFLINE;
executed successfully
used time: 108.058(ms). Execute id is 1606.
SQL> RESTORE TABLESPACE ANQING DATAFILE 1, 2 FROM BACKUPSET '/dm/dm_bak/ts_bak_for_dbf';
executed successfully
used time: 276.723(ms). Execute id is 1607.
SQL> ALTER TABLESPACE ANQING ONLINE;
executed successfully
used time: 22.790(ms). Execute id is 1608.
SQL> 

如果不想使用文件编号还原,使用指定数据文件路径还原数据文件的语句如下:
SQL>RESTORE TABLESPACE ANQING DATAFILE '/dm/dmdbms/data/cndba/AnQing02.dbf', '/dm/dmdbms/data/cndba/AnQing03.dbf' FROM BACKUPSET '/dm/dm_bak/ts_bak_for_dbf';

4表备份与还原

4.1 语法说明

与备份数据库与表空间不同,备份表不需要服务器配置归档,DIsql 中输入以下即可备份用户表:https://www.cndba.cn/dave/article/3595

SQL>BACKUP TABLE TAB_01 BACKUPSET ‘tab_bak_01’;
备份集“tab_bak_01”会生成到默认的备份路径下。如要设置其他备份选项需参考下文的备份表语法。

备份语法如下:

BACKUP TABLE <表名>
[TO <备份名>]
BACKUPSET [‘<备份集路径>’] [DEVICE TYPE <介质类型> [PARMS ‘<介质参数>’]]
[BACKUPINFO ‘<备份集描述>’]
[MAXPIECESIZE <备份片限制大小>]
[IDENTIFIED BY <加密密码>[WITH ENCRYPTION ][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]]
[TRACE FILE ‘ ‘] [TRACE LEVEL ]

还原语法如下:

RESTORE TABLE [<表名>][STRUCT]
[WITH INDEX | WITHOUT INDEX] [WITH CONSTRAINT|WITHOUT CONSTRAINT]
FROM BACKUPSET’<备份集路径>’ [DEVICE TYPE <介质类型> [PARMS ‘<介质参数>’]]
[IDENTIFIED BY <密码>] [ENCRYPT WITH <加密算法>]
[TRACE FILE ‘ ‘] [TRACE LEVEL ];

4.2 操作示例

4.2.1备份

表备份拷贝指定表所使用的所有数据页到备份集中,并记录各个数据页之间的逻辑关系用来恢复表数据结构。表备份均为联机完全备份,不需要备份归档日志,不存在增量备份之说。当数据库中某张表比较重要而又没必要备份整个数据库或表空间时就可以选择表备份。

#备份表语句:
SQL> select user();

LINEID     USER()
---------- ------
1          SYSDBA

used time: 2.947(ms). Execute id is 1497.
SQL> backup table dexp backupset '/dm/dm_bak/tab_dexp_01';
backup table dexp backupset '/dm/dm_bak/tab_dexp_01';
[-2106]:Error in line: 1
Invalid table or view name [DEXP].
used time: 1.603(ms). Execute id is 0.

#表备份要以表的用户来进行备份,或者加模式名:
SQL>  backup table dexp.dexp backupset '/dm/dm_bak/tab_dexp_02';
executed successfully
used time: 00:00:01.242. Execute id is 1502.
SQL> 

SQL> conn DEXP/"www.cndba.cn"
Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 10.679(ms)
SQL> backup table dexp backupset '/dm/dm_bak/tab_dexp_01';
executed successfully
used time: 00:00:01.253. Execute id is 1499.
SQL> host ls -lrt /dm/dm_bak/tab_dexp_01
总用量 304
-rw-r--r-- 1 dmdba dinstall 242176  9月  2 09:06 tab_dexp_01.bak
-rw-r--r-- 1 dmdba dinstall  56832  9月  2 09:06 tab_dexp_01.meta

SQL>

4.2.2还原

执行表还原,数据库必须处于 OPEN 状态,MOUNT 和 SUSPEND 状态下不允许执行表还原。与表空间还原不同,表还原不需要配置归档。表还原是联机完全备份还原,不需要借助本地归档日志,所以还原后不需要恢复。

表还原实质是表内数据的还原,以及索引和约束等的重建。如果表上没有索引和约束的信息,可以直接进行恢复,步骤如下:

#创建测试表:
SQL> CREATE TABLE TAB_FOR_RES_01(C1 INT);
executed successfully
used time: 7.465(ms). Execute id is 1503.
#备份表:
SQL> BACKUP TABLE TAB_FOR_RES_01 BACKUPSET '/dm/dm_bak/tab_bak_for_res_01';
executed successfully
used time: 00:00:01.223. Execute id is 1504.
#还原校验:可选:
SQL> SELECT SF_BAKSET_CHECK('DISK','/dm/dm_bak/tab_bak_for_res_01');

LINEID     SF_BAKSET_CHECK('DISK','/dm/dm_bak/tab_bak_for_res_01')
---------- -------------------------------------------------------
1          1

used time: 11.949(ms). Execute id is 1505.

#还原表:
SQL> RESTORE TABLE TAB_FOR_RES_01 FROM BACKUPSET '/dm/dm_bak/tab_bak_for_res_01';
executed successfully
used time: 82.205(ms). Execute id is 1506.
SQL> 


但如果表上有索引和约束,则会有所区别,示例如下:

#创建待备份的表。
SQL> CREATE TABLE TAB_FOR_RES_02(C1 INT);
executed successfully
used time: 6.526(ms). Execute id is 1507.

#创建索引。
SQL> CREATE INDEX I_TAB_FOR_RES_02 ON TAB_FOR_RES_02(C1);
executed successfully
used time: 12.657(ms). Execute id is 1508.

#备份表。
SQL> BACKUP TABLE TAB_FOR_RES_02 BACKUPSET '/dm/dm_bak/tab_bak_for_res_02';
executed successfully
used time: 00:00:01.244. Execute id is 1509.

#校验备份。此步骤为可选:
SQL> SELECT SF_BAKSET_CHECK('DISK','/dm/dm_bak/tab_bak_for_res_02');

LINEID     SF_BAKSET_CHECK('DISK','/dm/dm_bak/tab_bak_for_res_02')
---------- -------------------------------------------------------
1          1

used time: 10.578(ms). Execute id is 1510.

#因为表上有索引,直接还原数据会报错:
SQL> RESTORE TABLE TAB_FOR_RES_02 FROM BACKUPSET '/dm/dm_bak/tab_bak_for_res_02';
RESTORE TABLE TAB_FOR_RES_02 FROM BACKUPSET '/dm/dm_bak/tab_bak_for_res_02';
[-8327]:the table to be restored has secondary indexes or extra constraints.
used time: 28.359(ms). Execute id is 0.

#执行表结构还原。表备份和表中都包含索引,如果直接执行表数据还原会报错:还原表中存在二级索引或冗余约束。

SQL> RESTORE TABLE TAB_FOR_RES_02 STRUCT FROM BACKUPSET '/dm/dm_bak/tab_bak_for_res_02';
executed successfully
used time: 41.682(ms). Execute id is 1512.

#执行表数据还原。
SQL> RESTORE TABLE TAB_FOR_RES_02 FROM BACKUPSET '/dm/dm_bak/tab_bak_for_res_02';
executed successfully
used time: 84.397(ms). Execute id is 1513.
SQL> 


当然,也可以选择在还原时不重建索引或者不还原约束:

#按照官网的手册,这里是不需要表重构的,但实际测试必须重构,不然报错:
SQL> restore table tab_for_res_02 without index from backupset '/dm/dm_bak/tab_bak_for_res_02';
restore table tab_for_res_02 without index from backupset '/dm/dm_bak/tab_bak_for_res_02';
[-8327]:the table to be restored has secondary indexes or extra constraints.
used time: 35.045(ms). Execute id is 0.

SQL> RESTORE TABLE TAB_FOR_RES_02 STRUCT FROM BACKUPSET '/dm/dm_bak/tab_bak_for_res_02';
executed successfully
used time: 45.707(ms). Execute id is 1547.

#还原表数据,但不重建索引。
SQL> restore table tab_for_res_02 without index from backupset '/dm/dm_bak/tab_bak_for_res_02';
executed successfully
used time: 71.846(ms). Execute id is 1548.
SQL> 

#还原表数据,但不还原约束。
SQL>RESTORE TABLE TAB_FOR_RES_02 WITHOUT CONSTRAINT FROM BACKUPSET '/dm/dm_bak/tab_bak_for_res_02';

5备份信息管理

5.1 备份集搜索目录

备份集搜索目录记录在内存中,当执行动态视图或批量删除备份集时,均会从这些指定目录中先搜索所有备
份集信息。
备份目录主要涉及以下3个操作:

1)SF_BAKSET_BACKUP_DIR_ADD函数:添加备份目录。若添加目录已经存在或者为库默认备份路径,则认为已经存在,不添加,但也不报错。
2)SF_BAKSET_BACKUP_DIR_REMOVE函数:删除备份目录。若删除目录为库默认备份路径,不进行删除,认为删除失败。若指定目录存在于记录的合法目录中,则删除;不存在或者为空则跳过,正常返回。1:目录删除成功、目录不存在或者目录为空;0:目录为库默认备份路径;其他情况报错。
3)SF_BAKSET_BACKUP_DIR_REMOVE_ALL函数:清理全部备份目录,默认备份目录除外。

SQL> SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm/dm_bak');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm/dm_bak')
---------- ---------------------------------------------
1          1

used time: 2.283(ms). Execute id is 1610.

SQL> SELECT SF_BAKSET_BACKUP_DIR_REMOVE('DISK','/dm/dm_bak');

LINEID     SF_BAKSET_BACKUP_DIR_REMOVE('DISK','/dm/dm_bak')
---------- ------------------------------------------------
1          1

used time: 1.709(ms). Execute id is 1611.

SQL> SELECT SF_BAKSET_BACKUP_DIR_REMOVE_ALL() ;

LINEID     SF_BAKSET_BACKUP_DIR_REMOVE_ALL()
---------- ---------------------------------
1          1

used time: 1.834(ms). Execute id is 1612.
SQL>

5.2 备份集校验与删除

在单个备份集删除时并行备份中的子备份集不允许单独删除;在给定备份集搜集目录中发现存在引用删除备份集作为基备份的需要执行级联删除,默认报错。批量删除备份集时,跳过收集到的单独的子备份集。

https://www.cndba.cn/dave/article/3595

相关的函数如下:

 SF_BAKSET_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

SF_BAKSET_CHECK 函数:对备份集进行校验。

SQL> SELECT SF_BAKSET_CHECK('DISK','/dm/dm_bak/ts_bak_for_dbf');
LINEID     SF_BAKSET_CHECK('DISK','/dm/dm_bak/ts_bak_for_dbf')
---------- ---------------------------------------------------
1          1
used time: 10.494(ms). Execute id is 1605.

SF_BAKSET_REMOVE 函数:删除指定设备类型和指定备份集目录的备份集。一次只检查一个合法.meta 文件,然
后删除对应备份集;若存在非法或非正常备份的.meta 文件,则报错或直接返回,不会接着检查下一个.meta 文件;若同一个备份集下还存在其它备份文件或备份集,则只删除备份文件,不会删除整个备份集。

SQL> BACKUP DATABASE FULL BACKUPSET '/dm/dm_bak/db_bak_for_remove';
executed successfully
used time: 00:00:01.263. Execute id is 1613.
SQL> SELECT SF_BAKSET_REMOVE('DISK','/dm/dm_bak/db_bak_for_remove');

LINEID     SF_BAKSET_REMOVE('DISK','/dm/dm_bak/db_bak_for_remove')
---------- -------------------------------------------------------
1          1

used time: 56.013(ms). Execute id is 1615.

SF_BAKSET_REMOVE_BATCH 函数: 批量删除满足指定条件的所有备份集。

SQL> SELECT SF_BAKSET_REMOVE_BATCH ('DISK', now(), NULL, NULL);

LINEID     SF_BAKSET_REMOVE_BATCH('DISK',NOW(),NULL,NULL)
---------- ----------------------------------------------
1          1

used time: 27.335(ms). Execute id is 1616.
SQL>

SP_DB_BAKSET_REMOVE_BATCH 过程:批量删除指定时间之前的数据库备份集。使用该方法前,需要先使用
SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。

SQL> BACKUP DATABASE FULL BACKUPSET '/dm/dm_bak/db_bak_for_batch_del';
executed successfully
used time: 00:00:01.237. Execute id is 1617.
SQL> SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm/dm_bak');

LINEID     SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm/dm_bak')
---------- ---------------------------------------------
1          1

used time: 1.493(ms). Execute id is 1618.
SQL> CALL SP_DB_BAKSET_REMOVE_BATCH('DISK', NOW());
DMSQL executed successfully
used time: 38.745(ms). Execute id is 1619.
SQL>

SP_TS_BAKSET_REMOVE_BATCH 过程: 批量删除指定表空间对象及指定时间之前的表空间备份集。使用该方法前,需要先使用SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。

SQL>BACKUP TABLESPACE MAIN BACKUPSET '/dm/dm_bak/ts_bak_for_batch_del';
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm/dm_bak');
SQL>CALL SP_TS_BAKSET_REMOVE_BATCH('DISK',NOW(),'MAIN');

SP_TAB_BAKSET_REMOVE_BATCH 过程:批量删除指定表对象及指定时间之前的表备份集。使用该方法前,需要先使用SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。

SQL>CREATE TABLE TAB_FOR_BATCH_DEL(C1 INT);
SQL>BACKUP TABLE TAB_FOR_BATCH_DEL BACKUPSET'/home/dm_bak/tab_bak_for_batch_del';
SQL> SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
SQL> CALL SP_TAB_BAKSET_REMOVE_BATCH('DISK',NOW(),'SYSDBA','TAB_FOR_BATCH_DEL');

SP_ARCH_BAKSET_REMOVE_BATCH 过程:批量删除指定时间之前的归档备份集。使用该方法前,需要先使用SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。

SQL>BACKUP ARCHIVELOG BACKUPSET '/dm/dm_bak/arch_bak_for_batch_del';
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm/dm_bak');
SQL>CALL SP_ARCH_BAKSET_REMOVE_BATCH('DISK', NOW());

5.3 查看备份信息

DM7 提供了一系列动态视图供用户查看备份集相关信息,在查看之前应先使用SF_BAKSET_BACKUP_DIR_ADD 添加备份集目录,否则只显示默认备份路径下的备份集信息,使用方法如下例所示:

SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD(‘DISK’, ‘/dm/dm_bak’);

下面逐个介绍 DM7 提供的备份相关动态视图。
 V$BACKUPSET: V$BACKUPSET 显示备份集基本信息。

SQL>BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_info';
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');
SQL>SELECT DEVICE_TYPE,BACKUP_PATH, TYPE, RANGE# FROM V$BACKUPSET;

V$BACKUPSET_DBINFO: V$BACKUPSET_DBINFO 显示备份集的数据库相关信息。

SQL>BACKUP TABLETAB_01 BACKUPSET '/home/dm_bak/tab_bak_01';
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');
SQL>SELECT BACKUP_PATH, PAGE_SIZE, EXTENT_SIZE, CASE_SENSITIVE FROM 
V$BACKUPSET_DBINFO WHERE BACKUP_PATH='/home/dm_bak/tab_bak_01';

V$BACKUPSET_DBF:显示备份集中数据文件的相关信息,表备份时无效。

SQL>CREATE TABLESPACE TS_FOR_DBF DATAFILE'TS_FOR_DBF_01.DBF' SIZE 128;
SQL>ALTER TABLESPACE TS_FOR_DBF ADD DATAFILE'TS_FOR_DBF_02.DBF' SIZE 128;
SQL>BACKUP TABLESPACE TS_FOR_DBF BACKUPSET '/home/dm_bak/ts_bak_for_dbf';
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');
SQL>SELECT FILE_SEQ, TS_ID, FILE_ID, TS_NAME, FILE_NAME FROM V$BACKUPSET_DBF WHERE BACKUPPATH ='/home/dm_bak/ts_bak_for_dbf';

V$BACKUPSET_ARCH:显示备份集中归档文件的信息,且仅归档备份才会有数据。

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_arch';
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');
SQL>SELECT BACKUPPATH, FILE_SEQ, BEGIN_LSN, END_LSN FROM V$BACKUPSET_ARCH WHERE BACKUPPATH='/home/dm_bak/db_bak_for_arch';

V$BACKUPSET_BKP:显示备份集的备份片信息。
```dave
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_bkp';
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');
SQL>SELECT BACKUPPATH, BKP_NTH, FILE_NAME, BKP_LEN FROM V$BACKUPSET_BKP WHERE BACKUPPATH='/home/dm_bak/db_bak_for_bkp';

V$BACKUPSET_SEARCH_DIRS:显示备份集搜索目录。

SQL>SELECT SF_BAKSET_BACKUP_DIR_REMOVE_ALL();
SQL>SELECT * FROM V$BACKUPSET_SEARCH_DIRS;

V$BACKUPSET_TABLE:显示表备份集中备份表信息,仅表备份有效。

SQL>CREATE TABLE TAB_FOR_INFO(C1 INT);
SQL>BACKUP TABLE TAB_FOR_INFO TO TAB_BAK_FOR_INFO BACKUPSET '/home/dm_bak/tab_bak_for_info';
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');
SQL>SELECT BACKUPNAME, TABLENAME FROM V$BACKUPSET_TABLE WHERE BACKUPPATH='/home/dm_bak/tab_bak_for_info';

V$BACKUPSET_SUBS:显示并行备份中生成的子备份集信息。

https://www.cndba.cn/dave/article/3595

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_subs' PARALLEL 3;
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');
SQL>SELECT BACKUPPATH, BKP_NUM, DBF_NUM FROM V$BACKUPSET_SUBS;

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2297
    原创
  • 3
    翻译
  • 637
    转载
  • 198
    评论
  • 访问:9483545次
  • 积分:4535
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ