oracle备份还原
Oracle exp导出数据
Oracle exp工具可以选择性的导出数据库的对象和表数据,导出DMP文件以备以后进行数据恢复。下面分别讲解如何通过EXP导出数据库的表、方案、表空间、数据库四个不同对象的数据。
使用EXP工具可以使用第三方工具PL/SQL DEVELOPER进行导出,也可以直接通过DOS命令行窗口直接进行导出。
EXP 导出表
进入DOS命令行窗口,输入以下命令:
1
|
exp username/ password |
使用用户名和密码登录,然后按照工具提示,导出对应的表结构数据,具体步骤如下图:
从上图可以看出,我们要导出的是student用户的学生信息表(stuinfo),其中导出的数据文件保存的路径是在d:\student.dmp。然后通过选择要导出的类型选择导出表(T),再然后按照提示一步一步的进行,就可以导出想要的表结构数据。
但是在实际应用当中,我们一般是直接用一次性命令直接导出想要的数据对象。不需要这样子一步一步的选择。
EXP导出表数据命令:
1
|
exp student/123456@orcl file=d:\student.dmp tables= stuinfo buffer=4096 log=d:\student.log |
结果如下:
命令解析:
1、file指定数据备份文件的保存地址。
2、tables指定要备份的表结构,可以导出多个表,通过(table1,table2...,tablen)进行选择。
3、buffer指定数据缓存区的大小。
4、log指定进行导出的日志文件的保存地址。
EXP导出带条件的表数据:
1
|
exp student/123456@orcl file=d:\student.dmp tables= stuinfo buffer=4096 log=d:\student.log query= "'where sex=1'" |
命令解析:
1、query指定要添加的条件,把表中的数据进行过滤导出。
结果如下:
EXP导出用户
EXP导出用户命令结构:
1
|
exp student/123456@orcl file=d:\student.dmp owner=(student) buffer=4096 log=d:\student.log |
命令解析:
1、owner 指定要导出的用户的用户名,但是前提条件是登录的用户得具有访问其它用户对象的权限。一般是使用DBA用户进行登录。可以支持多用户导出,使用逗号“,”进行隔开。
结果如下:
EXP导出表空间
EXP导出表空间命令结构:
1
|
exp student/123456@orcl file=d:\student.dmp tablespaces=(student) buffer=4096 log=d:\student.log |
命令解析:
1、tablespaces指定要导出的表空间,但是前提条件是登录的用户得是DBA用户。可以支持多表空间一起导出,使用逗号“,”进行隔开。
结果如下:
EXP导出数据库
EXP导出数据库命令结构:
1
|
exp student/123456@orcl file=d:\student.dmp FULL =Y buffer=4096 log=d:\student.log |
命令解析:
1、full=Y指的是要导出的是整个数据库,但是前提条件是登录的用户得是DBA用户。
总结
Oracle使用EXP工具进行导出数据库数据进行备份是数据库管理员经常要做的事情,经常用来做数据迁移和定期的数据备份。
Oracle EXPDP导出数据
上一章介绍了EXP导出数据,在数据量较大的情况下,由于导出的效率较低,所以EXPDP是Oracle 10g开始引入的数据泵技术,数据泵技术是在数据库之间或者在数据库与操作系统之间传输数据的工具。
EXPDP是数据泵导出的工具,它可以把数据库中的对象选择性的导出到操作系统中。比如:表、用户、表空间、数据库等。
使用EXPDP工具与EXP不同的是,在使用EXPDP时要先创建目录对象,通过这个对象就可以找到要备份数据的数据库服务器,并且使EXPDP工具备份出来的数据必须存放在目录对象对应的操作系统的目录中。
下面将分步讲解如何使用EXPDP导出数据:
1、创建目录对象:
创建目录对象是使用EXPDP工具进行导出的前提。
创建目录对象的语法如下:
1
|
CREATE DIRECTORY directoryname AS 'filename' |
语法解析:
(1)、directoryname:创建的目录名称。
(2)、filename:存放数据的文件夹名。
2、给使用目录的用户赋权限:
新创建的目录对象不是任何用户都可以使用的,只有拥有该目录使用权的用户才能使用,所以要为使用该目录的用户赋一个权限。笔者要导出的数据都在STUDENT(学生)用户下,那么赋权限的语句如下:
1
|
GRANT READ ,WRITE ON DIRECTORY directoryname TO student |
这里,directoryname就是创建的目录名称。
案例1、创建目录对象dir并给student用户授予读写权限,代码如下:
1
2
3
4
|
--创建目录对象dir,数据文件存放的路径为d:/expdpdi create directory dir as 'd:/expdpdir' ; --给用户授予目录对象的读写权限 grant read ,write on directory dir to student ; |
3、选择性导出数据库数据
前面已经创建好了目录,使用EXPDP工具导出数据的方法与EXP导出的方法类似,也是在DOS的命令窗口中实现的。
Oracle expdp导出表数据:
1
|
expdp student/123456@orcl dumpfile=student.dmp logfile=student.log tables= stuinfo directory=dir |
命令解析:
(1)、dumpfile指定导出的dmp文件的名字。
(2)、logfile指定导出时的日志文件的 名字。
(3)、tables指定备份的表结构,可以导出多个表,通过(table1,table2...,tablen)进行选择
(4)、directory指定导出的目录对象,目录对象中有对应的数据文件保存在哪个目录下。
结果如下:
然后,发现在D:\EXPDPDIR目录下已经生成了STUDENT.DMP的备份文件。
Oracle expdp导出表数据(带条件):
1
2
|
expdp student/123456@orcl dumpfile=student_1.dmp logfile=student_1.log tables= stuinfo directory=dir query= "'where sex=1'" |
query:指定要添加的条件,把表中的数据进行过滤导出
Oracle expdp导出表空间:
1
2
|
expdp student/123456@orcl dumpfile=student_tablespace.dmp logfile=student_tablespace.log tablespaces=(student) directory=dir |
tablespaces:指定要导出的表空间的名字。
Oracle expdp导出用户:
1
2
|
expdp student/123456@orcl dumpfile=student_user.dmp logfile=student_user.log SCHEMAS=(student) directory=dir |
SCHEMAS:指定要导出的用户,前提条件是具有该用户的操作权限
Oracle expdp导出整个库:
1
2
|
expdp student/123456@orcl dumpfile= full .dmp logfile= full .log full =y directory=dir |
full=y指的是导出整个数据库,前提是该用户具有管理员权限。
Oracle逻辑导入数据(IMP/IMPDP)
Oracle逻辑导人数据是逻辑导出数据的逆过程,导人数据可以使用与EXP对应的IMP工具,也可以使用与EMPDP对应的IMPDP工具。本文将分别讲述如何使用IMP和IMPDP工具完成数据的导入工作,Oracle逻辑导入数据经常用来进行备份的恢复和用来做数据迁移,把要迁移的数据进行EXP/EXPDP导出后,再导入到另外一个数据库上。
使用IMP导入数据
IMP导人数据是将数据库中之前使用EXP导出的数据导入到数据库当中。IMP导入的方式也是在DOS命令窗口下完成的,根据不同的DMP文件可以进行不同方式的导入,具体如下:
导入表语法:
1
2
|
imp student/123456@orcl file=d:/student.dmp log=student.log fromuser=student touser=teacher TABLES=(stuinfo) buffer=819200 |
语法解析:
1、使用 imp 导入之前导出student.dmp文件中的学生信息表(stuinfo)。
2、tables指定要导入的表结构,在导入之前要确定dmp文件当中是否含有该表数据。
3、fromuser指定dmp文件中是从student用户导入到目标数据库的teacher用户。在imp导入之前要确定teacher用户下是否已经存在该表,不然会报错。
4、我们选择导入表数据时,会把表相关的索引和触发器一起导入进来。
结果如下:
导入用户语法:
1
2
|
imp student/123456@orcl file=d:/student.dmp log=student.log fromuser=student touser=teacher buffer=819200 |
语法解析:
1、只需要通过fromuser指定要导出的用户,通过touser指定要导入的用户,就会把该用户中所有的数据对象和数据全部导入。
导入一个完整数据库:
1
2
|
imp student/123456@orcl file=d:/student.dmp log=student.log full =y ignore =y buffer=819200 |
语法解析:
1、通过full=Y指定了要导出的是完整数据库,但是前提DMP数据文件中是导出的全库数据。全库导入一般是用来做数据备份以备恢复使用,或者用来搭建测试环境时使用。
IMPDP导入数据
使用IMPDP导入数据的前提是数据是使用EMPDP导出的,同样也是在DOS窗口下直接输入IMPDP和登录数据库的用户名,即可导人数据。
impdp导到指定用户下:
1
|
impdp student/123456@orcl DIRECTORY=dir DUMPFILE=student.dmp logfile=student_imp.log SCHEMAS=student |
语法解析:
1、directory指定的是目录对象,这里的目录对象就是在使用expdp导出时创建的目录对象。
2、dumpfile指定的是要导入的dmp文件,
3、SCHEMAS指定要导入的数据是导入到哪个用户下。
impdp导入表空间:
1
|
impdp student/123456@orcl DIRECTORY=dir DUMPFILE=student_tablespace.dmp logfile=student_imp.log TABLESPACES=student |
语法解析:
1、tablespaces指定要导入的是表空间下的所有对象和数据,这里导入的表空间为student表空间。
impdp导入数据库:
1
|
impdp student/123456@orcl DIRECTORY=dir DUMPFILE=student_full.dmp logfile=student_imp.log full =y |
语法解析:
1、full=Y指定要导入的是数据文件中全库数据,包括各种数据库对象。这里前提是dmp文件是全库导出的数据文件。
impdp导入追加数据:
1
|
impdp student/123456@orcl DIRECTORY=dir DUMPFILE=student.dmp SCHEMAS=student TABLE_EXISTS_ACTION=append |
语法解析:
1、利用 table_exists_action=append指定要导入的dmp文件中,当存在表已经在库里存在的情况下,会直接对表数据进行追加,而不会报错。
导出全库
[oracle@dbserver orcl]$ expdp system/oracle11g directory=dump_dir dumpfile=full.dmp full=y
导入全库
[oracle@dbserver orcl]$ impdp system/oracle11g directory=dump_dir dumpfile=full.dmp full=y
参考
https://www.oraclejsq.com/oraclebf/010400842.html
https://www.oraclejsq.com/oraclebf/010400844.html
https://blog.51cto.com/13555753/2106506
https://juejin.im/post/5c4a788bf265da61141cee00
https://www.imooc.com/article/32468
https://blog.51cto.com/lwm666/1920520