介绍逻辑备份还原(联机方式下完成)
一、功能介绍
- DM数据库的备份还原包括两种类型:物理备份还原和逻辑备份还原。
- 物理备份还原是对数据库的操作系统物理文件(如数据文件、控制文件和日志文件等)的备份还原。(例如RMAN工具)
- 逻辑备份还原是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份还原。(例如使用dexp和dimp进行的备份还原)
- 逻辑导出(dexp)——逻辑备份
- 逻辑导入(dimp)——逻辑还原
- 逻辑导出和逻辑导入数据库对象分为四种级别:数据库级、用户级、模式级和表级。四种级别独立互斥,不能同时存在。四种级别所提供的功能:
- 数据库级(FULL):导出或导入整个数据库中的所有对象;
- 用户级(OWNER):导出或导入一个或多个用户所拥有的所有对象;
- 模式级(SCHEMAS):导出或导入一个或多个模式下的所有对象;
- 表级(TABLES):导出或导入一个或多个指定的表或表分区。
二、dexp逻辑导出
- dexp工具可以对本地或者远程数据库进行数据库级、用户级、模式级和表级的逻辑备份
- 可选是否备份索引、数据行和权限,是否忽略各种约束(外键约束、非空约束、唯一约束等)
- 备份前还可选生成日志文件,记录备份的过程以供查看
- dexp工具名称有两种写法dexp和dexpdp。语法完全相同,唯一的区别在于dexp导出的文件必须存放在客户端,dexpdp导出的文件必须存放在服务器端
2.1 使用dexp工具
dexp PARAMETER=<value> { PARAMETER=<value> }
或
dexpdp PARAMETER=<value> { PARAMETER=<value> }
多个参数之间排列顺序无影响,参数之间使用空格间隔
2.2 dexp参数一览表
其他使用 ./dexp help
查询
2.3 dexp参数详解
2.3.1 特殊参数(必选参数的和最常用的可选参数)
2.3.1.1 USERID
指定数据库连接信息,必选
{{<username>[/<password>]} | /}[@<connect_identifier>][<option>] [<os_auth>]
<connect_identifier> ::=<svc_name> | {<host>[:<port>]} | <unixsocket_file>
<option>::= #{ <exetend_option>=<value>{,<extend_option>=<value>} } //此行外层{}是为了封装参数之用,书写时需要保留
<os_auth>::= AS {SYSDBA|SYSSSO|SYSAUDITOR|USERS|AUTO}
2.3.1.2 FILE
明确指定导出的文件,可以多个文件逗号分隔,可选,默认dexp.dmp
FILE=<文件>
注:
如果 FILE 指定的文件包含生成路径,则忽略 DIRECTORY 中的路径;
如果 FILE 没有指定路径时,使用 DIRECTORY 中指定的路径;
如果 FILE 和 DIRECTORY 都没有指定路径,则使用系统当前路径。
文件也可以在生成过程中自动扩展成多个。首先,文件名需要包含通配符%U,用于作为自动扩充文件的文件名模板。%U 表示为 2 个字符宽度的数字,由系统自动生成,起始为 01。其次,使用FILESIZE参数来指定文件的大小
2.3.1.3 LOG
明确指定导出过程产生的日志文件名称(可以包含路径),可多个文件用逗号分隔。可选,默认dexp.log
LOG=<文件名>
注:
如果 FILE 指定的文件包含生成路径,则忽略 DIRECTORY 中的路径;
如果 FILE 没有指定路径时,使用 DIRECTORY 中指定的路径;
如果 FILE 和 DIRECTORY 都没有指定路径,则使用系统当前路径。
文件也可以在生成过程中自动扩展成多个。首先,文件名需要包含通配符%U,用于作为自动扩充文件的文件名模板。%U 表示为 2 个字符宽度的数字,由系统自动生成,起始为 01。其次,使用FILESIZE参数来指定文件的大小
LOG日志格式介绍如下:
- 导出级别为TABLES,日志信息包含一张或多张表的索引、权限、数据行数
- 导出级别为SCHEMAS,日志信息只包含一个或多个模式中的对象统计信息,每个模式下的内容具体有:
- 导出SEQUENCE、VIEW、COMMENT、PROCEDURE、SYNONYM、DBLINK、TRIGGER、PACKAGE、OBJECT、CLASS_BODY和DOMAIN等对象的个数和名称,以及对象的权限
- 依次导出表的索引、权限、数据行数
- 导出级别为OWNER,日志内容包含一个或多个用户所拥有的所有模式中的对象统计信息,每个模式下的内容和导出级别为SCHEMAS时一样
- 如果导出级别为FULL,那么日志内容除了包含所有模式中的对象信息,还包括系统
包和系统视图
和LOG有关的参数还有NOLOGFILE、NOLOG和LOG_WRITE。NOLOGFILE=Y 用于设置不使用日志文件。NOLOG=Y 用于设置不在屏幕上显示日志信息。LOG_WRITE=Y 用于设置日志的实时打印(到日志文件)功能
2.3.1.4 DIRECTORY
用于指定导出文件及日志文件生成的路径,可选,缺省为导出到dexp所在路径
DIRECTORY=<path>
如果FILE和LOG参数指定的文件包含生成路径,则FILE和LOG参数中指定的路径将替代 DIRECTORY 所指定的路径;如果FILE和LOG参数指定的文件未包含路径信息,则文件将被生成到DIRECTORY指定的目录下;如果都没有指定路径,程序将根据当前的运行环境来设置相应的导出路径,一般为当前路径
在使用dexpdp和dimpdp时,DIRECTORY参数支持使用在服务器端通过CREATE DIRECTORY定义的目录名
2.3.1.5 四种级别的导出方式
对于小写的用户名、模式名和表名,为了不转换为大写,需要转义。如果用户名、模式名和表名中含有特殊字符(双引号、单引号、空格、逗号等),则也需要进行转义
2.3.1.5.1 FULL
导出数据库的所有对象
FULL=Y
2.3.1.5.2 OWNER
导出一个或多个用户拥有的所有对象
OWNER=<用户名>{,<用户名>}
2.3.1.5.3 SCHEMAS(缺省)
SCHEMAS 方式的导出一个或多个模式下的所有对象
SCHEMAS=<模式名>{,<模式名>}
一般情况下OWNER与SCHEMAS导入导出是相同的。但用户可以包含多个模式,在这种情况下SCHEMAS的导入导出是OWNER导入导出的一个子集
2.3.1.5.4 TABLES
导出和导入一个或多个指定的表或表分区。导出所有数据行、约束、索引等信息
TABLES=<表名>{,<表名>}
和 TABLES 导出有关的参数还有 QUERY、EXCLUDE 和 INCLUDE,都是用来设置过滤条件的
2.3.2 普通参数(具有特殊作用的可选参数)
FUZZY_MATCH用于指定 TABLES 选项是否支持模糊匹配。可选参数,缺省为 N。
FUZZY_MATCH=N/Y
QUERY用于指定过滤条件来对表数据进行导出。可选参数。
QUERY="<where_condition>"
PARALLEL用于指定导出的过程中所使用的线程数目。可选参数,缺省为单线程。
如果CPU核心数为N,一般来说PARALLEL为N或者N+1最合适。
PARALLEL=<num>
TABLE_PARALLEL 用于指定导出每张表所使用的线程数。可选参数,缺省为单线程。
如果CPU核数为N,一般来说TABLE_PARALLEL为N或者N+1最合适。在MPP模式下会转换成单线程
TABLE_PARALLEL=<num>
TABLE_POOL用于设置导出过程中存储表数据的缓冲区个数。可选参数。
TABLE_POOL=<num>
TABLE_PARALLEL固定的情况下,导出时间随着TABLE_POOL个数的增加而减少。当TABLE_POOL稍大于TABLE_PARALLEL时结果为最优
EXCLUDE用来批量设置导出时忽略的对象种类。可选参数。
EXCLUDE=(<对象种类名>{,<对象种类名>})
或
EXCLUDE=TABLES:<表名>{,<表名>}
或
EXCLUDE=SCHEMAS:<模式名>{,<模式名>}
或
EXCLUDE=VIEWS:<视图名>{,<视图名>}
<对象种类名>:包括CONSTRAINTS、INDEXES、ROWS、TRIGGERS、GRANTS
如果导出方式为TABLES表级或SCHEMAS 模式级导出时,EXCLUDE=SCHEMAS:<模式名>{,<模式名>}排除模式不起作用
INCLUDE用来批量设置导出时包含的对象种类。可选参数。
INCLUDE=(<对象种类名>{,<对象种类名>})
或
INCLUDE=TABLES:<表名>{,<表名>}
CONSTRAINTS、TABLESPACE、GRANTS、INDEXES、TRIGGERS、ROWS这些参数用来指定某类对象是否被导出。类别分别为约束、表空间、权限、索引、触发器和数据
CONSTRAINTS = Y/N
TABLESPACE = N/Y
GRANTS = Y/N
INDEXES = Y/N
TRIGGERS = Y/N
ROWS = Y/N
NOLOGFILE用于设置是否使用日志文件。可选参数。
NOLOGFILE=Y/N
Y:不使用。
N:使用,缺省值。
NOLOG设置屏幕上是否显示日志信息。可选参数。
NOLOG=Y/N
Y:不显示。
N:显示,缺省值。
LOG_WRITE用于日志信息实时写入日志文件。可选参数。
LOG_WRITE=Y/N
Y:一边将日志内容打印到屏幕上,一边将日志内容写入日志文件。
N:日志内容先在屏幕上全部打印完毕再写入日志文件,缺省值。
DUMMY用于设置交互信息处理。可选参数,缺省使用P打印交互信息。在使用dexpdp的时候,此参数无需设置,不提供交互信息,全部按YES处理。
DUMMY=P/Y/N
P:提供交互界面,缺省方式。当导出文件已存在的时候,提供是否覆盖交互界面。
Y:不提供交互界面,所有交互都按 YES 处理。
N:不提供交互界面,所有交互都按 NO 处理。
PARFILE用于将常用的参数设置保存到文件中,然后使用参数文件 PARFILE 进行导出、导入操作。可选参数。
PARFILE=<path>
FEEDBACK 用来指明在导出数据的过程中每间隔多少行打印一次进度信息。可选参数。当参数缺省时,默认为 0,只打印导出表的总行数
FEEDBACK=<num>
COMPRESS指定是否压缩导出文件。可选参数。缺省为不压缩
COMPRESS=Y/N
ENCRYPT=Y:设置导出文件加密。如果设置 ENCRYPT=Y,那么默认 COMPRESS=Y,先压缩后加密
ENCRYPT_PASSWORD=<加密密钥>:设置加密密钥。支持最大长度为 255
ENCRYPT_NAME=<加密算法>:设置加密算法。缺省为 RC4
ENCRYPT=Y
ENCRYPT_PASSWORD=<加密密钥>
ENCRYPT_NAME=<加密算法>
加密算法:DES_ECB 、DES_CBC 、DES_CFB、DES_OFB、DESEDE_ECB、DESEDE_CBC 、DESEDE_CFB、DESEDE_OFB 、AES128_ECB 、 AES128_CBC 、AES128_CFB 、AES128_OFB 、AES192_ECB 、AES192_CBC 、AES192_CFB 、AES192_OFB 、AES256_ECB 、AES256_CBC 、AES256_CFB 、AES256_OFB 、RC4
ENCRYPT、ENCRYPT_PASSWORD、ENCRYPT_NAME 经常一起使用。如果只设置 ENCRYPT_PASSWORD 一个,那么默认 ENCRYPT=Y,ENCRYPT_NAME 缺省值 RC4
FILESIZE用于指定单个导出文件(FILE)大小或日志文件(LOG)大小的上限。可以按字节[B]、K[B]、M[B]、G[B]的方式指定大小。可选参数。
使用FILESIZE参数时,FILE(或 LOG)必须使用%U对名称进行自动扩展,否则报错。
如果不指定FILE(或LOG),那么即使设置了FILESIZE也不起作用。FILE和LOG同时使用%U 时,FILESIZE参数只需指定一次
FILESIZE=<num>
FILENUM用于指定一个模板导出文件的个数。取值范围为1~99,缺省为 99。可选参数。FILENUM需要和FILESIZE搭配使用,FILENUM*FILESIZE要大于等于导出的文件总大小,否则会报错空间不足
DROP用于设置导出后是否删除原表。可选参数。
DROP=Y/N
Y:导出后删除原表,但不级联删除。
N:导出后不删除原表,缺省值。
DESCRIBE用于设置导出数据文件的描述信息,记录在数据文件中。可选参数。
DESCRIBE='字符串'
字符串:设置导出数据文件的描述信息,记录在数据文件中。缺省时,导出的数据文件中没有描述信息
CTRL_INFO 控制信息。可选参数,默认(0)。
CTRL_INFO=[n]
n 取值为整形值
1:控制分区表约束在表定义导出
0: 分区表约束分开导出
FLASHBACK_SCN用于指定导出表数据的闪回LSN。可选参数。由于dexp闪回导出是通过闪回查询方式实现,闪回查询功能存在的限制在 dexp 同样存在
FLASHBACK_SCN=LSN
LSN:可以通过查询动态视图 V$RLOG 或 V$LSN_TIME 来确定。
FLASHBACK_TIME用于指定导出表数据的闪回时间。可选参数。
FLASHBACK_TIME="time_exp"
time_exp:时间字符串。
COL_DEFAULT_SEPARATE用于设置是否单独导出列默认值。可选参数。
COL_DEFAULT_SEPARATE=Y/N
Y:单独导出列默认值,缺省值。
N:列默认值和表定义一起导出。
WITH_UR用于设置导出数据是否允许脏读。可选参数。
WITH_UR=N/Y
N:导出表数据不允许脏读,缺省值。
Y:导出表数据允许脏读。
SIMPLE_LOG用于设置导出日志是否只打印简要日志,简要日志只打印导出对象个数和导出表数据行数。可选参数。
SIMPLE_LOG=N/Y
N:导出日志不使用简要日志,缺省值。
Y:导出日志使用简要日志。
三、dimp逻辑导入
- dimp逻辑导入工具利用dexp工具生成的备份文件对本地或远程的数据库进行联机逻辑还原
- dimp导入是dexp导出的相反过程
- 还原的方式可以灵活选择,如是否忽略对象存在而导致的创建错误、是否导入约束、是否导入索引、导入时是否需要编译、是否生成日志等
- dimp工具名称有两种写法dimp和dimpdp。两者语法完全相同,唯一的区别在于,dimp导入的文件必须存放在客户端,dimpdp导入的文件必须存放在服务器端
3.1 使用dimp工具
dimp PARAMETER=<value> { PARAMETER=<value> }
或
dimpdp PARAMETER=<value> { PARAMETER=<value> }
多个参数之间排列顺序无影响,参数之间使用空格间隔
3.2 dimp参数一览表
其他运行./dimp help
查询
3.3 dimp参数详解
与2.3类似,此章节略
3.3.1 特殊参数(必选参数的和最常用的可选参数)
3.3.2普通参数(具有特殊作用的可选参数)
四、dexp和dimp应用实例
4.1 一个完整示例
环境准备
- 导出库:环境为linux,服务器为192.168.32.128,用户名密码均为SYSDBA。端口号5236
- 导入库:环境为linux,服务器为 192.168.32.128,用户名密码均为SYSDBA。准备一个空数据库作为导入库,端口号为 5237
dexp导出
导出数据库的所有对象(FULL=Y),导出文件为 dexp01.dmp,导出日志为 dexp01.log,导出文件和日志文件都存放在/home/dmdba/data/dexp目录中
dimp导入
导入 SYSDBA模式中的数据(SCHEMAS=SYSDBA),导入文件就是上一步导出的文件dexp01.dmp,导入日志dimp02.log放 入/home/dmdba/data/dimp目录中
查看log日志
查看日志dexp01.log和dexp02.log
4.2 使用关联参数示例
使用加密相关参数ENCRYPT、ENCRYPT_PASSWORD、ENCRYPT_NAME 进行导出导入
环境准备
- 导出库:环境为linux,服务器为192.168.0.248,用户名和密码均为SYSDBA。导出的是DM数据库系统安装时自带的名为BOOKSHOP的示例库,端口号 5236。
- 导入库:环境为 linux,服务器为 192.168.0.248,用户名和密码均为SYSDBA。准备一个空数据库作为导入库,端口号为 8889。
dexp导出
导出数据库的所有对象(FULL=Y),导出文件为dexp03.dmp,导出日志为dexp03.log,导出文件和日志文件都存放在/emc_2/data/dexp 目录中
使用加密参数ENCRYPT、ENCRYPT_PASSWORD、ENCRYPT_NAME,对到出库进行加密
dimp导入
导入整个数据库(FULL=Y),导入文件就是上一步导出的文件dexp03.dmp,导入日志dimp04.log放入/emc_2/data/dimp目录中。
在导入的过程中,要提供ENCRYPT_PASSWORD、ENCRYPT_NAME两个参数,这两个参数值必须和导出时一样。
查看log日志
查看日志dexp03.log和dexp04.log
五、升级和降级
- V8.1.2.69版本开始,对创建用户口令新增了<加盐选项>
- <加盐选项>包含
SALT
和NO SALT
,缺省为NO SALT
。 之前的版本都是缺省情况 - 当遇到下面情景:先导出 V8.1.2.69 之后的口令加盐的库,再导入到
V8.1.2.69 之前的口令未加盐的库,将不能成功。
解决办法:在导出之前,DBA 先检查待导出库用户口令是否使用了加盐SALT。 如果是,那么DBA需要先使用ALTER语句将用户口令调整为NO SALT,再做导出导入。前后版本的口令都是NO SALT