数据备份还原
逻辑备份和物理备份(方法分)
逻辑备份是指利用 dexp 导出工具,将指定对象(库级、模式级、表级)的数据导出到
文件的备份方式。逻辑备份针对的是数据内容,并不关心这些数据物理存储在什么位置。
物理备份则直接扫描数据库文件,找出那些已经分配、使用的数据页,拷贝并保存到备
份集中。物理备份过程中,不关心数据页的具体内容是什么,也不关心数据页属于哪一张表,
只是简单的根据数据库文件系统的描述,来挑选有效的数据页。
联机备份和脱机备份(方法分)
数据库处于运行状态、并正常提供数据库服务情况下进行的备份操作,我们称为联机备
份。数据库处于关闭状态时进行的备份操作,被称为脱机备份。
1.备份与还原从 V2.0 版本开始,使用 DMRMAN 工具进行脱机备份,并且支持对异常关闭的数据库进行脱机库备份。备份异常关闭的数据库,要求配置了本地归档,如果本地归档不完整,则需要先修复本地归档,再进行备份。
2.联机备份则使用客户端工具连接到数据库实例后,通过执行 SQL 语句进行;也可以通
过配置作业,定时完成自动备份。联机备份不影响数据库正常提供服务,是最常用的备份手段之一。
联机备份时,可能存在一些处于活动状态的事务正在执行,为确保备份数据的一致性,
需要将备份期间产生的 REDO 日志一起备份。因此,只能在配置本地归档、并开启本地归档的数据库上执行联机备份。
注意:只有已经关闭的数据库才允许执行脱机备份。正在运行的数据库,无法执行
脱机备份,系统会报错。
数据备份和归档日志备份(内容分)
按照备份内容不同,可以分为数据备份和归档日志备份。数据备份主要针对数据文件内
容,包括库备份、表空间备份和表备份。
1.库备份,顾名思义就是对整个数据库执行的备份,又称为库级备份。库备份会拷贝数据
库中所有数据文件的有效数据页,如果是联机备份,则还会拷贝备份过程中产生的归档日志,写入到备份集中。
2.表空间备份是针对特定表空间执行的备份,又称为表空间级备份。表空间备份只能在联
机状态下执行。
表备份则拷贝指定表的所有数据页到备份集中,并会记录各个数据页之间的逻辑关系用
以恢复。表备份只能在联机状态下执行,一次表备份操作只能备份一张用户表,并且不支持增量表备份。
3.归档日志备份,是专门针对归档日志文件进行操作,不涉及任何数据文件内容。归档日
志备份扫描归档目录收集归档日志文件,并将归档日志写入到备份集中。既可以在数据库运行状态下,执行联机归档日志备份;也可以在数据库关闭状态下执行脱机归档日志备份。
一致性备份和非一致性备份(一致性分)
按照备份集中的数据是否满足一致性,可以将备份划分为一致性备份和非一致性备份。
一致性备份的备份集包含了完整的数据文件内容和归档日志信息;利用一个单独的备份
集可以将数据库恢复到备份时状态。不指定 WITHOUT LOG 选项的联机备份生成的备份集
就是一致性备份。脱机数据库备份会强制将检查点之后的有效 REDO 日志拷贝到备份集中,因此,脱机备份一定是一致性备份。数据库正常关闭时,会生成完全检查点,脱机备份生成的备份集中,不包含任何 REDO 日志。
非一致性备份的备份集只包含数据文件相关内容,没有归档日志信息,利用非一致性备
份还原的数据库,无法直接启动,必须借助归档日志来恢复。表空间备份、指定WITHOUT LOG选项的联机备份生成的备份集都是非一致性备份集。
完全备份和增量备份(完整性)
按照备份数据完整性,可将备份分为完全备份和增量备份。库备份和表空间备份支持增
量备份,表备份不支持增量备份。
完全备份生成的备份集包含了指定库(或者表空间)的全部有效数据页。当数据规模比
较大的情况下,生成的完全备份集通常会比较大,而且备份时间也会比较长。
增量备份是在某个特定备份集基础上,收集数据库新修改的数据页进行备份,可以有效
减少备份集的空间占用、提高备份速度。这个特定的、已经存在的备份集称为增量备份的基备份,根据对基备份的要求不同,DM 的增量备份分为以下两种:
1.差异增量备份
差异增量备份的基备份既可以是一个完全备份集,也可以是一个增量备份集。
利用增量备份进行还原操作时,要求其基备份必须是完整的;如果差异增量备份的基备
份本身也是一个增量备份,那么同样要求其基备份是完整的;任何一个增量备份,最终都是
以一个完全备份作为其基备份。因此,完全备份是增量备份的基础。
2.累积增量备份
累积增量备份的基备份只能是完全备份集,而不能是增量备份集。
增量备份的基备份集既可以是脱机备份生成的,也可以是联机备份生成的,脱机增量备
份的基备份集可以是联机备份生成的,联机增量备份的基备份集也可以是脱机备份生成的。
备份工具及其使用
使用 dexp 工具
dexp 工具需要从命令行启动。在 cmd 命令行工具中找到 dexp 所在安装目录
/dmdbms/bin,输入 dexp 和参数后回车。参数在下一节详细介绍。
语法如下:
dexp PARAMETER=<value> { PARAMETER=<value> }
或
dexpdp PARAMETER=<value> { PARAMETER=<value> }
PARAMETER:dexp 参数。多个参数之间排列顺序无影响,参数之间使用空格间隔。
<value>:参数取值。
例如,将用户名和密码均为 SYSDBA,IP 地址为 100.0.11,端口号为 5236 的
数据库采用FULL方式完全导出。/user/data为数字证书路径。导出文件名为db_str.dmp,
导出的日志文件名为 db_str.log,导出文件的路径为/mnt/dexp/data。
./dexp USERID=SYSDBA/SYSDBA@10.0.0.11:5236#/user/data FILE=db_str.dmp DIRECTORY=/mnt/dexp/data LOG=db_str.log FULL=Y
dexp 参数一览表
参数 含义 备注 USERID 数据库的连接信息 必选 FILE 明确指定导出文件名称 可选。如果缺省该参数,则导出文件名为 dexp.dmp DIRECTORY 导出文件所在目录 可选 FULL 导出整个数据库(N) OWNER 用户名列表,导出一个或多个用户 所拥有的所有对象 可选,四者中选其一。 缺省为 SCHEMAS SCHEMAS 模式列表,导出一个或多个模式下的所有对象 TABLES 表名列表,导出一个或多个指定的表或表分区 FUZZY_MATCH TABLES 选项是否支持模糊匹配(N) 可选 QUERY 用于指定对导出表的数据进行过滤的条件。 可选 PARALLEL 用于指定导出的过程中所使用的线程数目 可选 TABLE_PARALLEL 用于指定导出每张表所使用的线程数,在MPP模式下 可选 会转换成单线程 TABLE_POOL 用于设置导出过程中存储表的缓冲区个数 可选 1.导出内容中忽略指定的对象。对象有CONSTRAINTS、 INDEXES、ROWS、TRIGGERS 和GRANTS。 比如:EXCLUDE= (CONSTRAINTS,INDEXES) 2. 忽略指定的表,使用 TABLES:INFO 格式,如果 使用表级导出方式导出,则使用 TABLES:INFO 格式 EXCLUDE 的 EXCLUDE 无效。 可选 例如:EXCLUDE= TABLES:table1,table2 3. 忽略指定的模式,使用 SCHEMAS:INFO 格式, 如果使用表级,模式级导出方式导出,则使用 SCHEMAS:INFO 格式的 EXCLUDE 无效。 例如:EXCLUDE=SCHEMAS:SCH1,SCH2 导出内容中包含指定的对象 INCLUDE 例如:INCLUDE=(CONSTRAINTS,INDEXES) 可选 或者 INCLUDE=TABLES:table1,table2 CONSTRAINTS 导出约束 (Y) TABLESPACE 导出的对象定义是否包含表空间(N) GRANTS 导出权限 (Y) 可选 此处单独设置与 和 INDEXES 导出索引 (Y) EXCLUDE/INCLUDE 中批量设置功能一样(选一) TRIGGERS 导出触发器(Y) ROWS 导出数据行 (Y) LOG 明确指定日志文件名称 可选,如果缺省该参数,则导出文件 名为dexp.log NOLOGFILE 不使用日志文件(N) 可选 NOLOG 屏幕上不显示日志信息(N) 可选 LOG_WRITE 日志信息实时写入文件 (N) 可选 DUMMY 交互信息处理: 打印(P), 所有交互都按 YES 处理 可选 (Y),NO(N)。默认为 NO,不打印交互信息。 PARFILE 参数文件名,如果 dexp 的参数很多,可以存成参数文件 可选 FEEDBACK 每 x 行显示进度 (0) 可选 COMPRESS 是否压缩导出数据文件(N) 可选 ENCRYPT 导出数据是否加密 (N) 可选, 和 ENCRYPT 同时使用 ENCRYPT_PASSWORD 导出数据的加密密钥 ENCRYPT_NAME 导出数据的加密算法 可选,和 ENCRYPT,ENCRYPT_PASSWORD 配合使用 FILESIZE 用于指定单个导出文件大小的上限。可以按字节 可选 [B]、K[B]、M[B]、G[B]的方式指定大小 FILENUM 多文件导出时,一个模板可以生成文件数,范围为[1,99],默认 99 可选 DROP 导出后删除原表,但不级联删除 (N) 可选 DESCRIBE 导出数据文件的描述信息,记录在数据文件中 可选 COL_DEFAULT_SEPARATE 是否单独导出列默认值 (Y) 可选
每个参数含义后面的括号内为(N)则表示该参数缺省为否,为(Y)则表示为是,虽然参数大部分为可选参数,但后台这些参数都会传到服务器,此时参数的值就是缺省值。
恢复工具及其使用
dimp 逻辑导入
dimp 逻辑导入工具利用 dexp 工具生成的备份文件对本地或远程的数据库进行联机逻辑还原。dimp 导入是 dexp 导出的相反过程。还原的方式可以灵活选择,如是否忽略对象存在而导致的创建错误、是否导入约束、是否导入索引、导入时是否需要编译、是否生成日志等。
dimp 工具名称有两种写法 dimp 和 dimpdp。两者语法完全相同。唯一的区别在于,dimp 导入的文件必须存放在客户端,dimpdp 导入的文件必须存放在服务器端。
dimp 工具使用
dimp 工具需要从命令行启动。在 cmd 命令行工具中找到 dimp 所在安装目录/dmdbms/bin,输入 dimp 和参数后回车。参数在下一节详细介绍。
语法如下:
dimp PARAMETER=value { PARAMETER=value }
或
dimpdp PARAMETER=value { PARAMETER=value }
PARAMETER:dimp 参数。多个参数之间排列顺序无影响,参数之间使用空格间隔。
value:参数取值。
例如,将逻辑备份采用 FULL 方式完全导入到用户名和密码为 SYSDBA,IP 地址为10.0.0.11,端口号为 5236 的数据库。导入文件名为 db_str.dmp,导入的日志文件名为 db_str.log,路径 为/mnt/data/dexp。
./dimp USERID=SYSDBA/SYSDBA@10.0.0.11:5236 FILE=db_str.dmp DIRECTORY=/mnt/data/dexp LOG=db_str.log FULL=Y
dimp 参数一览表
参数 含义 备注 USERID 数据库的连接信息 必选 FILE 输入文件,即 dexp 导出的文件 必选 DIRECTORY 导入文件所在目录 可选 FULL 导入整个数据库 (N) OWNER 导入指定的用户名下的模式 可选,四者中选其一 SCHEMAS 导入的模式列表 缺省为 SCHEMAS TABLES 表名列表,指定导入的 tables 名称。不支持对外部表进行导入 PARALLEL 用于指定导入的过程中所使用的线程数目 可选 TABLE_PARALLEL 用于指定导入的过程中每个表所使用的子线程数目 可选。在FAST_LOAD为Y时有效 IGNORE 忽略创建错误 (N)。如果表已经存在则向表中插入 可选 数据,否则报错表已经存在。 TABLE_EXISTS_ACT 忽略创建错误 (N)。如果表已经存在则向表中插入数据 可选 ION 否则报错表已经存在。 FAST_LOAD 是否使用 dmfldr 进行数据导入(N) 可选 FLDR_ORDER 使用 dmfldr 是否需要严格按顺序来导数据(Y) 可选 COMMIT_ROWS 批量提交的行数(5000) 可选 忽略指定的对象(CONSTRAINTS,INDEXES,ROWS, EXCLUDE TRIGGERS,GRANTS)。格式EXCLUDE=(CONSTRAINTS, 可选 INDEXES,ROWS,TRIGGERS,GRANTS) GRANTS 导入权限 (Y) 可选 CONSTRAINTS 导入约束 (Y) 可选 INDEXES 导入索引 (Y) 可选 TRIGGERS 导入触发器(Y) 可选 ROWS 导入数据行 (Y) 可选 LOG 日志文件 可选 NOLOGFILE 不使用日志文件(N) 可选 NOLOG 屏幕上不显示日志信息(N) 可选 DUMMY 交互信息处理: 打印(P)。取值 Y/N。 可选 LOG_WRITE 日志信息实时写入文件(N) 可选 PARFILE 参数文件名,如果 dimp 的参数很多,可以存成参数文件 可选 FEEDBACK 显示每 x 行 (0) 的进度 可选 COMPILE 编译过程,程序包和函数 (Y) 可选 INDEXFILE 将表的索引/约束信息写入指定的文件 可选 INDEXFIRST 导入时先建索引(N) 可选 REMAP_SCHEMA SOURCE_SCHEMA:TARGET_SCHEMA 将 可选 SOURCE_SCHEMA 中的数据导入到TARGET_SCHEMA 中 ENCRYPT_PASSWORD 数据的加密密钥 可选,和 dexp 中的密钥一样 ENCRYPT_NAME 数据的加密算法的名称 可选,和dexp中的加密算法一样 SHOW/ DESCRIBE 只列出文件内容 (N) 可选 TASK_THREAD_NUMBER 设置 dmfldr 处理用户数据的线程数目 可选 BUFFER_NODE_SIZE 设置 dmfldr 读入文件缓冲区大小 可选 TASK_SEND_NODE_NUMBER 用于设置 dmfldr 发送节点个数[16,65535] 可选 LOB_NOT_FAST_LOAD 如果一个表含有大字段,那么不使用 dmfldr,因 可选 为 dmfldr 是一行一行提交的 PRIMARY_CONFLICT 主键冲突的处理方式[IGNORE | OVERWRITE | 可选 OVERWRITE2],默认报错 TABLE_FIRST 是否强制先导入表 (默认 N),Y 表示先导入表,N正常导入 可选 SHOW_SERVER_INFO 是否显示服务器信息(默认 N),Y 表示显示导出文 件对应服务器信息实际不导入,N 表示不显示导 可选 出文件对应服务器信息,正常导入 IGNORE_INIT_PARA 忽略建库参数差异(0):CASE_SENSITIVE(1),LENGTH_IN_CHAR(2) 可选 AUTO_FREE_KEY 导入数据完成后, 是否释放密钥(N):是(Y), 否(N) 可选 REMAP_TABLE 格式(SOURCE_SCHEMA.SOURCE_TABLE:TARGET_TABLE) 可选 将 SOURCE_TABLE 中的数据导入到TARGET_TABLE 中 REMAP_TABLESPACE 格式(SOURCE_TABLESPACE:TARGET_TABLESPACE) 可选 将 SOURCE_TABLESPACE 表空间映射到TARGET_TABLESPACE 表空间中
dexp 和 dimp 应用实例
1.环境准备
导出库:环境为 linux,服务器为 10.0.0.11,用户名和密码均为 SYSDBA。导
出的是 DM 数据库系统安装时自带的名为 BOOKSHOP 的示例库,端口号 5236。
导入库:环境为 linux,服务器为 192.168.0.248,用户名和密码均为 SYSDBA。准
备一个空数据库作为导入库,端口号为 8888。
2. dexp 导出
导出数据库的所有对象(FULL=Y),导出文件为 dexp01.dmp,导出日志为 dexp01.log,
导出文件和日志文件都存放在/emc_2/data/dexp 目录中。
./dexp SYSDBA/SYSDBA@10.0.0.11:5236
FILE=dexp01.dmp
LOG=dexp01.log
DIRECTORY=/emc_2/data/dexp FULL=Y
3. dimp 导入
导入 SYSDBA、OTHER、PERSON 模式中的数据(SCHEMAS=SYSDBA,OTHER,PERSON),导入
文件就是上一步导出的文件 dexp01.dmp,导入日志 dimp02.log 放入/emc_2/data/dimp
目录中。
./dimp SYSDBA/SYSDBA@10.0.0.11:8888
FILE=/emc_2/data/dexp/dexp01.dmp
LOG=dimp02.log DIRECTORY=/emc_2/data/dimp SCHEMAS=SYSDBA,OTHER,PERSON
4. 查看 LOG 日志
如果想了解详细的导出、导入内容统计信息,请查看 LOG 日志 dexp01.log 和
dimp02.log。
升级和降级
从 V8.1.2.69 版本开始,对创建用户口令新增了<加盐选项>。<加盐选项>包含 SALT和 NO SALT,缺省为 NO SALT。 V8.1.2.69 之前的版本都是缺省(NO SALT)的情况。
因此,当遇到下面情景:先导出 V8.1.2.69 之后的口令加盐的库,再导入到V8.1.2.69 之前的口令未加盐的库,将不能成功。解决办法:在导出之前,DBA 先检查待导出库用户口令是否使用了加盐 SALT。 如果是,那么 DBA 需要先使用 ALTER 语句将用户口令调整为 NO SALT,再做导出导入。前后版本的口令都是 NO SALT,操作成功。