Oracle数据库常用的备份方式有,exp/imp, expdp/impdp和rman;
RMAN备份内容包括:整个数据库,表空间,数据文件,指定的数据文件,控制文件,归档日志文件,参数文件等,打开归档日志后,可以做到不丢失数据,后期再详细分析研究。
使用expdp和impdp时应该注重的事项:
1、exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
2、expdp和impdp是服务端的工具程序,他们只能在oracle服务端使用,不能在客户端使用。
3、imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用于expdp导出的文件,而不适用于exp导出文件。
4、对于10g以上的服务器,使用exp通常不能导出0行数据的空表,而此时必须使用expdp导出。
查询备份和恢复数据库的数据库信息
尽量保证数据库的版本和字符集等信息一致,否则会有很多坑。
查看数据库的版本
1
| select * from v$version;
|
查看数据库编码
1
| SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
|
查看管理员目录
1 2
| sqlplus / as sysdba SQL> select * from dba_directories;
|
创建管理员目录并授权
1 2
| SQL> create directory dump_dir as '/opt/db_backup'; #可以使用默认的目录,也可以自己新建目录 SQL> grant read,write on directory dump_dir to scott;
|
使用expdp导出数据
1 2 3 4 5 6 7 8 9 10 11 12
| 1)导出用户 expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp directory=dump_dir expdp userid="'sys/passwd@orcl as sysdba'" schemas=scott dumpfile=scott.dmp directory=DATA_PUMP_DIR #使用sys用户导出写法 2)导出表 expdp scott/tiger@orcl tables=emp,dept dumpfile=expdp.dmp directory=dump_dir 3)按查询条件导 expdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp tables=emp query='where deptno=20' 4)按表空间导 expdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmp tablespaces=temp,example 5)导整个数据库 expdp system/manager@orcl directory=dump_dir dumpfile=full.dmp full=y; expdp userid="'sys/passwd@orcl as sysdba'" full=y directory=DATA_PUMP_DIR dumpfile=full.dmp #使用sys用户导出写法
|
用impdp导入数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| 1)导入用户(从用户scott导入到用户scott) impdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp schemas=scott impdp userid="'sys/passwd@orcl as sysdba'" schemas=scott dumpfile=scott.dmp directory=DATA_PUMP_DIR #使用sys用户导出写法 2)导入表(从scott用户中把表dept和emp导入到system用户中) impdp system/manager@orcl directory=dump_dir dumpfile=expdp.dmp tables=scott.dept,scott.emp remap_schema=scott:system 3)导入表空间 impdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmp tablespaces=example 4)导入数据 impdb system/manager@orcl directory=dump_dir dumpfile=full.dmp full=y impdp userid="'sys/passwd@orcl as sysdba'" full=y directory=DATA_PUMP_DIR dumpfile=full.dmp 5)追加数据 impdp system/manager@orcl directory=dump_dir dumpfile=expdp.dmp schemas=system table_exists_action
--#####-- --如果要导到的用户与导出dumpfile的用户名不一样则要使用remap_schema代替schemas,将旧用户名指向新用户名: impdp user_new/pass_new directory=impexp dumpfile=lsdb.dmp loggfile=lsdb.log remap_schema=user_old:user_new
--如果要导到的表空间名称不一样,则要使用remap_tablespace将旧表空间名指向新表空间名: impdp ls/lsdb123# directory=impexp dumpfile=lsdb.dmp loggfile=lsdb.log schemas=ls remap_tablespace=tablespace_old:tablespace_new
--如果要导到的用户名和表空间名与原来导出时的都不一样,那么要同时使用remap_schema和remap_tablespace: impdp user_new/pass_new directory=impexp dumpfile=lsdb.dmp logfile=lsdb.log remap_schema=user_old:user_new remap_tablespace=tablespace_old:tablespace_new
--如果导出的dmp文件中有多个表空间,那么remap_tablespace写多个: impdp ls/lsdb123# directory=impexp dumpfile=lsdb.dmp loggfile=lsdb.log schemas=ls remap_tablespace='(tablespace_old1:tablespace_new1,tablespace_old2:tablespace_new2)'
--如果原先已有数据,想使用覆盖导入使用table_exists_action=replace: impdp ls/lsdb123# directory=impexp dumpfile= lsdb.dmp logfile= lsdb.log schemas= ls table_exists_action=replace
--如果expdp限制了单个文件大小使用%U导出多个文件(比如6个),则导入: impdp lsdb/lsdb123# directory=impexp dumpfile=lsdb_%U.dmp logfile= lsdb.log schemas= lsdb parallel=6
|
expdp的compression参数选项(压缩)
*** COMPRESSION=[ALL | DATA_ONLY | METADATA_ONLY | NONE] ***
Oracle 11g中新增了几种压缩方法。
1 2 3 4 5
| ALL: 对导出的元数据和表数据都进行压缩,得到的导出文件是最小的,耗时也是最长的。(据说压缩比可以达到 1/7) DATA_ONLY: 仅对表数据进行压缩,对于大数据量的导出效果明显,会比METADATA_ONLY方式得到更小的压缩文件。 METADATA_ONLY: 仅对元数据进行压缩,而不会对表数据进行压缩,这种压缩执行后效果一般不是很明显,不过速度比较快。 NONE: 不进行任何的压缩,导出后的文件也是最大的。 DEFAULT: 默认方式,即不指定COMPRESSION参数,会采用默认的压缩方式METADATA_ONLY。
|
impdp的TABLE_EXISTS_ACTION参数选项
默认值是skip,但若设置了CONTENT=DATA_ONLY,则默认值是APPEND,不是SKIP。
*** TABLE_EXISTS_ACTION=[SKIP | APPEND | TRUNCATE | REPLACE] ***
1 2 3 4
| SKIP:跳过这张表,继续下一个对象。如果CONTENT设置了DATA_ONLY参数,则不能使用SKIP。 APPEND:会加载数据至对象,但不会影响已存在的行。 TRUNCATE:删除已存在的行,然后加载所有的数据。 REPLACE:drop已存在的表,然后create并加载数据。如果CONTENT设置了DATA_ONLY,则不能使用REPLACE。
|
导入过程中,常用查询语句
查询表空间使用量,如果不够,可以添加文件
1 2
| SELECT FILE_NAME, TABLESPACE_NAME, BYTES / 1024 / 1024 "bytes MB",MAXBYTES / 1024 / 1024 "maxbytes MB" FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'USERS'; ALTER TABLESPACE USERS ADD DATAFILE '/u01/app/oracle/oradata/sjzdb/users02.dbf' SIZE 5M AUTOEXTEND ON MAXSIZE 32767M;
|
查看SCHEMAS占用的表空间大小
1
| SELECT OWNER, SUM(BYTES) / 1024 / 1024 / 1024 SCHEMA_SIZE_GIG FROM SYS.DBA_SEGMENTS GROUP BY OWNER;
|
查询schemas下的所有表
1
| SELECT TABLE_NAME FROM SYS.DBA_TABLES WHERE OWNER = 'AIR_FORECAST';
|
参考链接:
http://blog.sina.com.cn/s/blog_67d41beb0100ixnb.html
https://blog.csdn.net/bisal/article/details/51482968
http://www.htz.pw/2015/05/20/expdp的compression测试.html
https://www.cnblogs.com/lsdb/p/7660774.html