数据泵技术比原来导入/导出(imp,exp)技术快15-45倍。速度的提高源于使用了并行技术来读写导出转储文件。此命令只可用在服务端,客户端无法使用。
1.打开SQL plus
首先需要输入用户名和密码进行登录;
创建一个directory对象:create directory dpdata1 as 'd:\test\dump';
然后查看当前实例下有哪些导出目录可使用:select * from dba_directories;
最后登录一个管理员的账户来给目前的账户赋予读写的权限:grant read,write on directory dpdata1 to scott;
若想赋予全部的权限即管理员权限:grant dba to scott;
若重新创建一个新用户:create user username identified by password;
给新用户赋予登录的权限:grant connect,resource to username;
2.启用和禁用主键等
Type Code | Type Description | Acts On Level |
C | Check on a table | Column |
O | Read Only on a view | Object |
P | Primary Key | Object |
R | Referential AKA Foreign Key | Column |
U | Unique Key | Column |
V | Check Option on a view | Object |
--删除所有主键约束 的Sql代码
select 'alter table '||table_name||' drop constraint '||constraint_name||';' from user_constraints where constraint_type='R'
--alter table EMP drop constraint EMP_PK ;
--禁用所有主键约束的Sql代码
select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R'
--alter table EMP disable constraint EMP_PK ;
--启用所有主键约束的Sql代码
select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R'
--alter table EMP enable constraint EMP_PK ;
禁用掉主键等后会使导入导出的速度提高。
3.导出数据
按表导出(可单个或多个):
expdp scott/admin@orcl directory=dpdata1 dumpfile=expdp.dmp tables=BONUS,emp,dept
结尾不要加分号;
按用户导出:expdp scott/admin@orcl directory=dpdata1 dumpfile=expdp.dmp schemas=scott
导出所有所有表:expdp scott/admin@orcl directory=dpdata1 dumpfile=expdp.dmp full=y
4.导入数据
impdp yyb/yyb@orcl directory=dpdata1 dumpfile=expdp.dmp remap_schema=scott:yyb exclude=user(用户已存在,最后不要加分号)
impdp yyb/yyb@orcl directory=dpdata1 dumpfile=expdp.dmp remap_schema=scott:yyb//用户不存在;
从scott用户导入到yyb用户。
5.拓展:
查询Oracle表是否有触发器:
select * from user_triggers where table_owner = 'xxx' and table_name = upper('table_name');
导出数据
1)按用户导
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
2)并行进程parallel
expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3
3)按表名导
expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;
4)按查询条件导
expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';
5)按表空间导
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example;
6)导整个数据库
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;
还原数据
1)导到指定用户下
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;
2)改变表的owner
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;
3)导入表空间
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;
4)导入数据库
impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;
5)追加数据
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION
6删除数据
truncate table test;
truncate与delete的异同:
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。
DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。