转自: http://blog.163.com/guanrui_111/blog/static/3452484720120410553261/
1、连接Oracle数据库
SQL> conn / as sysdba
已连接。
2、创建一个操作目录
SQL>create directory dump_dir as 'd:\oracle\dump';
注意同时需要使用操作系统命令在硬盘上创建这个物理目录。
目录已创建。
3、使用以下命令创建一个导出文件目录
赋予用户操作dump_dir目录的权限,
SQL>grantread, write on directory dump_dir to ewww2006;
授权成功。
4、使用命令expdp导出数据(可以按照用户模式导出、按照表、按照表空间导出和全库导出)
查看一下ewww2006用户具有的表
SQL>conn ewww2006
SQL> select object_name from user_objects where object_type = 'TABLE';
OBJECT_NAME
--------------------------------------------------------------------------------
EMPLOYEE
AFFAIRS
BASE_CUSTOMER
BASE_CUSTOMER_SIGN
CUSTOMERINFO
CN
FAVORITE_AUTHORS
已选择7行。
退出,进行备份
C:\> expdp ewww2006/mypassworddirectory = dump_dir dumpfile = 20120720ewww2006tab.dmp tables = employee
导入命令:
查看下表employee
SQL>set serveroutput on
SQL>exec print_table('select * from employee');
ENO : 10001
ENAME : 王俊杰
EGENDER : 男
BIRTHDAY : 08-8月 -88
DNO : 001
EPOSITION : manager
EPHONENO : 12414412141
EMAIL : ewww2006@qq.com
SELFINTRODUCE : 信息科学与技术学院研究生,窗口与网络编程课程老师
PASSWD : 123456
[Row:1]---------------------------------------------------
ENO : 10002
ENAME : ewww2006
EGENDER : male
BIRTHDAY : 13-12月-45
DNO : 001
EPOSITION : anywhere
EPHONENO : 12345455
EMAIL : fdasda@bnu.cn
SELFINTRODUCE : dfaasdfadfasffgggggggggdafagafga
PASSWD : 111
[Row:2]---------------------------------------------------
PL/SQL 过程已成功完成。
其中print_table是自己写的一个存储过程,用来对表进行按格式打印。可以看到有两条记录。
PL/SQL 过程已成功完成。
删除employee表,然后使用导入命令
C:\> impdp ewww2006/mypassword directory = dump_dirdumpfile = 20120720ewww2006tab.dmp tables = employee
查看结果,发现删除的数据表又已经找回来了.
但是,如果你是删除了employee中的记录的话,employee表仍然存在于数据库,这时是用上面的导入命令将报错。
Oracle10g中的数据泵只能用于服务器端,而不能用于客户端,它可以导出表、方案、表空间和整个数据库。
1、导出表
C:\>expdp scott/tiger directory=dump_dirdumpfile=20080601.dmp tables=dept,emp
2、导出方案
导出方案将方案的所有数据库对象和数据库表导出到一个文件中。
C:\>expdp scott/tiger directory=my_dirdumpfile=20090517scottschema.dmp schemas=scott
3、导出表空间
C:\>expdp system/sysadmin directory=my_dir dumpfile=tablespace.dmptablespaces=scott
4、导出整个数据库
expdp system/sysadmin directory=dump_dir dumpfile=full.dmpfull=y
1、导入表
impdp scott/tiger directory=dump_dir dumpfile=dumptab.dmp tables=dept,emp
2、导入方案
一般只能导入自己的方案,如果想导入其他方案,必须具有EXP_FULL_DATABASE或者DBA权限。
impdp scott/tiger directory=dump_dirdumpfile=dumptab.dmp schemas=scott
3、导入表空间
impdp system/sysadmin directory=dump_dir dumpfile=tablespace.dmptablespaces=users
4、导入整个数据库
impdp system/sysadmin directory=dump_dir dumpfile=full.dmpfull=y
使用impdp和expdp可以实现在不同的数据库之间移动表空间。在Oracle10g以前,只能在同一个操作系统平台之间移动表空间。在Oracle10g之后,不仅可以在同一个操作系统平台之间移动表空间,还可以在不同的操作系统之间移动表空间。用户可以通过查看数据库视图v$transportable_platform查询到哪些操作系统平台之间可以移动
表空间,即:
SQL> col platform_name format a60;
SQL> select * from v$transportable_platform order byplatform_id;
DBA 经常完成的任务
要移动表空间必须满足如下条件:
1、原数据库和目标数据库必须有相同的数据库字符集和国家字符集
2、不能移动到具有同名表空间的目标数据库中。如果出现同名,只能使用ALTERTABLESPACE RENAME
命令更改源数据库或者目标数据库的表空间名称。
3、不能移动SYSTEM或者SYS用户对象所在的表空间。
4、要将表空间在不同的操作系统之间移动,必须将初始化参数COMPATIBLE参数设置为10.0以上。
因为Oracle10g以前的版本不支持在不同操作系统之间移动表空间。
5、要移动的表空间集合必须满足自包含,可以使用DBMS_TTS的过程TRANSPORT_SET_CHECK检查
是否自包含,然后在临时表transprot_set_violations内查询检查结果。
以下是移动表空间的步骤,以移动USERS表空间为例子:
第一步:设置表空间为只读表空间:
alter tablespace users read only;
第二步:使用expdp导出表空间
expdp 用户名/口令directory=目录名称dumpfile=导出文件名称 tablespaces=表空间名称
例如:
expdp system/sysadmin directory=dump_dir dumpfile=tablespace.dmptablespaces=users;
第三步:使用操作系统命令将导出文件和传输表空间的数据文件复制到目标数据库中。
第四步:在目标数据库上使用IMPDP将源数据库的导出内容导入到目标数据库中,IMPDP导入表空间的
命令格式如下:
IMP 用户名称/口令directory=目录名称dumpfile=导出文件名称tablespaces=表空间名称
datafiles=;数据文件名称'
例如:
impdpsystem/sysadmin directory=dump_dir dumpfile=tablespace.dmp tablespaces=users
transport_datafiles=D:\oracle\oradata\oramgr\user01.dbf;
第五步:使用一下命令将原数据库的传输表空间恢复为可读写
alter tablespace users read write;