expdp&impdp

调用EXPDP
##################################################

使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录.因此,使用EXPDP工具时,必须首先建立DIRECTORY对象.并且需要为数据库用户授予使用DIRECTORY对象权限.
CREATE DIRECTORY dump dir AS ‘D:DUMP’;
GRANT READ, WIRTE ON DIRECTORY dump_dir TO scott;

1.导出表
Expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=dept,emp

2.导出方案
Expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=schema.dmp SCHEMAS=system,scott

3.导出表空间
Expdp system/manager DIRECTORY=dump_dir DUMPFILE=tablespace.dmp TABLESPACES=user01,user02

4.导出数据库
Expdp system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=Y

调用IMPDP
##################################################

1.导入表
Impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=dept,emp
Impdp system/manage DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=scott.dept,scott.emp REMAP_SCHEMA=SCOTT:SYSTEM

第一种方法表示将DEPT和EMP表导入到SCOTT方案中,第二种方法表示将DEPT和EMP表导入的SYSTEM方案中.
注意,如果要将表导入到其他方案中,必须指定REMAP SCHEMA选项.

2.导入方案
Impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=schema.dmp SCHEMAS=scott

Impdp system/manager DIRECTORY=dump_dir DUMPFILE=schema.dmp SCHEMAS=scott REMAP_SCHEMA=scott:system

3.导入表空间
Impdp system/manager DIRECTORY=dump_dir DUMPFILE=tablespace.dmp TABLESPACES=user01

4.导入数据库
Impdp system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y

exp和imp的用法
##################################################
<1>表达式方式,只能导入导出某用户对象下的一表
exp scott/abcd1234 file=/backup/scott.emp.dmp tables=emp;
imp scott/abcd1234 file=/backup/scott.emp.dmp

//查看数据泵使用的目录
select * from dba_directories;

//把数据泵使用目录的读写权限赋予scott用户
grant read,write on directory data_pump_dir to scott;     

//使用数据泵导入数据实例
      touch scott.txt 参数文件
      DIRECTORY=DATA_PUMP_DIR
      tables=emp_dump
      DUMPFILE=scott.emp_dump
      QUERY=scott.emp_dump:"where job<>'analyst' and sal>1250"
      expdp scott/abcd1234 parfile=/backup/scott.txt
      impdp scott/abcd1234 parfile=/backup/scott.txt
      使用数据泵把一个用户下的所有对象,拷贝到另一个用户对象下(USER--->JINLIAN)
      touch scott参数文件
      DIRECTORY=DATA_PUMP_DIR
      SCHEMAS=scott
      DUMPFILE=schema_scott.dat
      EXCLUDE=PACKAGE
      EXCLUDE=VIEW
      EXCLUDE=TABLE:"LIKE'%DUMP'"
      expdp system/111111 parfile=scott
      把scott对象下的数据导入到jinlian对象下
      touch imp
      DIRECTORY=DATA_PUMP_DIR
      DUMPFILE=schema_scott.dat
      REMAP_SCHEMA=SCOTT:JINLIAN
      REMAP_TABLESPACE=USERS:JINLIAN
      impdb system/111111 parfile=imp

//可以使用以下命令查看是导入是否正确
select table_name,tablespace_name from user_tables;

//oracle数据导入
cat output.sql
set line 120
set pagesize 100
setfeedback off
spool /backup/emp
select * from emp;
spool off
数据表导出后会生成一个emp.lst文件,然后使用execl打开就行了。

//把其他数据导入到oracle
mkdir -p /oracle/ETL
chown -R oracle:oinstall /oracle/ETL
create directory data_dir as '/oracle/ETL'
create directory log_dir as '/oracle/ETL'
grant read on directory data_dir to scott;
grant write on directory log_dir to scott;

//查看创建的目录
select * from dba_directories where directory_path like '%ETL';

//查看外表信息
SQL> select * from dba_tab_privs where table_name in ('data_dir','log_dir') and grantee = 'scott';

//创建外表
create table sales_delta
(prod_id number(6),
cust_id number,
time date,
channel_id char(1),
promo_id char(1),
quantity_sold number(3),
amount_sold number(10,2))
organization external
(type oracle_loader
default directory data_dir
access parameters
(records delimited by newline characterset us7ascii
badfile 'log_dir' :'sales.bad'
logfile 'log_dir' :'sales.log'
fields terminated by "" optionally enclosed by '\t')
location ('sales_delta.txt')

reject limit unlimited;

//数据泵的自动化操作
SQL>connect jinlian/abcd1234
SQL>col object_name for a30
SQL> select table_name,tablespace_name from user_tables; 查看用户对象下的表明和对象的表空间
SQL>select object_name,object_type,status from user_objects;查看用户对象下的所有对象包括索引等
SQL> connect system/111111
SQL> create directory data_dump as '/exportdump'; 创建备份使用的目录
SQL> create directory log_dump as '/exportdump'; 创建备份使用目录
SQL> grant read,write on directory data_dump to jinlian; 给jinlian用户对目录的读写权限
SQL> grant read,write on directory log_dump to jinlian;
SQL> select * from dba_directories where directory_path like '%dump'; 查所创建的目录是否成功
SQL> select * from DBA_TAB_PRIVS where TABLE_NAME in ('DATA_DUMP','LOG_DUMP') and GRANTEE = 'JINLIAN';查看jinlian是否对目录有读写权限
数据导出参数文件cat auto.txt
DIRECTORY=data_dump
SCHEMAS=jinlian
DUMPFILE=schemas_jinlian.dat
EXCLUDE=PACKAGE
EXCLUDE=VIEW
EXCLUDE=PROCEDUER
EXCLUDE=FUNCTION
EXCLUDE=INDEX:"LIKE 'PK_%'"
expdp jinlian/abcd1234 parfile=auto.txt

//查看系统的闪回是否开启
connect system/111111
show parameter bin;

//关闭系统闪回功能
alter system set recyclebin = off;

//查看一个用户对象下的表
select * from cat;

//显示回收站中被删除的表
show recyclebin

//从回收站中删除不想要的表
purge table BONUS;  

//清空回收站中所有的东西
purge recyclebin;

//查看回收站中表占用的磁盘空间数
select object_name,ts_name,space from user_recyclebin;

//闪回被删除的表
flashback table emp_test to before drop;

//删除数据不放回收站
drop table emp_test purge;

//闪回错误的DML操作
查看undo_retention的设置   undo_retention的值是,DLL提交后,该数据在还原段里保存的时间
show parameter undo_retention;

//修改undo_retention的值
alter system set undo_retention = 7900;

//更新jinlian下的emp_dump表
<1>update emp_dump set sal = 9999;

//使用version_xid查看刚才DDL操作信息

<2>SQL> select versions_xid,empno,ename,sal from emp_dump versions between scn minvalue and maxvalue where empno = 7900;
VERSIONS_XID       EMPNO ENAME       SAL
---------------- ---------- ---------- ----------
         7900 JAMES       950

<3>SQL>commit;
提交后在查看DDL的操作系统

<4>SQL> select versions_xid,empno,ename,sal from emp_dump versions between scn minvalue and maxvalue where empno = 7900;
VERSIONS_XID       EMPNO ENAME       SAL
---------------- ---------- ---------- ----------
04001D0044020000       7900 JAMES      9999
                     7900 JAMES       950
根据Versions_xid号,查看恢复DLL操作所要使用的undo_sql语句

<5>SQL> select operation,undo_sql from flashback_transaction_query where xid = hextoraw('04001D0044020000');
根据Versinos_xid号,查看表在修改前的SCN 号

<6>SQL> select operation,start_scn from flashback_transaction_query where xid = hextoraw('04001D0044020000');
根据原来的SCN号恢复数据

<7>SQL> flashback table jinlian.emp_dump to scn 765066;
使用SCN恢复数据必须开启行的移动功能

<8>SQL> alter table jinlian.emp_dump enable row movement;
恢复数据

<9>SQL> flashback table jinlian.emp_dump to scn 765066;

非当前还原表空间的恢复(使用create undo tablespace jinlian_undo)
查看系统中所有的还原表空间

<1>select talespace_name,status,contents from dba_tablespaces where contests = 'UNDO';
查看还原表空间的参数

<2>show parameter undo

<3>创建表空间
create undo tablespace jinlian_undo
datafile '/Disk2/jinlian.dbf'
size 10m
extent management local

<4>查看所创建的表空间的大小
select file_id,file_name,tablespace_name,bytes/1024/1024 MB from dba_data_files where tablespace_name like '%UNDO%';

<5>shutdown immediate

<6>mv /Disk2/jinlian.dbf /Disk2/jinlian.dbf.bak

<7>startup
RA-01110: data file 6: '/Disk2/jinlian.dbf
把出现问题的文件设置脱机并删除(系统物理文件还在需要手动删除)

<8>SQL> alter database datafile 6 offline drop;

<9>alter database open;

//删除表空间
drop tablespace jinlian_undo;

//临时表空间的还原
<1>select tablespace_name,status,contents from dba_tablespace;
当临时表空间数据文件坏了,oracle数据库重启后会自动生成。

<2>如果是7*24小时服务的库,可以采用临时添加数据文件的方式解决
SQL> alter tablespace temp add        
2 tempfile '/Disk2/temp02.dbf'
3 size 20M;
删除临时文件
alter tablespace temp drop tempfile '/Disk2/temp02.dbf';

索引表空间的恢复(这个也不用备份,把要表空间的语句和索引整理出来,当表空间数据文件坏时,可以使用)
SQL>select index_name,table_name,tablespace_name, status from user_indexes;

阅读更多
个人分类: Oracle
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭