备份大于天
数据库备份是 DBA 日常最重要的工作内容。备份的主要目的是数据容灾,保证数据的安全性,在数据库发生故障时,通过还原备份集,将数据恢复到可用状态。
备份相关原理及概念介绍
DM 数据库中的数据存储在数据库的物理数据文件中,数据文件按照页、簇和段的方式进行管理,数据页是最小的数据存储单元。任何一个对 DM 数据库的操作,归根结底都是对某个数据文件页的读写操作。
因此,DM 备份的本质就是从数据库文件中拷贝有效的数据页保存到备份集中,这里的有效数据页包括数据文件的描述页和被分配使用的数据页。而在备份的过程中,如果数据库系统还在继续运行,这期间的数据库操作并不是都会立即体现到数据文件中,而是首先以日志的形式写到归档日志中,因此,为了保证用户可以通过备份集将数据恢复到备份结束时间点的状态,就需要将备份过程中产生的归档日志也保存到备份集中。
还原与恢复是备份的逆过程。还原是将备份集中的有效数据页重新写入目标数据文件的过程。恢复则是指通过重做归档日志,将数据库状态恢复到备份结束时的状态;也可以恢复到指定时间点和指定 LSN。恢复结束以后,数据库中可能存在处于未提交状态的活动事务,这些活动事务在恢复结束后的第一次数据库系统启动时,会由 DM 数据库自动进行回滚。
备份集
备份集用来存放备份过程中产生的备份数据及备份信息。一个备份集对应了一次完整的备份。一般情况下,一个备份集就是一个目录,备份集包含一个或多个备份片文件,以及一个备份元数据文件。并行备份和非并行备份情况下,备份集里的内容略有不同。
备份片
备份片用来存储备份数据的文件。备份时,目标数据文件内容或归档日志内容经过处理后,都会存放到各自的备份片文件中。备份片文件后缀为.bak,用来存放备份数据,备份集中存放数据页的备份片称为数据备份片,存放 REDO 日志的备份片称为日志备份片。
备份片的大小可以在备份时通过 MAXPIECESIZE 指定,一个备份集中可能生成多个备份片。
元数据
元数据文件用来存放备份信息,元数据文件的后缀为.meta。通过元数据文件,可以了解整个备份集信息。元数据文件中包含的备份信息包括:
- 备份集本身相关的信息,如是否联机备份,备份的范围,备份的加密信息,以及备份的压缩信息等;
- 备份源库的建库参数信息,如 DSC 的节点数,是否大小写敏感,PAGE_CHECK 属性等;
- 数据文件信息,如备份了哪些数据文件,文件大小,以及文件相关的表空间信息等;
- 备份片的信息,如包含哪些备份片文件、备份片大小等信息;
- 备份库的 dm.ini参数信息和密钥文件(dm_service.prikey或者dm_external.config,若指定 usbkey 加密,则不备份)。
联机备份和脱机备份
联机备份
数据库处于运行状态、并正常提供数据库服务情况下进行的备份操作,我们称为联机备份。联机备份不影响数据库正常提供服务,是最常用的备份手段之一。
联机备份时,可能存在一些处于活动状态的事务正在执行,为确保备份数据的一致性,需要将备份期间产生的 REDO 日志一起备份。因此,只能在配置本地归档、并开启本地归档的数据库上执行联机备份。
脱机备份
数据库处于关闭状态时进行的备份操作,被称为脱机备份。只有已经关闭的数据库才允许执行脱机备份。正在运行的数据库,无法执行。
数据备份和归档日志备份
按照备份内容不同,可以分为数据备份和归档日志备份。
数据备份
数据备份主要针对数据文件内容,包括库备份、表空间备份和表备份。其中,未指定WITHOUT LOG 参数执行的库备份和表空间备份还包含了 REDO 日志备份。
库备份,顾名思义就是对整个数据库执行的备份。库备份会拷贝数据库中所有数据文件的有效数据页。分为完全备份 FULL 和增量备份 INCREMENT 两种。缺省为 FULL。
SQL> BACKUP DATABASE BACKUPSET 'db_bak_01'; 操作已执行 已用时间: 00:00:03.064. 执行号:307200. 语句执行完后会在默认的备份路径下生成名为db_bak_01的备份集目录,默认的备份路径为 dm.ini 中 BAK_PATH 配置的路径,若未配置,则使用 SYSTEM_PATH 下的 bak目录。 [dmdba@dataguard-pri bak]$ pwd /dm/data_new/DAMENG/bak [dmdba@dataguard-pri bak]$ ll total 0 drwxr-xr-x 2 dmdba dinstall 72 Sep 4 09:52 db_bak_01 [dmdba@dataguard-pri bak]$ cd db_bak_01 [dmdba@dataguard-pri db_bak_01]$ ll total 11152 -rw-r--r-- 1 dmdba dinstall 8704 Sep 4 09:52 db_bak_01_1.bak -rw-r--r-- 1 dmdba dinstall 11295232 Sep 4 09:52 db_bak_01.bak -rw-r--r-- 1 dmdba dinstall 108032 Sep 4 09:52 db_bak_01.meta SQL> BACKUP DATABASE BACKUPSET '/dm/bak/'; 操作已执行 已用时间: 00:00:03.022. 执行号:307202. 指定备份集路径/dm/bak/ SQL> BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET '/dm/bak/db_bak_3_02'; 操作已执行 已用时间: 00:00:03.013. 执行号:307203. 创建备份集,备份名设置为WEEKLY_FULL_BAK,且指定路径名 SQL> BACKUP DATABASE BACKUPSET '/dm/bak/db_bak_3_03' BACKUPINFO '完全备份'; 操作已执行 已用时间: 00:00:03.021. 执行号:307204. 创建备份为备份集添加描述信息为“完全备份”。 SQL> BACKUP DATABASE BACKUPSET '/dm/bak/db_bak_3_05' MAXPIECESIZE 300; 操作已执行 已用时间: 00:00:02.972. 执行号:307205. 创建备份限制备份片大小为 300MB。 SQL> BACKUP DATABASE BACKUPSET '/dm/bak/db_bak_3_06' COMPRESSED LEVEL 5; 操作已执行 已用时间: 00:00:03.095. 执行号:307206. 执行备份压缩,压缩级别设置为 5。 SQL> BACKUP DATABASE BACKUPSET '/dm/bak/db_bak_3_07' PARALLEL 8; 操作已执行 已用时间: 00:00:07.240. 执行号:307208. 创建并行备份,指定并行数为 8。 SQL> BACKUP DATABASE FULL BACKUPSET '/dm/bak/db_full_bak_01'; 操作已执行 已用时间: 00:00:03.026. 执行号:307209. SQL> BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dm/bak' BACKUPSET '/dm/bak/db_increment_bak_02'; 操作已执行 已用时间: 00:00:06.976. 执行号:307210. 创建完全备份与增量备份 以上备份都属于联机备份 |
表空间备份是针对特定表空间执行的备份,又称为表空间级备份。表空间备份只能在联机状态下执行。
表备份则拷贝指定表的所有数据页到备份集中,并会记录各个数据页之间的逻辑关系用以恢复。表备份只能在联机状态下执行,一次表备份操作只能备份一张用户表,并且不支持增量表备份。
SQL> BACKUP TABLESPACE MAIN BACKUPSET 'ts_bak_01'; 操作已执行 已用时间: 00:00:02.890. 执行号:307213. 备份表空间MAIN,备份集“ts_bak_01”会生成到默认的备份路径下。 SQL> BACKUP TABLESPACE MAIN BACKUPSET 'ts_full_bak_01'; 操作已执行 已用时间: 00:00:02.886. 执行号:307214. SQL> BACKUP TABLESPACE MAIN INCREMENT BACKUPSET 'ts_increment_bak_01'; 操作已执行 已用时间: 00:00:06.822. 执行号:307215. SQL> BACKUP TABLESPACE MAIN INCREMENT BASE ON BACKUPSET 'ts_full_bak_01' BACKUPSET 'ts_increment_bak_02'; 操作已执行 已用时间: 00:00:02.893. 执行号:307216. 表空间的全量与增量备份。增量备份 ts_increment_bak_02 若不指定备份集ts_full_bak_01 作为基备份,那么默认会使用最近一次的备份集 ts_increment_bak_01 作为基备份。 |
表备份主要包括数据备份和元信息备份两部分。与库备份和表空间备份不同,表备份不
是直接扫描数据文件,而是从 BUFFER 中加载数据页,拷贝到备份片文件中。表备份的元
信息则包括建表语句、重建约束语句、重建索引语句,以及其他相关属性信息。表备份不需
要配置归档就可以执行,并且不支持增量表备份。
SQL> BACKUP TABLE PERSON BACKUPSET 'person_bak_01'; 操作已执行 已用时间: 00:00:02.850. 执行号:307218. 备份集“tab_bak_01”会生成到默认的备份路径下 SQL> BACKUP TABLE PERSON BACKUPSET '/dm/bak/tab_bak_01'; 操作已执行 已用时间: 00:00:02.860. 执行号:307219. 为表备份指定备份路径 |
加密备份
DM 提供加密备份的方式保护用户的备份集,没有权限的用户无法访问加密的备份集。 备份语句中通过指定 IDENTIFIED BY...WITH ENCRYPTION...ENCRYPT WITH... 执行加密备份。其中,IDENTIFIED BY 子句指定加密密码,密码长度为 9 到 48 个字节, 若密码长度不符合要求会报错;WITH ENCRYPTION 子句指定加密类型,加密类型分为简 单加密和复杂加密,简单加密是对备份文件设置口令,但文件内容仍以明文存储,复杂加密 则对备份文件进行完全的加密,备份文件以密文方式存储,用户可根据备份数据的重要程度 选择加密类型;ENCRYPT WITH 子句指定加密算法,默认使用的加密算法为 AES256_CFB。
SQL> BACKUP DATABASE BACKUPSET '/dm/bak/db_bak_for_encrypt1' IDENTIFIED BY"cdb546789"; 操作已执行 已用时间: 00:00:03.067. 执行号:307224. 以默认加密算法加密备份 SQL> BACKUP DATABASE BACKUPSET '/dm/bak/db_bak_for_encrypt2' IDENTIFIED BY "cdb546789" ENCRYPT WITH RC4; 操作已执行 已用时间: 00:00:03.056. 执行号:307225. 以RC4加密算法加密备份 对于增量备份加密,如果基备份存在加密,则增量备份使用的加密密码、加密类型和加 密算法必须与基备份保持一致;如果基备份未进行加密处理,则对增量备份使用的加密密码、 加密类型和加密算法没有特殊要求。 |
归档日志备份
归档日志备份是专门针对归档日志文件进行操作,不涉及任何数据文件内容。归档日志备份扫描归档目录收集归档日志文件,并将归档日志写入到备份集中。既可以在数据库运行状态下,执行联机归档日志备份;也可以在数据库关闭状态下执行脱机归档日志备份。
SQL> BACKUP ARCHIVE LOG ALL BACKUPSET 'arch_bak_01'; 操作已执行 已用时间: 00:00:02.898. 执行号:307220. 备份集“arch_bak_01”会生成到默认的备份路径下 SQL> select ARCH_LSN, CLSN, PATH from V$ARCH_FILE; 行号 ARCH_LSN CLSN PATH ---------- -------------------- -------------------- --------------------------------------------------------------------------------- 1 63466 63797 /dm/data_new/DAMENG/dm_arch/ARCHIVE_LOCAL1_0x6FA61FD8_EP0_2023-09-04_09-29-50.log 2 63798 63801 /dm/data_new/DAMENG/dm_arch/ARCHIVE_LOCAL1_0x6FA61FD8_EP0_2023-09-04_10-24-07.log 已用时间: 9.160(毫秒). 执行号:307221. SQL> BACKUP ARCHIVELOG LSN BETWEEN 63798 AND 63801 BACKUPSET '/dm/bak/arch_bak_time_798-801'; 操作已执行 已用时间: 00:00:02.916. 执行号:307222. 以LSN号备份归档 |
一致性备份和非一致性备份
按照备份集中的数据是否满足一致性,可以将备份划分为一致性备份和非一致性备份。
一致性备份
不指定 WITHOUT LOG 选项的备份生成的备份集就是一致性备份。一致性备份的备份集包含了完整的数据文件内容和 REDO 日志信息;利用一个一致性备份集就可以将数据库恢复到备份时状态。
非一致性备份
指定 WITHOUT LOG 选项的备份生成的备份集都是非一致性备份集。非一致性备份的备份集只包含数据文件相关内容,没有 REDO 日志信息,利用非一致性备份集还原的数据库,无法直接启动,必须借助归档日志进行恢复之后才可以启动。但是有一种情况除外:数据库正常关闭时,会生成完全检查点,脱机备份生成的备份集中,不包含任何 REDO 日志。因此脱机备份一个正常关闭的数据库,既可以从归档日志恢复也可以从备份集恢复。表空间备份生成的备份集是非一致性备份集。
完全备份和增量备份
按照备份数据完整性,可将备份分为完全备份和增量备份。库备份和表空间备份支持增量备份,表备份不支持增量备份。
完全备份
完全备份生成的备份集包含了指定库(或者表空间)的全部有效数据页。当数据规模比较大的情况下,生成的完全备份集通常会比较大,而且备份时间也会比较长。
增量备份
增量备份是在某个特定备份集基础上,收集数据库新修改的数据页进行备份,可以有效减少备份集的空间占用、提高备份速度。这个特定的、已经存在的备份集称为增量备份的基备份,根据对基备份的要求不同,DM 的增量备份分为以下两种:
1.差异增量备份
差异增量备份的基备份既可以是一个完全备份集,也可以是一个增量备份集。
利用增量备份进行还原操作时,要求其基备份必须是完整的;如果差异增量备份的基备份本身也是一个增量备份,那么同样要求其基备份是完整的;任何一个增量备份,最终都是以一个完全备份作为其基备份。因此,完全备份是增量备份的基础。
2. 累积增量备份
累积增量备份的基备份只能是完全备份集,而不能是增量备份集。
增量备份的基备份集既可以是脱机备份生成的,也可以是联机备份生成的,脱机增量备份的基备份集可以是联机备份生成的,联机增量备份的基备份集也可以是脱机备份生成的。
联机还原和脱机还原
联机还原
联机还原指数据库处于运行状态时,通过 SQL 语句执行还原操作。表还原可以在联机状态下执行。
脱机还原
脱机还原指数据库处于关闭状态时执行的还原操作,脱机还原通过DMRMAN工具进行。库备份、表空间备份和归档备份,可以执行脱机还原。脱机还原操作的目标库必须处于关闭状态。
数据还原和归档日志还原
根据备份集类型,数据还原可以分为库还原、表空间还原和表还原。库还原和表空间必须脱机执行;表还原操作只能联机执行。
表空间还原的数据来源既可以是表空间备份集,也可以是库备份集。还原的目标表空间不能是 TEMP 表空间,只能是 MAIN、SYSTEM、ROLL 表空间,或者用户定义的表空间。
表还原从表备份集读取数据,重新恢复目标表数据,还会在目标表上重建索引、约束。
归档日志还原则将归档日志备份集中的归档日志内容,重新生成到指定目录中。
完全还原和增量还原
完全还原是指直接利用完全备份集进行数据还原操作。增量还原指通过增量备份集进行数据还原操作。但是考虑到增量备份集的基础一定是一个完全备份集,因此增量还原过程中隐含了一个完全还原操作。如果增量备份集的基备份集被删除了,那么单独使用这个增量备份集是无法进行还原操作的。
本地归档
REDO 日志本地归档(LOCAL),就是将 REDO 日志写入到本地归档日志文件的过程。配置本地归档情况下,REDO 日志刷盘线程将 REDO 日志写入联机 REDO 日志文件后,对应的 RLOG_PKG 由专门的归档线程负责写入本地归档日志文件中。与联机 REDO 日志文件可以被覆盖重用不同,本地归档日志文件不能被覆盖,写入其中 的 REDO 日志信息会一直保留,直到用户主动删除;如果配置了归档日志空间上限,系统会自动删除最早生成的归档 REDO 日志文件,腾出空间。
联机配置归档 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 2.543(ms) disql V8 SQL> ALTER DATABASE MOUNT; 操作已执行 已用时间: 1.120(毫秒). 执行号:0. SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST = /dm/data_new/DAMENG/dm_arch, TYPE = local, FILE_SIZE = 1024,SPACE_LIMIT = 2048,ARCH_FLUSH_BUF_SIZE=16,HANG_FLAG=1'; 操作已执行 已用时间: 2.919(毫秒). 执行号:0. 归档目录DEST = /dm/data_new/DAMENG/dm_arch目录需要提前建好 SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST = DSC1, TYPE = REMOTE, FILE_SIZE = 1024,SPACE_LIMIT = 2048, ARCH_FLUSH_BUF_SIZE=16, INCOMING_PATH = /dm/data_new/DAMENG/arch_dsc1'; 操作已执行 已用时间: 3.221(毫秒). 执行号:0. SQL> ALTER DATABASE ARCHIVELOG; ALTER DATABASE ARCHIVELOG; 第1 行附近出现错误[-808]:非法归档配置目标. 已用时间: 15.905(毫秒). 执行号:0. 使用单机做的测试,没有配置dmarch.ini和dmmal.ini,所以远程归档失败 SQL> ALTER DATABASE DELETE ARCHIVELOG 'DEST = DSC1, TYPE = REMOTE, FILE_SIZE = 1024,SPACE_LIMIT = 2048, ARCH_FLUSH_BUF_SIZE=16, INCOMING_PATH = /dm/data_new/DAMENG/arch_dsc1'; 操作已执行 已用时间: 0.487(毫秒). 执行号:0. SQL> ALTER DATABASE ARCHIVELOG; 操作已执行 已用时间: 12.260(毫秒). 执行号:0. 删除远程归档后,归档打开成功。 SQL> ALTER DATABASE OPEN; 操作已执行 已用时间: 3.072(毫秒). 执行号:0. 打开数据库 手动打开归档 [dmdba@dataguard-pri DAMENG]$ pwd /dm/data_new/DAMENG [dmdba@dataguard-pri DAMENG]$ vim dm.ini 将ARCH_INI改成 1 [dmdba@dataguard-pri DAMENG]$ vi dmarch.ini [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dm/data_new/DAMENG/dm_arch ARCH_FILE_SIZE = 1024 ARCH_SPACE_LIMIT = 2048 ARCH_FLUSH_BUF_SIZE = 16 ARCH_HANG_FLAG = 1 之后启动数据库实例,这时数据库处于归档模式 |
远程归档
顾名思义就是将归档目录配置在远程节点上。远程归档专门用于 DMDSC 环境中。远程归档采用双向配置的方式,双向配置远程归档就是两 个节点将自己的远程归档相互配置在对方机器上。集群中所有的节点,都拥有一套包括所有 节点的,完整的归档日志文件。
具体有两种配置方式:一是共享本地归档的远程归档,即将远程归档目录配置为另一节 点的本地归档目录,以此来共享它的本地归档日志文件;二是通过 MAL 发送的远程归档, 即将写入本地归档的 REDO 日志信息,通过 MAL 发送到远程节点,并写入远程节点的指定 归档目录中,形成远程归档日志文件。
联机配置远程归档 与本地配置方法一样 SQL> ALTER DATABASE MOUNT; 操作已执行 已用时间: 1.120(毫秒). 执行号:0. SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST = DSC1, TYPE = REMOTE, FILE_SIZE = 1024,SPACE_LIMIT = 2048, ARCH_FLUSH_BUF_SIZE=16, INCOMING_PATH = /dm/data_new/DAMENG/arch_dsc1'; 操作已执行 已用时间: 3.221(毫秒). 执行号:0. SQL> ALTER DATABASE ARCHIVELOG; 操作已执行 已用时间: 12.260(毫秒). 执行号:0. SQL> ALTER DATABASE OPEN; 操作已执行 已用时间: 3.072(毫秒). 执行号:0. 打开数据库,注意在没有配置本地归档的前提下,是无法配置远程归档的。 手动配置远程归档 vi /home/dmdba/dsc_config/dsc01/dm.ini ARCH_INI = 1 vi /home/dmdba/dsc_config/dsc01/dmarch.ini ARCH_LOCAL_SHARE = 1 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST =+DMARCH/dsc01/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 [ARCH_REMOTE1] ARCH_TYPE = REMOTE ARCH_DEST = DSC02 ARCH_INCOMING_PATH =+DMARCH/dsc02/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 vi /home/dmdba/dsc_config/dsc02/dm.ini ARCH_INI = 1 vi /home/dmdba/dsc_config/dsc02/dmarch.ini ARCH_LOCAL_SHARE = 1 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST =+DMARCH/dsc02/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 [ARCH_REMOTE1] ARCH_TYPE = REMOTE ARCH_DEST = DSC01 ARCH_INCOMING_PATH =+DMARCH/dsc01/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 |
归档备份
与联机备份收集备份过程中产生的 REDO 日志写入备份集不同,归档日志备份专门用来备份本地归档日志文件,将符合条件的本地归档日志文件拷贝到备份集中保存起来。归档日志备份仅备份指定数据库生成的本地归档日志文件,要求归档日志文件的DB_MAGIC 与数据库的 DB_MAGIC 保持一致。如果本地归档目录中包含多个不同数据库的归档日志文件,也只会备份一个特定数据库的归档日志。由于经过还原后数据库的DB_MAGIC 会产生变化,因此即便 PERMANENT_MAGIC 相同,DB_MAGIC 不同的数据库产生的归档日志也不会备份。
与普通的数据库备份一样,归档日志备份也支持加密与压缩功能,可以联机执行归档日志备份,也可以在数据库关闭情况下使用 DMRMAN 工具进行脱机备份。归档日志备份时,可以指定是否删除已经备份的归档日志文件,在生成归档日志备份集的同时,删除本地归档日志文件,释放磁盘空间。
归档还原
归档日志还原就是将备份集中的归档日志文件重新拷贝到指定归档目录中。使用归档日 志备份集,既可以将归档日志文件还原到指定数据(还原时指定目标库的 dm.ini)的归档 目录,也可以还原到用户指定的任意归档目录中。
管理备份集
备份管理相关系统过程与函数总结如下:
SF_BAKSET_BACKUP_DIR_ADD:添加备份目录。
SF_BAKSET_BACKUP_DIR_REMOVE:删除内存中指定的备份目录。
SF_BAKSET_BACKUP_DIR_REMOVE_ALL:删除内存中全部的备份目录。
SF_BAKSET_CHECK:对备份集进行校验。
SQL> SELECT SF_BAKSET_CHECK('DISK','/dm/bak/db_bak_for_encrypt_3'); 行号 SF_BAKSET_CHECK('DISK','/dm/bak/db_bak_for_encrypt_3') ---------- ------------------------------------------------------ 1 1 已用时间: 38.521(毫秒). 执行号:307238. |
SF_BAKSET_REMOVE:删除指定设备类型和指定备份集目录的备份集。
SQL> SELECT SF_BAKSET_REMOVE('DISK','/dm/bak/db_bak_for_remove'); 行号 SF_BAKSET_REMOVE('DISK','/dm/bak/db_bak_for_remove') ---------- ---------------------------------------------------- 1 1 |
SF_BAKSET_REMOVE_BATCH:批量删除满足指定条件的所有备份集。
SQL> SELECT SF_BAKSET_REMOVE_BATCH ('DISK', now(), NULL, NULL); 行号 SF_BAKSET_REMOVE_BATCH('DISK',NOW(),NULL,NULL) ---------- ---------------------------------------------- 1 1 已用时间: 30.382(毫秒). 执行号:307244. SQL> SELECT BACKUP_NAME FROM V$BACKUPSET_DBINFO; 未选定行 已用时间: 17.973(毫秒). 执行号:307247. 备份集被删除了 |
SF_BAKSET_REMOVE_BATCH_S:批量安全删除满足指定条件的所有库级备份集。
SP_DB_BAKSET_REMOVE_BATCH:批量删除指定时间之前的数据库备份集。
SP_TS_BAKSET_REMOVE_BATCH:批量删除指定表空间对象及指定时间之前的表空间备份集。
SP_TAB_BAKSET_REMOVE_BATCH:批量删除指定表对象及指定时间之前的表备份集。
SP_ARCH_BAKSET_REMOVE_BATCH:批量删除指定条件的归档备份集。
备份管理相关动态视图总结如下:
V$BACKUPSET:显示备份集基本信息。
SQL> SELECT BACKUP_NAME,OBJECT_NAME,BASE_NAME FROM V$BACKUPSET; 行号 BACKUP_NAME OBJECT_NAME BASE_NAME ---------- ----------------------------------- ------------- ------------------------------ 1 DB_FULL_20230904_095209_757564 DAMENG 2 TS_FULL_20230904_101041_381948 MAIN 3 TS_FULL_20230904_101336_845772 MAIN 4 TS_INCREMENT_20230904_101345_595152 MAIN TS_FULL_20230904_101336_845772 5 TS_INCREMENT_20230904_101356_395251 MAIN TS_FULL_20230904_101336_845772 6 TAB_BTREE_20230904_102016_720933 PERSON.PERSON 7 ARCH_LOG_20230904_102315_732943 ARCHIVE 7 rows got |
V$BACKUPSET_DBINFO:显示备份集的数据库相关信息。
V$BACKUPSET_DBF:显示备份集中数据文件的相关信息。
V$BACKUPSET_ARCH:显示备份集的归档信息。
V$BACKUPSET_BKP:显示备份集的备份片信息。
V$BACKUPSET_SEARCH_DIRS:显示备份集搜索目录。
V$BACKUPSET_TABLE:显示表备份集中备份表信息。
SQL> select BACKUPNAME,SCHEMANAME,USERNAME,TSNAME,TABLENAME from V$BACKUPSET_TABLE; 行号 BACKUPNAME SCHEMANAME USERNAME TSNAME TABLENAME ---------- -------------------------------- ---------- -------- -------- --------- 1 TAB_BTREE_20230904_102016_720933 PERSON SYSDBA BOOKSHOP PERSON 已用时间: 26.455(毫秒). 执行号:307230. |
V$BACKUPSET_SUBS:显示并行备份中生成的子备份集信息。
V$BACKUP_MONITOR:显示当前备份任务实时监控信息。
V$BACKUP_HISTORY:显示最近 100 条备份监控信息。
V$BACKUP_FILES:显示当前备份任务待备份数据文件列表。
表还原
SQL> SELECT * FROM TEST; 行号 ID NUM ---------- ----------- ----------- 1 1 1 2 2 2 3 3 3 已用时间: 0.520(毫秒). 执行号:307262. SQL> BACKUP TABLE TEST BACKUPSET 'TEST_BAK_01'; 操作已执行 已用时间: 00:00:02.873. 执行号:307263. SQL> TRUNCATE TABLE TEST; 操作已执行 已用时间: 6.647(毫秒). 执行号:307264. 模拟清空表数据 SQL> SELECT * FROM TEST; 未选定行 已用时间: 0.359(毫秒). 执行号:307265. SQL> RESTORE TABLE TEST FROM BACKUPSET 'TEST_BAK_01'; 操作已执行 已用时间: 27.841(毫秒). 执行号:307266. 利用表备份还原数据 SQL> SELECT * FROM TEST; 行号 ID NUM ---------- ----------- ----------- 1 1 1 2 2 2 3 3 3 已用时间: 0.699(毫秒). 执行号:307267. 删除的表数据回来了 |
使用脱机工具 DMRMAN 进行备份还原
DMRMAN(DM RECOVERY MANAGER)是 DM 的脱机备份还原管理工具,由它来统一负责库级脱机备份、脱机还原、脱机恢复等相关操作,该工具支持命令行指定参数方式和控制
台交互方式执行,降低了用户的操作难度。
[dmdba@dataguard-pri bin]$ ./dmrman dmrman V8 RMAN> exit time used: 1.163(ms) [dmdba@dataguard-pri bin]$ RMAN> BACKUP DATABASE '/dm/data_new/DAMENG/dm.ini'; BACKUP DATABASE '/dm/data_new/DAMENG/dm.ini'; file dm.key not found, use default license! [-137]:服务器正在运行或者存在其他进程正在操作同一个库 数据库在OPEN状态下,dmrman不能执行 RMAN> BACKUP DATABASE '/dm/data_new/DAMENG/dm.ini'; BACKUP DATABASE '/dm/data_new/DAMENG/dm.ini'; Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[64580], file_lsn[64580] Processing backupset /dm/data_new/DAMENG/bak/DB_DAMENG_FULL_20230905_031150_769856 [Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00] backup successfully! time used: 00:00:03.327 [dmdba@dataguard-pri DAMENG]$ vim /tmp/rman_test.txt BACKUP DATABASE '/dm/data_new/DAMENG/dm.ini' [dmdba@dataguard-pri bin]$ ./dmrman CTLFILE=/tmp/rman_test.txt dmrman V8 /tmp/rman_test.txt BACKUP DATABASE '/dm/data_new/DAMENG/dm.ini' file dm.key not found, use default license! Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[64580], file_lsn[64580] Processing backupset /dm/data_new/DAMENG/bak/DB_DAMENG_FULL_20230905_031539_424769 [Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00] backup successfully! time used: 00:00:03.302 [dmdba@dataguard-pri bin]$ ./dmrman CTLSTMT="BACKUP DATABASE '/dm/data_new/DAMENG/dm.ini';" dmrman V8 BACKUP DATABASE '/dm/data_new/DAMENG/dm.ini'; file dm.key not found, use default license! Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[64580], file_lsn[64580] Processing backupset /dm/data_new/DAMENG/bak/DB_DAMENG_FULL_20230905_031642_795657 [Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00] backup successfully! time used: 00:00:03.336 RMAN> CONFIGURE DEFAULT BACKUPDIR '/dm/bak'; configure default backupdir update successfully! DEFAULT BACKUP DIRECTORY: TOTAL COUNT :1 /dm/bak time used: 1.192(ms) 设置默认备份集搜索目录 RMAN> CONFIGURE DEFAULT BACKUPDIR ADD '/dm/data_new'; configure default backupdir add successfully! DEFAULT BACKUP DIRECTORY: TOTAL COUNT :2 /dm/bak /dm/data_new time used: 1.147(ms) 增加默认备份集搜索目录 RMAN> CONFIGURE DEFAULT ARCHIVEDIR '/dm/data_new/DAMENG/dm_arch'; configure default archivedir update successfully! DEFAULT ARCHIVE DIRECTORY: TOTAL COUNT :1 /dm/data_new/DAMENG/dm_arch time used: 0.952(ms) 配置归档日志搜索目录 RMAN> BACKUP DATABASE '/dm/data_new/DAMENG/dm.ini' FULL BACKUPSET '/dm/bak/db_full_bak_1'; BACKUP DATABASE '/dm/data_new/DAMENG/dm.ini' FULL BACKUPSET '/dm/bak/db_full_bak_1'; Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[64580], file_lsn[64580] Processing backupset /dm/bak/db_full_bak_1 [Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00] backup successfully! time used: 00:00:03.337 RMAN> BACKUP DATABASE '/dm/data_new/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/dm/bak' BACKUPSET '/dm/bak/db_increment_bak_2'; BACKUP DATABASE '/dm/data_new/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/dm/bak' BACKUPSET '/dm/bak/db_increment_bak_2'; Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[64580], file_lsn[64580] Processing backupset /dm/bak/db_increment_bak_2 [Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00] backup successfully! time used: 00:00:03.281 RMAN脱机完全备份与增量备份 RMAN> BACKUP ARCHIVE LOG DATABASE '/dm/data_new/DAMENG/dm.ini'; BACKUP ARCHIVE LOG DATABASE '/dm/data_new/DAMENG/dm.ini'; Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[64580], file_lsn[64580] Processing backupset /dm/data_new/DAMENG/bak/ARCH_LOG_20230905_035200_253046 [Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00] backup successfully! time used: 00:00:03.221 备份归档 RMAN> BACKUP ARCHIVE LOG ALL DATABASE '/dm/data_new/DAMENG/dm.ini' BACKUPSET '/dm/bak/arch_all_bak_01'; BACKUP ARCHIVE LOG ALL DATABASE '/dm/data_new/DAMENG/dm.ini' BACKUPSET '/dm/bak/arch_all_bak_01'; Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[64580], file_lsn[64580] Processing backupset /dm/bak/arch_all_bak_01 [Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00] backup successfully! time used: 00:00:03.278 备份所有归档,默认DMRMAN就是备份所有归档,该参数可以省略 RMAN> BACKUP ARCHIVE LOG LSN BETWEEN 63798 AND 63801 DATABASE '/dm/data_new/DAMENG/dm.ini' BACKUPSET '/dm/bak/arch_lsn_bak_02'; BACKUP ARCHIVE LOG LSN BETWEEN 63798 AND 63801 DATABASE '/dm/data_new/DAMENG/dm.ini' BACKUPSET '/dm/bak/arch_lsn_bak_02'; Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[64580], file_lsn[64580] Processing backupset /dm/bak/arch_lsn_bak_02 [Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00] backup successfully! time used: 00:00:03.200 通过设置 LSN 或者时间点,控制需要备份归档的范围 RMAN> BACKUP DATABASE '/dm/data_new/DAMENG/dm.ini' BACKUPSET '/dm/bak/db_bak_for_encrypt_01' IDENTIFIED BY "cdb546789"; BACKUP DATABASE '/dm/data_new/DAMENG/dm.ini' BACKUPSET '/dm/bak/db_bak_for_encrypt_01' IDENTIFIED BY ******; Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[64580], file_lsn[64580] Processing backupset /dm/bak/db_bak_for_encrypt_01 [Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00] backup successfully! time used: 00:00:03.284 RMAN> BACKUP DATABASE '/dm/data_new/DAMENG/dm.ini' BACKUPSET '/dm/bak/db_bak_for_encrypt_02' IDENTIFIED BY "cdb546789" ENCRYPT WITH RC4; BACKUP DATABASE '/dm/data_new/DAMENG/dm.ini' BACKUPSET '/dm/bak/db_bak_for_encrypt_02' IDENTIFIED BY ****** ENCRYPT WITH ******; Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[64580], file_lsn[64580] Processing backupset /dm/bak/db_bak_for_encrypt_02 [Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00] backup successfully! time used: 00:00:03.311 备份加密 RMAN> SHOW BACKUPSET '/dm/bak/db_bak_for_encrypt_01'; SHOW BACKUPSET '/dm/bak/db_bak_for_encrypt_01'; <backupset [DEVICE TYPE:DISK, BACKUP_PATH: /dm/bak/db_bak_for_encrypt_01] info start ..........> <DB INFO> system path: /dm/data_new/DAMENG ...... case sensitive: 1 log page size: 512B ...... database name: DAMENG backup name: DB_FULL_20230905_040143_848501 ...... backupset_type: NORMAL mpp_flag: FALSE backup level: offline backup type: full without log: FALSE without mirror: FALSE end_lsn: 64580 backup time: 2023-09-05 04:01:46 <FILE INFO> backupset directory: /dm/bak/db_bak_for_encrypt_01 backupset name: db_bak_for_encrypt_01 backup data file num: 5 backup piece num: 1 backup huge file num: 0 <backup_piece_list> <data_file_list> $file_seq |$group_id |$group_name |$file_id |$file_path |$mirror_path |$file_len |$copy_num |$size_flag|asm_mirror|asm_striping 1 |0 |SYSTEM |0 |/dm/data_new/DAMENG/SYSTEM.DBF | |77594624 |0 |0 |1 |0 2 |1 |ROLL |0 |/dm/data_new/DAMENG/ROLL.DBF | |134217728 |0 |0 |1 |0 3 |4 |MAIN |0 |/dm/data_new/DAMENG/MAIN.DBF | |134217728 |0 |0 |1 |0 4 |5 |BOOKSHOP |0 |/dm/data_new/DAMENG/BOOKSHOP.DBF | |157286400 |0 |0 |1 |0 5 |6 |DMHR |0 |/dm/data_new/DAMENG/DMHR.DBF | |134217728 |0 |0 |1 |0 <arch_file_list> $file_seq |$dsc_seq |$file_path |$file_len |$begin_seqno |$begin_lsn |$end_seqno |$end_lsn <huge_file_list> $group_id |$schema_id|$table_id |$column_id|$file_id |$file_len |$path <TABLESPACE INFO> <tablespace_list> $ts_id |$name |$state |$cache |$copy_num |$size_flag|$cipher_name |$opt_node 0 |SYSTEM |0 | |0 |0 | |65535 1 |ROLL |0 | |0 |0 | |65535 4 |MAIN |0 | |0 |0 | |65535 5 |BOOKSHOP |0 |NORMAL |0 |0 | |65535 6 |DMHR |0 |NORMAL |0 |0 | |65535 <backupset [DEVICE TYPE:DISK, BACKUP_PATH: /dm/bak/db_bak_for_encrypt_01] info end .> show backupsets successfully. time used: 21.757(ms) 查看备份集详细信息 RMAN> SHOW BACKUPSETS WITH BACKUPDIR '/dm/bak'; 批量查看备份集信息,该命令查看/dm/bak目录下的所有备份集信息 RMAN> CHECK BACKUPSET '/dm/bak/db_bak_for_encrypt_01'; CHECK BACKUPSET '/dm/bak/db_bak_for_encrypt_01'; [Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00] check backupset successfully. time used: 141.032(ms) 备份集校验 RMAN> REMOVE BACKUPSET '/dm/bak/db_bak_for_encrypt_01'; REMOVE BACKUPSET '/dm/bak/db_bak_for_encrypt_01'; remove backupset successfully. time used: 19.437(ms) 删除备份集 RMAN> REMOVE BACKUPSET '/dm/bak/db_full_bak_1' DATABASE '/dm/data_new/DAMENG/dm.ini' CASCADE; REMOVE BACKUPSET '/dm/bak/db_full_bak_1' DATABASE '/dm/data_new/DAMENG/dm.ini' CASCADE; remove backupset successfully. time used: 41.511(ms) 删除增量备份的基备份 RMAN> REMOVE BACKUPSETS WITH BACKUPDIR '/dm/bak'; REMOVE BACKUPSETS WITH BACKUPDIR '/dm/bak'; remove backupsets successfully. time used: 20.523(ms) 批量删除指定目录下的所有备份集 |
RMAN联机备份脱机恢复演示
SQL> BACKUP DATABASE BACKUPSET '/dm/bak/db_full_bak_for_restore'; 操作已执行 已用时间: 00:00:03.062. 执行号:600. [dmdba@dataguard-pri bak]$ scp -r /dm/bak/db_full_bak_for_restore dmdba@192.168.100.11:/home/dmdba/dmdbms/data/BACKUP_FILE_01 dmdba@192.168.100.11's password: db_full_bak_for_restore.bak 100% 10MB 70.8MB/s 00:00 db_full_bak_for_restore_1.bak 100% 17KB 15.3MB/s 00:00 db_full_bak_for_restore.meta [dmdba@DSC-CLUSTER-01 bin]$ ./dminit path=/home/dmdba/dmdbms/data db_name=DAMENG_FOR_RESTORE initdb V8 db version: 0x7000c file dm.key not found, use default license! License will expire on 2024-08-18 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL log file path: /home/dmdba/dmdbms/data/DAMENG_FOR_RESTORE/DAMENG_FOR_RESTORE01.log log file path: /home/dmdba/dmdbms/data/DAMENG_FOR_RESTORE/DAMENG_FOR_RESTORE02.log write to dir [/home/dmdba/dmdbms/data/DAMENG_FOR_RESTORE]. create dm database success. 2023-08-16 16:08:09 目标库新建实例 [dmdba@DSC-CLUSTER-01 bin]$ ./dmrman dmrman V8 RMAN> CHECK BACKUPSET '/home/dmdba/dmdbms/data/BACKUP_FILE_01'; CHECK BACKUPSET '/home/dmdba/dmdbms/data/BACKUP_FILE_01'; [Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00] check backupset successfully. time used: 147.407(ms) 检查备份集是否可用 RMAN> RESTORE DATABASE '/home/dmdba/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' REUSE DMINI FROM BACKUPSET '/home/dmdba/dmdbms/data/BACKUP_FILE_01'; RESTORE DATABASE '/home/dmdba/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' REUSE DMINI FROM BACKUPSET '/home/dmdba/dmdbms/data/BACKUP_FILE_01'; file dm.key not found, use default license! [-137]:服务器正在运行或者存在其他进程正在操作同一个库 数据库处于OPEN状态不可进行RMAN恢复,把数据库关闭后继续恢复 RMAN> RESTORE DATABASE '/home/dmdba/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dmdba/dmdbms/data/BACKUP_FILE_01'; RESTORE DATABASE '/home/dmdba/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' REUSE DMINI FROM BACKUPSET '/home/dmdba/dmdbms/data/BACKUP_FILE_01'; Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL [Percent:100.00%][Speed:0.00M/s][Cost:00:00:03][Remaining:00:00:00] restore successfully. time used: 00:00:03.302 还原时使用目标库库的配置文件进行恢复 RMAN> RECOVER DATABASE '/home/dmdba/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dmdba/dmdbms/data/BACKUP_FILE_01'; RECOVER DATABASE '/home/dmdba/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dmdba/dmdbms/data/BACKUP_FILE_01'; Database mode = 2, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[64580], file_lsn[64580] [Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00] recover successfully! time used: 00:00:02.526 RMAN>RECOVER DATABASE '/home/dmdba/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC; Database mode = 2, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[64756], file_lsn[64756] recover successfully! time used: 00:00:01.104 恢复数据库 [dmdba@DSC-CLUSTER-01 bin]$ ./disql SYSDBA 密码: 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 3.442(ms) disql V8 SQL> select * from test; 行号 ID NUM ---------- ----------- ----------- 1 1 1 2 2 2 3 3 3 已用时间: 1.696(毫秒). 执行号:2100. 恢复成功 |
利用归档日志恢复到某个时间点或某个LSN号
SQL> CREATE TABLE TAB_FOR_RECOVER_01(C1 INT); 操作已执行 已用时间: 10.434(毫秒). 执行号:605. SQL> INSERT INTO TAB_FOR_RECOVER_01 VALUES(1); 影响行数 1 已用时间: 0.739(毫秒). 执行号:606. SQL> COMMIT; 操作已执行 已用时间: 1.343(毫秒). 执行号:607. SQL> BACKUP DATABASE BACKUPSET '/dm/bak/db_full_bak_for_time_lsn'; 操作已执行 已用时间: 00:00:03.082. 执行号:608. SQL> CREATE TABLE TAB_FOR_RECOVER_02(C1 INT); 操作已执行 已用时间: 10.417(毫秒). 执行号:609. SQL> INSERT INTO TAB_FOR_RECOVER_02 VALUES(1); 影响行数 1 已用时间: 0.630(毫秒). 执行号:610. SQL> COMMIT; 操作已执行 已用时间: 1.973(毫秒). 执行号:611. SQL> SELECT SYSDATE; 行号 SYSDATE ---------- ------------------- 1 2023-09-05 06:22:45 已用时间: 0.784(毫秒). 执行号:612. SQL> SELECT FILE_LSN FROM V$RLOG; 行号 FILE_LSN ---------- -------------------- 1 64870 已用时间: 0.540(毫秒). 执行号:613. SQL> DELETE FROM TAB_FOR_RECOVER_01; 影响行数 1 已用时间: 0.553(毫秒). 执行号:614. SQL> COMMIT; 操作已执行 已用时间: 3.648(毫秒). 执行号:615. 模拟误删除 SQL> SELECT SYSDATE; 行号 SYSDATE ---------- ------------------- 1 2023-09-05 06:24:03 已用时间: 0.158(毫秒). 执行号:616. SQL> SELECT FILE_LSN FROM V$RLOG; 行号 FILE_LSN ---------- -------------------- 1 64874 已用时间: 0.147(毫秒). 执行号:617. 停止数据库利用备份恢复 RMAN> RESTORE DATABASE '/dm/data_new/DAMENG/dm.ini' FROM BACKUPSET '/dm/bak/db_full_bak_for_time_lsn'; RESTORE DATABASE '/dm/data_new/DAMENG/dm.ini' FROM BACKUPSET '/dm/bak/db_full_bak_for_time_lsn'; file dm.key not found, use default license! Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL [Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00] restore successfully. time used: 00:00:03.182 RMAN> RECOVER DATABASE '/dm/data_new/DAMENG/dm.ini' WITH ARCHIVEDIR'/dm/data_new/DAMENG/dm_arch' UNTIL TIME '2023-09-05 06:22:45'; RECOVER DATABASE '/dm/data_new/DAMENG/dm.ini' WITH ARCHIVEDIR '/dm/data_new/DAMENG/dm_arch' UNTIL TIME '2023-09-05 06:22:45'; Database mode = 2, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[64781], file_lsn[64781] [Percent:85.71%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00] recover successfully! time used: 484.451(ms) [dmdba@dataguard-pri bin]$ ./disql SYSDBA 密码: 服务器[LOCALHOST:5236]:处于备库配置状态 登录使用时间 : 3.312(ms) disql V8 SQL> select * from TAB_FOR_RECOVER_01; select * from TAB_FOR_RECOVER_01; 第1 行附近出现错误[-510]:系统处于MOUNT状态. 已用时间: 0.946(毫秒). 执行号:0. SQL> alter database open; alter database open; 第1 行附近出现错误[-516]:非NORMAL模式需要OPEN FORCE. 已用时间: 0.240(毫秒). 执行号:0. SQL> alter database open force; 操作已执行 已用时间: 2.549(毫秒). 执行号:0. SQL> select * from TAB_FOR_RECOVER_01; 行号 C1 ---------- ----------- 1 1 已用时间: 2.587(毫秒). 执行号:0. 数据回来了,恢复成功。这里使用RECOVER DATABASE '/dm/data_new/DAMENG/dm.ini' WITH ARCHIVEDIR'/dm/data_new/DAMENG/dm_arch' UNTIL LSN 64870; 也是一样的效果 |
DMDSC 环境下的数据库恢复
vi /home/dmdba/dsc_config/dsc01/dmarch.ini ARCH_LOCAL_SHARE = 1 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST =+DMARCH/dsc01/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 [ARCH_REMOTE1] ARCH_TYPE = REMOTE ARCH_DEST = DSC02 ARCH_INCOMING_PATH =+DMARCH/dsc02/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 vi /home/dmdba/dsc_config/dsc02/dm.ini ARCH_INI = 1 vi /home/dmdba/dsc_config/dsc02/dmarch.ini ARCH_LOCAL_SHARE = 1 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST =+DMARCH/dsc02/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 [ARCH_REMOTE1] ARCH_TYPE = REMOTE ARCH_DEST = DSC01 ARCH_INCOMING_PATH =+DMARCH/dsc01/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 SQL> BACKUP DATABASE BACKUPSET '/home/dmdba/bak/db_full_bak_for_dsc'; 操作已执行 已用时间: 00:00:03.523. 执行号:102. RMAN> RECOVER DATABASE '/home/dmdba/dsc_config/dsc01/dm.ini' WITH ARCHIVEDIR '+DMARCH/dsc01/arch','+DMARCH/dsc02/arch'; RECOVER DATABASE '/home/dmdba/dsc_config/dsc01/dm.ini' WITH ARCHIVEDIR '+DMARCH/dsc01/arch' , '+DMARCH/dsc02/arch'; Database mode = 2, oguid = 1071107589 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[41326], file_lsn[41326] EP[1]'s cur_lsn[41307] EP[0] adjust cur_lsn from [41326] to [41326] [Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00] recover successfully! time used: 00:00:08.404 RMAN> RECOVER DATABASE '/home/dmdba/dsc_config/dsc01/dm.ini' UPDATE DB_MAGIC; RECOVER DATABASE '/home/dmdba/dsc_config/dsc01/dm.ini' UPDATE DB_MAGIC; Database mode = 2, oguid = 1071107589 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[41686], file_lsn[41686] EP[1]'s cur_lsn[41307] EP[0] adjust cur_lsn from [41686] to [41686] recover successfully! time used: 00:00:09.053 |
表空间还原与恢复
SQL> BACKUP TABLESPACE MAIN BACKUPSET '/dm/bak/ts_full_bak_for_restore'; 操作已执行 已用时间: 00:00:02.917. 执行号:1. RMAN> CHECK BACKUPSET '/dm/bak/ts_full_bak_for_restore'; CHECK BACKUPSET '/dm/bak/ts_full_bak_for_restore'; [Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00] check backupset successfully. time used: 149.262(ms) RMAN> CHECK BACKUPSET '/dm/bak/ts_full_bak_for_restore'; CHECK BACKUPSET '/dm/bak/ts_full_bak_for_restore'; [Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00] check backupset successfully. time used: 133.236(ms) RMAN> RESTORE DATABASE '/dm/data_new/DAMENG/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/dm/bak/ts_full_bak_for_restore'; RESTORE DATABASE '/dm/data_new/DAMENG/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/dm/bak/ts_full_bak_for_restore'; Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[65208], file_lsn[65208] [Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00] restore successfully. time used: 00:00:02.633 RMAN> RECOVER DATABASE '/dm/data_new/DAMENG/dm.ini' TABLESPACE MAIN; RECOVER DATABASE '/dm/data_new/DAMENG/dm.ini' TABLESPACE MAIN; Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[65208], file_lsn[65208] dres_backupset_recover_ts bgein. [Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00] dres_backupset_recover_ts end. recover successfully. time used: 461.752(ms) 需要注意,表空间还原的目标库只能是备份集产生的源库,否则将报错。 |
使用 MANAGER 工具进行联机备份还原
[dmdba@dataguard-pri ~]$ export DISPLAY=192.168.100.1:0.0 [dmdba@dataguard-pri tool]$ pwd /dmsoft/tool [dmdba@dataguard-pri tool]$ ./manager 可以在高级菜单栏设置是否压缩、加密、加密密码是否备份日志等。 可以在查看已有备份的备份属性 可以校验备份集的有效性 还可以直接删除备份 对表进行联机还原 对表进行联机还原时,可以指定是否恢复索引、约束、表结构。 |
使用 CONSOLE 工具进行脱机备份还原
[dmdba@dataguard-pri tool]$ ./console 进行一次完全备份 可以指定路径查看所有备份集 库还原 更新magic |
总结
数据库备份是 DBA 日常最重要的工作内容;
数据库备份可以提高系统的高可用性和灾难可恢复性,当数据库系统崩溃时,没有备份就无法恢复;
数据库备份可以减少数据丢失的风险,数据库备份是一种防范灾难于未然的强力手段,没有数据就没有一切;
合适的备份恢复方案可以最小化数据丢失,最短的时间内恢复数据。