Oracle使用exp导出指定表或排除某几个表导出备份
Oracle10g之后提供了expdp
和 impdp
导出导入命令,导出效率和速度较快,在本地服务器的情况下,可以使用此命令导出、导入数据,而且可以使用条件命令指定不导出某几个表。但是expdp在客户端导出的时候无法导出,通常要使用dblink
进行操作,太麻烦。那使用exp可以么?今日经过研究测试,可以使用exp命令指定导出某些表。
Expdp命令:
EXPDP
system/**** DIRECTORY=zh0520
SCHEMAS=zh20150327 DUMPFILE=_EASBAK.DMP
LOGFILE=_EASBAK.LOG
比如系统数据库里面有5000个表,每天导出备份的时候,有几个表不用导出(因为某几个附件表或者图片表太大,通常每个表的大小超过10G,导出效率低)。方法如下:
一、生成exp参数文件
sqlplus
"/as sysdba"
‘
注:这里使用system用户也可。
SQL>set heading off
SQL>spool d:\databak\par.file
SQL>select 'tables=('||chr(10) from
dual;
--排除几张表及系统用户
SQL>select table_name||',' from dba_tables where owner in ('ZH20150526') and
table_name not in ('AAAAAA','BBBB','CCCC','DDDD');
SQL>select ')' from dual;
SQL>spool off
找到d:\databak\par.file
文件,打开,修改,将里面的sql语句删除。
Par.file文件的内容如下:
File=d:\databak\exp111.dmp
tables=(
T_BAS_ELEMENTGROUP,
T_BAS_ELEMENTPROPERTY,
T_BAS_ELEMENTTYPE
) log=d:\databak\exp111.log
执行导出:
exp
zh20150526/zh20150526@zheas250
parfile=d:\databak\par.file
成功执行!
备注:Par.file
文件的内容里面的表,可以通过PLSQL
Developer 等工具 执行语句:
select table_name||',' from dba_tables where
owner in ('ZH20150526') and table_name not in
('AAAAAA','BBBB','CCCC','DDDD');
然后复制到par.file文件里面。
导出日志文件exp111.log内容:
连接到: Oracle
Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit
Production
With the Partitioning,
OLAP, Data Mining and Real Application Testing options
已导出ZHS16GBK
字符集和AL16UTF16
NCHAR 字符集
即将导出指定的表通过常规路径...
. . 正在导出表T_BAS_ELEMENTGROUP导出了11 行
. . 正在导出表T_BAS_ELEMENTPROPERTY导出了2470 行
. . 正在导出表T_BAS_ELEMENTTYPE导出了97 行
成功终止导出,
没有出现警告。
正常exp
导出的命令产生的日志文件通常如下:
exp tea/tea@tea
buffer=409600 file=d:\databak\tea.dmp
log=d:\databak\tea.log
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 -
Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的用户...
. 正在导出 pre-schema 过程对象和操作
. 正在导出用户 TEA 的外部函数库名
. 导出 PUBLIC 类型同义词
. 正在导出专用类型同义词
. 正在导出用户 TEA 的对象类型定义
即将导出 TEA 的对象...
. 正在导出数据库链接
. 正在导出序号
. 正在导出簇定义
. 即将导出 TEA 的表通过常规路径...
. . 正在导出表T_BAS_ELEMENTGROUP导出了11 行
. . 正在导出表T_BAS_ELEMENTPROPERTY导出了2470 行
. . 正在导出表T_BAS_ELEMENTTYPE导出了97 行
. 正在导出同义词
. 正在导出视图
. 正在导出存储过程
. 正在导出运算符
. 正在导出引用完整性约束条件
. 正在导出触发器
. 正在导出索引类型
. 正在导出位图,
功能性索引和可扩展索引
. 正在导出后期表活动
. 正在导出实体化视图
. 正在导出快照日志
. 正在导出作业队列
. 正在导出刷新组和子组
. 正在导出维
. 正在导出 post-schema 过程对象和操作
. 正在导出统计信息
成功终止导出,
没有出现警告。
从两个exp命令对比看,后一个是完整导出数据库,前一个只是导出表和表的数据,至于数据里面的视图、触发器、索引等对象都没有导出。
IMP某个单表:
imp ttt/ttt
file=d:\databak\exp.dmp tables=(zx_qm_shop_price_lst)
IMP语句:
imp system/xxx@xxx
file=f:\1.dmp log=f:\1.log fromuser=DBUSRMKT touser=DBUSRMKT
tables=(BPRICEGROUP,BPOPGROUP,BCHECKDETAIL,GOODSBASE_TJ) IGNORE=y
rows=y INDEXES=N FEEDBACK=100000
导出表结构:
exp xjsc/xjsc@xjdb full=y
rows=n file="d:\databak\biaojiegou.dmp" buffer=40960
log="d:\databak\biaojiegou.log"
使用sqlplus定时执行某语句:
sqlplus zheas/****@zheas254
@D:\databak\oracle\gongx.sql
EXPDP命令的导出导入步骤:
1、目录
create
directory zheas254_150909 as
'D:\databak\zheas254_200150909';
查看目录:
select *
from dba_directories;
3、导出数据库
EXPDP
system/**** DIRECTORY=zh0520 SCHEMAS=zh20150327
DUMPFILE=_EASBAK.DMP LOGFILE=_EASBAK.LOG
4、建表空间和用户、授权
CREATE
TABLESPACE EAS_D_zh20150527_STANDARD DATAFILE
'D:\oracledata\EAS_D_zh20150527_STANDARD.ORA' SIZE 2048M autoextend
on;
CREATE
TABLESPACE EAS_D_zh20150527_TEMP2 DATAFILE
'D:\oracledata\EAS_D_zh20150527_TEMP2.DBF' SIZE 1024M autoextend
on;
CREATE
TABLESPACE EAS_D_zh20150527_INDEX DATAFILE
'D:\oracledata\EAS_D_zh20150527_INDEX.ORA' SIZE 1024M autoextend
on;
CREATE
TEMPORARY TABLESPACE EAS_T_zh20150527_STANDARD TEMPFILE
'D:\oracledata\EAS_T_zh20150527_STANDARD.DBF' SIZE 1024M autoextend
on;
create
user zh20150527 identified by zh20150527 default tablespace
EAS_D_zh20150527_STANDARD quota unlimited on
EAS_D_zh20150527_STANDARD temporary tablespace
EAS_T_zh20150527_STANDARD;
alter
user zh20150527 quota unlimited on
EAS_D_zh20150527_INDEX;
grant dba
to zh20150527;
5、导入数据库(注意前后数据库用户名,丛0327导入到0510)
impdp
system/kingdee DIRECTORY=zheas254_150909
DUMPFILE=_EASBAK.DMP REMAP_SCHEMA=zheas:zh20150527 REMAP_TABLESPACE=EAS_D_zheas_STANDARD:EAS_D_zh20150527_STANDARD
drop user zh20150526 cascade;
2020.11.03,oracle12C 导出和导入:
exp mgstest/*****@pdborcl rows=y
file="E:\mgs36\mgstest31.dmp" buffer=409600
log="E:\mgs36\mgstest31.log"
sqlplus system/*****@pdborcl
drop user mgstest cascade;
CREATE USER mgstest IDENTIFIED BY ***** DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;
GRANT CONNECT,RESOURCE TO mgstest;
grant all privileges to mgstest;
imp system/*****@pdborcl
file=E:\mgs36\mgs14.dmp log=E:\mgs36\mgs14imp.log
fromuser=mgs touser=mgstest IGNORE=y rows=y
以上