以下命令也可直接在dos环境下直接运行(不用加$):expsystem/system@xcfile=c:/hehe.dmpfull=y
*备注:在SQLPlus(不是SQLPlusWorksheet)环境下导入导出必须在前面加上$表示主机运行
Oracle数据库导入导出命令(备份与恢复)
Toad一个很好的oralce数据库操作与管理工具,使用它可以很方便地导入导出数据表,用户以及整个数据库。今天在这里主要讲一下用命令行来操作oracle数据导入和导出:
导出:$exp用户名/密码@数据库(实例ID)名file=(路径)full=y
导入:$imp用户名/密码@数据库(目的数据库的实例ID)名file=e:/output.dmp(路径)full=yignore=y
导入几个表:$imp用户名/密码@数据库名file=e:/output.dmp(路径)fromuser=XXXTABLES=(XXX,XXX)
impgxjh/gxjh@dfmsfile=d:/hehe.dmpfromuser=gxjhTABLES=(ES_ANNOUNCEMENT,ES_RESOURCES,ES_ROLEANNOUNCEMENT)
导出数据
1、获取帮助:
$exphelp=y
2.导出一个完整数据库(注意权限要足够)
$exp用户名/密码@数据库名file=(路径)full=y
示例:$expsystem/system@xcfile=c:/hehe.dmpfull=y
$imptax/test@taxfile=d:/dbbak.dmpfull=y
3、导出一个或一组指定用户所属的全部表、索引和其他对象(注意权限要足够)
$exp用户名/密码@数据库名file=e:/output.dmp(路径)log=XXXowner=XXX
$exp用户名/密码@数据库名file=(路径)log=XXXowner=(XXX,XXX,XXX,XXX,...用户名组逗号隔开)
示例:$expsystem/system@xcfile=c:/heheowner=peter
4、导出一个或多个指定表(注意权限要足够)
$exp用户名/密码@数据库名file=e:/output.dmp(路径)log=tanktables=(XXX.XXX,XXX.XXX,...用户名.表名)
示例:$expsystem/system@xcfile=c:/hehtables=(ueppm.ne_table)
5.导出80M以上的大表时,记得compress=N,否则可能引起错误.
导入数据
1.获取帮助
$imphelp=y
2.导入一个完整数据库
$imp用户名/密码@数据库名file=e:/output.dmp(路径)full=yignore=y
3.导入一个或一组指定用户所属的全部表、索引和其他对象
$imp用户名/密码@数据库名file=XXX.dmpfromuser=XXXtouser=XXX
其中,fromuser若为多个表空间的话,使用()将其括起来:fromuser=(a,b);
touser参数仿fromuser参数;
若只导入一部分表,使用tables参数,用()括起要导入的表;如果想全部导入,不需要指定tables参数
4.将一个用户所属的数据导入另一个用户
$imp用户名/密码@数据库名file=e:/output.dmp(路径)fromuser=XXXtouser=XXX
$imp用户名/密码@数据库名file=e:/output.dmp(路径)fromuser=(XXX,XXX)touser=(XXX,XXX)
impgxjh/gxjh@dfmsfile=d:/hehe.dmpfromuser=gxjhTABLES=(ES_ANNOUNCEMENT,ES_RESOURCES,ES_ROLEANNOUNCEMENT,ES_ROLESERVICE,ES_ROLESTANDARD,ES_SERVICES,SYS_USERROLE,SYS_USERPOSITION,SYS_USER,SYS_ROLEMENU,SYS_ROLE,SYS_POSITIONROLE,SYS_POSITION,SYS_ORGANIZATION,SYS_MENU,SYS_DICTIONARY,ES_USERSTANDARD,ES_USERSERVICE,ES_USERRESOURCES,ES_USERANNOUNCEMENT,ES_STANDARD)
5.导入一个表
$imp用户名/密码@数据库名file=e:/output.dmp(路径)fromuser=XXXTABLES=(XXX,XXX)
$impdatashare/datashare@testfile=e:/DB_JNSZ/DataShare.dmpfull=yignore=y
************************************************************************************************************
利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回Oracle数据库中去。
1.简单导出数据(Export)和导入数据(Import)
Oracle支持三种类型的输出:
(1)表方式(T方式),将指定表的数据导出。
(2)用户方式(U方式),将指定用户的所有对象及数据导出。
(3)全库方式(Full方式),将数据库中的所有对象导出。
数据导出(Import)的过程是数据导入(Export)的逆过程,它们的数据流向不同。
通过输入EXP命令和用户名/口令,您可以
在用户/口令之后的命令:
实例:EXPSCOTT/TIGER
或者,您也可以通过输入跟有各种参数的EXP命令来控制“导出”
的运行方式。要指定参数,您可以使用关键字:
格式:EXPKEYWORD=value或KEYWORD=(value1,value2,...,valueN)
实例:EXPSCOTT/TIGERGRANTS=YTABLES=(EMP,DEPT,MGR)
或TABLES=(T1:P1,T1:P2),如果T1是分区表
USERID必须是命令行中的第一个参数。
关键字说明(默认)关键字说明(默认)
--------------------------------------------------------------------------
USERID用户名/口令FULL导出整个文件(N)
BUFFER数据缓冲区的大小OWNER所有者用户名列表
FILE输出文件(EXPDAT.DMP)TABLES表名列表
COMPRESS导入一个范围(Y)RECORDLENGTHIO记录的长度
GRANTS导出权限(Y)INCTYPE增量导出类型
INDEXES导出索引(Y)RECORD跟踪增量导出(Y)
ROWS导出数据行(Y)PARFILE参数文件名
CONSTRAINTS导出限制(Y)CONSISTENT交叉表一致性
LOG屏幕输出的日志文件STATISTICS分析对象(ESTIMATE)
DIRECT直接路径(N)TRIGGERS导出触发器(Y)
FEEDBACK显示每x行(0)的进度
FILESIZE各转储文件的最大尺寸
QUERY选定导出表子集的子句
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE导出可传输的表空间元数据(N)
TABLESPACES将传输的表空间列表
在没有警告的情况下成功终止导出。
IMPjwd/jwd@psD:\DD\PHARMACY.DMPFULL=Y
此方式导入的数据库带有表结构和数据内容。
********************
********************************
oracle导入导出命令详解(附数据库每天定时备份脚本)收藏
新一篇:关于oracle中纵向记录横向显示的问题举例说明|旧一篇:监控数据库表空间使用情况
一.导出工具exp
1.它是操作系统下一个可执行的文件存放目录/ORACLE_HOME/bin
exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移
它有三种模式:
a.用户模式:导出用户所有对象以及对象中的数据;
b.表模式:导出用户所有表或者指定的表;
c.整个数据库:导出数据库中所有对象。
2.导出工具exp交互式命令行方式的使用的例子
$exptest/test123@appdb
Enterarrayfetchbuffersize:4096>回车
Exportfile:expdat.dmp>m.dmp生成导出的文件名
(1)E(ntiredatabase),(2)U(sers),or(3)T(ables):(2)U>3
Exporttabledata(yes/no):yes>回车
Compressextents(yes/no):yes>回车
ExportdoneinZHS16GBKcharactersetandZHS16GBKNCHARcharacterset
AbouttoexportspecifiedtablesviaConventionalPath...
Table(T)orPartition(T:P)tobeexported:(RETURNtoquit)>cmamenu要导出的表名
..exportingtableCMAMENU4336rowsexported
Table(T)orPartition(T:P)tobeexported:(RETURNtoquit)>要导出的表名n
Table(T)orPartition(T:P)tobeexported:(RETURNtoquit)>回车
Exportterminatedsuccessfullywithoutwarnings.
3.导出工具exp非交互式命令行方式的例子
$expscott/tigertables=emp,deptfile=/directory/scott.dmpgrants=y
说明:把scott用户里两个表emp,dept导出到文件/directory/scott.dmp
$expscott/tigertables=empquery=\"wherejob=\'salesman\'andsal\<1600\"file=/directory/scott2.dmp
说明:在exp里面加上导出emp的查询条件job='salesman'andsal<1600
(但我个人很少这样用,还是把满足条件的记录生成临时表后,再exp会方便一些)
$expparfile=username.parfile=/directory1/username_1.dmp,/directory1/username_2.dmpfilesize=2000Mlog=/directory2/username_exp.log
参数文件username.par内容
userid=username/userpassword
buffer=8192000
compress=n
grants=y
说明:username.par为导出工具exp用的参数文件,里面具体参数可以根据需要去修改
filesize指定生成的二进制备份文件的最大字节数
(可用来解决某些OS下2G物理文件的限制及加快压缩速度和方便刻历史数据光盘等)
4.命令参数说明
关键字说明(默认)
---------------------------------------------------
USERID用户名/口令
FULL导出整个文件(N)
BUFFER数据缓冲区的大小
OWNER所有者用户名列表
FILE输出文件(EXPDAT.DMP)
TABLES表名列表
COMPRESS导入一个范围(Y)
RECORDLENGTHIO记录的长度
GRANTS导出权限(Y)
INCTYPE增量导出类型
INDEXES导出索引(Y)
RECORD跟踪增量导出(Y)
ROWS导出数据行(Y)
PARFILE参数文件名
CONSTRAINTS导出限制(Y)
CONSISTENT交叉表一致性
LOG屏幕输出的日志文件
STATISTICS分析对象(ESTIMATE)
DIRECT直接路径(N)
TRIGGERS导出触发器(Y)
FEEDBACK显示每x行(0)的进度
FILESIZE各转储文件的最大尺寸
QUERY选定导出表子集的子句
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE导出可传输的表空间元数据(N)
TABLESPACES将传输的表空间列表
二.导入工具imp
1.它是操作系统下一个可执行的文件存放目录/ORACLE_HOME/bin
imp导入工具将EXP形成的二进制系统文件导入到数据库中.
它有三种模式:
a.用户模式:导出用户所有对象以及对象中的数据;
b.表模式:导出用户所有表或者指定的表;
c.整个数据库:导出数据库中所有对象。
只有拥有IMP_FULL_DATABASE和DBA权限的用户才能做整个数据库导入
imp步骤:
(1)createtable(2)insertdata(3)createindex(4)createtriggers,constraints
2.导入工具imp交互式命令行方式的例子
$imp
Import:Release8.1.6.0.0-Productionon星期五12月717:01:082001
(c)Copyright1999OracleCorporation.Allrightsreserved.
用户名:test
口令:****
连接到:Oracle8iEnterpriseEditionRelease8.1.6.0.0-64bitProduction
WiththePartitioningoption
JServerRelease8.1.6.0.0-Production
导入文件:expdat.dmp>/tmp/m.dmp
输入插入缓冲区大小(最小为8192)30720>
经由常规路径导出由EXPORT:V08.01.06创建的文件
警告:此对象由TEST导出,而不是当前用户
已经完成ZHS16GBK字符集和ZHS16GBKNCHAR字符集中的导入
只列出导入文件的内容(yes/no):no>
由于对象已存在,忽略创建错误(yes/no):no>yes
导入权限(yes/no):yes>
导入表数据(yes/no):yes>
导入整个导出文件(yes/no):no>yes
.正在将TEST的对象导入到SCOTT
..正在导入表"CMAMENU"4336行被导入
成功终止导入,但出现警告。
3.导入工具imp非交互式命令行方式的例子
$impsystem/managerfromuser=jonestables=(accts)
$impsystem/managerfromuser=scotttables=(emp,dept)
$impsystem/managerfromuser=scotttouser=joetables=emp
$impscott/tigerfile=expdat.dmpfull=y
$impscott/tigerfile=/mnt1/t1.dmpshow=nbuffer=2048000ignore=ncommit=ygrants=yfull=ylog=/oracle_backup/log/imp_scott.log
$impsystem/managerparfile=params.dat
params.dat内容
file=dba.dmpshow=nignore=ngrants=yfromuser=scotttables=(dept,emp)
4.导入工具imp可能出现的问题
(1)数据库对象已经存在
一般情况,导入数据前应该彻底删除目标数据下的表,序列,函数/过程,触发器等;
数据库对象已经存在,按缺省的imp参数,则会导入失败
如果用了参数ignore=y,会把exp文件内的数据内容导入
如果表有唯一关键字的约束条件,不合条件将不被导入
如果表没有唯一关键字的约束条件,将引起记录重复
(2)数据库对象有主外键约束
不符合主外键约束时,数据会导入失败
解决办法:先导入主表,再导入依存表
disable目标导入对象的主外键约束,导入数据后,再enable它们
(3)权限不够
如果要把A用户的数据导入B用户下,A用户需要有imp_full_database权限
(4)导入大表(大于80M)时,存储分配失败
默认的EXP时,compress=Y,也就是把所有的数据压缩在一个数据块上.
导入时,如果不存在连续一个大数据块,则会导入失败.
导出80M以上的大表时,记得compress=N,则不会引起这种错误.
(5)imp和exp使用的字符集不同
如果字符集不同,导入会失败,可以改变unix环境变量或者NT注册表里NLS_LANG相关信息.
导入完成后再改回来.
(6)imp和exp版本不能往上兼容
imp可以成功导入低版本exp生成的文件,不能导入高版本exp生成的文件
根据情况我们可以用
$impusername/password@connect_string
说明:connect_string是在/ORACLE_HOME/network/admin/tnsnames.ora
定义的本地或者远端数据库的名称
5.命令参数说明
关键字说明(默认)
----------------------------------------------
USERID用户名/口令
FULL导入整个文件(N)
BUFFER数据缓冲区大小
FROMUSER所有人用户名列表
FILE输入文件(EXPDAT.DMP)
TOUSER用户名列表
SHOW只列出文件内容(N)
TABLES表名列表
IGNORE忽略创建错误(N)
RECORDLENGTHIO记录的长度
GRANTS导入权限(Y)
INCTYPE增量导入类型
INDEXES导入索引(Y)
COMMIT提交数组插入(N)
ROWS导入数据行(Y)
PARFILE参数文件名
LOG屏幕输出的日志文件
CONSTRAINTS导入限制(Y)
DESTROY覆盖表空间数据文件(N)
INDEXFILE将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES跳过不可用索引的维护(N)
ANALYZE执行转储文件中的ANALYZE语句(Y)
FEEDBACK显示每x行(0)的进度
TOID_NOVALIDATE跳过指定类型id的校验
FILESIZE各转储文件的最大尺寸
RECALCULATE_STATISTICS重新计算统计值(N)
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE导入可传输的表空间元数据(N)
TABLESPACES将要传输到数据库的表空间
DATAFILES将要传输到数据库的数据文件
TTS_OWNERS拥有可传输表空间集中数据的用户
三.unix下oracle数据库定时备份脚本(按用户备份)
以下命令可以用crontab方式每天夜里2点定时执行,脚本最多分30个文件,每个文件大小最大1G的形式将数据库导出,
如果数据库数据量很大,多于30G,则会导出不成功,此时只需根据数据量大小调整变量num的值即可。该脚本将数据库
导出后用gzip进行压缩,然后保存到系统/data/expfiles,导出之前,会将前一天的备份移到/data/expfiles_bak,
此种备份方式可以保存最近两天的数据备份。
outfile=`date+%Y%m%d_%H%M`
num=30
i=1
files=
if[!-d/data/expfiles];then
mkdir/data/expfiles
fi
if[!-d/data/expfiles_bak];then
mkdir/data/expfiles_bak
fi
dfile=`ls-1/data/expfiles_bak/|awk'{if(NR<2){print$1}}'`
prefix=`echo|awk'{printsubstr("'"${dfile}"'",1,13)}'`
rm-f/data/expfiles_bak/${prefix}*
dfile=`ls-1/data/expfiles/|awk'{if(NR<2){print$1}}'`
prefix=`echo|awk'{printsubstr("'"${dfile}"'",1,13)}'`
mv/data/expfiles/${prefix}*/data/expfiles_bak
while[$i-lt$num]
do
files=$files/data/expfiles/${outfile}_$i.dmp,
i=`expr$i+1`
done
files=$files/data/expfiles/${outfile}_$i.dmp
#echo$files
expuserid=user/passwd@acctFILE=$filesfilesize=1024Mgrants=N2>>exp_rpt.log
gzip/data/expfiles/${outfile}*