Oracle数据库备份与恢复之一expimp导出与导入装库与卸库.docx
- 文档编号:10045996
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:10
- 大小:20.08KB
Oracle数据库备份与恢复之一expimp导出与导入装库与卸库.docx
《Oracle数据库备份与恢复之一expimp导出与导入装库与卸库.docx》由会员分享,可在线阅读,更多相关《Oracle数据库备份与恢复之一expimp导出与导入装库与卸库.docx(10页珍藏版)》请在冰点文库上搜索。
Oracle数据库备份与恢复之一expimp导出与导入装库与卸库
Oracle数据库备份与恢复之一:
exp/imp(导出与导入装库与卸库)
1.1 基本命令
1. 获取帮助
$exphelp=y
$imphelp=y
2. 三种工作方式
(1)交互式方式
$exp // 然后按提示输入所需要的参数
(2)命令行方式
$expuser/pwd@dbnamefile=/oracle/test.dmpfull=y // 命令行中输入所需的参数
(3)参数文件方式
$expparfile=username.par // 在参数文件中输入所需的参数
参数文件username.par内容userid=username/userpasswordbuffer=8192000
compress=ngrants=y
file=/oracle/test.dmpfull=y
3. 三种模式
(1)表方式,将指定表的数据导出/导入。
导出:
导出一张或几张表:
$expuser/pwdfile=/dir/xxx.dmplog=xxx.logtables=table1,table2
导出某张表的部分数据
$expuser/pwdfile=/dir/xxx.dmplog=xxx.logtables=table1query=\“wherecol1=\‘…\’andcol2\<…\”
导入:
导入一张或几张表
$ imp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1,
table2 fromuser=dbusertouser=dbuser2commit=yignore=y
(2)用户方式,将指定用户的所有对象及数据导出/导入。
导出:
$expuser/pwdfile=/dir/xxx.dmplog=xxx.logowner=(xx,yy)
只导出数据对象,不导出数据 (rows=n)
$expuser/pwdfile=/dir/xxx.dmplog=xxx.logowner=userrows=n
导入:
$ imp user/pwd file=/dir/xxx.dmp log=xxx.log fromuser=dbuser touser=dbuser2
commit=yignore=y
(3)全库方式,将数据库中的所有对象导出/导入导出:
$expuser/pwdfile=/dir/xxx.dmplog=xxx.logfull=ycommit=yignore=y
导入:
$impuser/pwdfile=/dir/xxx.dmplog=xxx.logfromuser=dbusertouser=dbuser2
1.2 高级选项
1. 分割成多个文件
以多个固定大小文件方式导出:
这种做法通常用在表数据量较大,单个dump文件可能会超出文件系统的限制的情况
$expuser/pwdfile=1.dmp,2.dmp,3.dmp,…filesize=1000m log=xxx.logfull=y
以多个固定大小文件方式导入
$ imp user/pwdfile=1.dmp,2.dmp,3.dmp,… filesize=1000m
tables=xxx fromuser=dbusertouser=dbuser2 commit=yignore=y
2. 增量导出/导入
//oracle9i 以后exp 不再支持 inctype
必须为 SYS 或 SYSTEM 才可执行增量导出导入
增量导出:
包括三个类型:
(1)“完全”增量导出(Complete) // 备份整个数据库
$expuser/pwdfile=/dir/xxx.dmplog=xxx.loginctype=complete
(2)“增量型”增量导出 导出上一次备份后改变的数据。
$expuser/pwdfile=/dir/xxx.dmplog=xxx.loginctype=incremental
(3) “累计型”增量导出(Cumulative)只导出自上次“完全”导出之后数据库中变化了的信息。
$expuser/pwdfile=/dir/xxx.dmplog=xxx.loginctype=cumulative
增量导入:
$impusr/pwdFULL=yinctype=system/restore/inctype
其中:
SYSTEM:
导入系统对象
RESTORE:
导入所有用户对象
3. 以SYSDBA进行导出/导入
1. 用于Oracle技术支持
2. 用于表空间传输
例:
$ imp \'usr/pwd@instance as sysdba\' tablespaces=xx transport_tablespace=yfile=xxx.dmpdatafiles=xxx.dbf$ imp file=expdat.dmp userid=“”“sys/password as sysdba”“” transport_tablespace=y“datafile=(c:
tempapp_data,c:
tempapp_index)”
4. 表空间传输 (速度快)
表空间传输是8i 新增加的一种快速在数据库间移动数据的一种办法,是把一个数据库上的格式数据文件附加到另外一个数据库中,而不是把数据导出成 dmp 文件,这在有些时候是非常管用的,因为传输表空间移动数据就象复制文件一样快。
1.关于传输表空间有一些规则 (10g前):
源数据库和目标数据库必须运行在相同的硬件平台上。
源数据库与目标数据库必须使用相同的字符集。
源数据库与目标数据库一定要有相同大小的数据块
目标数据库不能有与迁移表空间同名的表空间
SYS的对象不能迁移
必须传输自包含的对象集
有一些对象,如物化视图,基于函数的索引等不能被传输(同字节序文件的跨平台可以用更换数据文件的文件头的方法)
(10g 支持跨平台的表空间传输,只要操作系统字节顺序相同,就可以进行表空间传输。
需要使用RMAN转换文件格式,略)
2. 检测一个表空间是否符合传输标准的方法:
SQL>execsys.dbms_tts.transport_set_check(‘tablespace_name’,true);SQL>select*fromsys.transport_set_violations;
如果没有行选择,表示该表空间只包含表数据,并且是自包含的。
对于有些非自包含的表空间,如数据表空间和索引表空间,可以一起传输。
3.简要使用步骤:
如果想参考详细使用方法,也可以参考ORACLE联机帮助。
1.设置表空间为只读(假定表空间名字为APP_Data 和APP_Index)
SQL>altertablespaceapp_datareadonly;SQL>altertablespaceapp_indexreadonly;
2.发出EXP命令
SQL>hostexpuserid=“”“sys/passwordassysdba”“”transport_tablespace=ytablespaces=(app_data,app_index)
以上需要注意的是。
为了在SQL中执行EXP,USERID必须用三个引号,在UNIX中也必须注意避免“/”的使用。
在816和以后,必须使用sysdba才能操作。
这个命令在SQL中必须放置在一行(这里是因为显示问题放在了两行)
3.拷贝。
dbf数据文件(以及。
dmp文件)到另一个地点,即目标数据库可以是cp(unix)或copy(windows)或通过ftp传输文件(一定要在bin方式)
4.把本地的表空间设置为读写
$altertablespaceapp_datareadwrite;
$altertablespaceapp_indexreadwrite;
5.在目标数据库附加该数据文件 (直接指定数据文件名)
(表空间不能存在,必须建立相应用户名或者用fromuser/touser)
$impfile=expdat.dmpuserid=“”“sys/passwordassysdba”“”transport_tablespace=y datafiles=(“c:
\app_data.dbf,c:
\app_index.dbf”)tablespaces=app_data,app_indextts_owners=hr,oe
6.设置目标数据库表空间为读写
$altertablespaceapp_datareadwrite;
$altertablespaceapp_indexreadwrite;
1.3 优化
1. 加快exp速度
加大large_pool_size,可以提高exp的速度采用直接路径的方式(direct=y),数据不需要经过内存进行整合和检查。
设置较大的buffer,如果导出大对象,小buffer会失败。
export文件不在ORACLE使用的驱动器上,不要export到NFS文件系统。
UNIX环境:
用管道模式直接导入导出来提高imp/exp的性能
2. 加快imp速度
建立一个indexfile,在数据import完成后在建立索引将import文件放在不同的驱动器上增加DB_BLOCK_BUFFERS增加LOG_BUFFER
用非归档方式运行ORACLE:
ALTERDATABASENOARCHIVELOG;建立大的表空间和回滚段,OFFLINE其他回滚段,回滚段的大小为最大表的1/2使用 COMMIT=N
使用ANALYZE=N
单用户模式导入
UNIX环境:
用管道模式直接导入导出来提高imp/exp的性能
3. 通过unix/LinuxPIPE管道加快exp/imp速度
通过管道导出数据:
1.通过mknod-p建立管道
$mknod/home/exppipep // 在目录/home下建立一个管道exppipe注意参数p
2.通过exp和gzip导出数据到建立的管道并压缩
$exptest/testfile=/home/exppipe&gzipexp.dmp.gz
$exptest/testtables=bitmapfile=/home/newsys/test.pipe&gzipbitmap.dmp.gz
3.导出成功完成之后删除建立的管道
$rm -rf /home/exppipe
导出脚本:
###UNIX下ORACLE数据库通过PIPE管道进行备份
######using"export"and"tar"commandtobakuporacledatebase#######
trap""1#nohup
LOGFILE=/opt/bakup/log/bakup_ora.log
exportLOGFILE
DUMPDIR=/archlog_node1
exportDUMPDIR
exec>$LOGFILE2>&1
echo
echo'Beginat'`date`
echo
# clearoldresultfile
cd$DUMPDIR
if[-fexp.dmp.Z]
thenecho"clearoldresultfile"
rmexp.dmp.Z
fi
# makepipe
mkfifoexp.pipe
chmoda+rwexp.pipe
# gainthedmp.Zfile
compress
su-uoracle-c"expuserid=ll/llfile=$DUMPDIR/exp.pipefull=ybuffer=20000000"
echo
echo' expendat'`date`
echo
# rmpipe
rmexp.pipe
# tarthedmp.Zfiletotape
mt-f/dev/rmt/0rew
tarcvf/dev/rmt/0exp.dmp.Z
echo
echo' tarendat'`date`
echo
通过管道导入生成的文件:
1.通过mknod-p建立管道
$mknod/home/exppipep
2.导入生成的压缩文件
$imptest/testfile=/home/exppipefromuser=testtouser=macro&gunzip
3.删除管道
$rm–fr/home/exppipe
4. 全库导入的一般步骤
注意:
在导出时,需要通过toad或其他工具提取源数据库创建主键和索引的脚本
1. 先全库加rows=n把结构导进去
$impsystem/managerfile=exp.dmplog=imp.logfull=yrows=nindexes=n
2. 使业务用户的触发器失效/删除主键和唯一索引
spooldrop_pk_u.sql
select'altertable'||table_name||'dropconstraint'||constraint_name||';'
fromuser_constraints
whereconstraint_typein('P','U');
/
spooloff
spooldisable_trigger.sql
select'altertrigger'||trigger_name||'disable;'
fromuser_triggers;
/
spooloff
@drop_pk_u.sql
@disable_trigger.sql
3. 以ignore=y全库导入$impsystem/managerfile=exp.dmplog=imp.logfull=yignore=y
4. 通过toad或其他工具提取源数据库创建主键和索引的脚本,在目标数据库中创建主键和索引。
使触发器生效。
1.4 常见问题
1. 字符集问题
ORACLE多国语言设置是为了支持世界范围的语言与字符集,一般对语言提示,货币形式,排序方式和 CHAR,VARCHAR2,CLOB,LONG 字段的数据的显示等有效。
ORACLE 的多国语言设置最主要的两个特性就是国家语言设置与字符集设置,国家语言设置决定了界面或提示使用的语言种类,字符集决定了数据库保存与字符集有关数据(如文本)时候的编码规则。
ORACLE字符集设定,分为数据库字符集和客户端字符集环境设置。
在数据库端,
字符集在创建数据库的时候设定,并保存在数据库props$表中。
在客户端的字符集环境比较简单,主要就是环境变量或注册表项 NLS_LANG,注意NLS_LANG的优先级别为:
参数文件<注册表<环境变量 使用一点点技巧,就可以使导出/导入在不同的字符集的数据库上转换数据。 这里需要一个2进制文件编辑工具即可,如uedit32.用编辑方式打开导出的dmp文件,获取 2、3 字节的内容,如 00 01,先把它转换为10 进制数,为1,使用函数 NLS_CHARSET_NAME即可获得该字符集: SQL>selectnls_charset_name (1)fromdual;NLS_CHARSET_NAME (1) -------------------US7ASCII 可以知道该dmp文件的字符集为US7ASCII,如果需要把该dmp文件的字符集换成ZHS16GBK,则需要用NLS_CHARSET_ID获取该字符集的编号: SQL>selectnls_charset_id('zhs16gbk')fromdual;NLS_CHARSET_ID('ZHS16GBK') -------------------------- 把852换成16进制数,为354,把2、3字节的00 01换成03 54,即完成了把该dmp文件字符集从us7ascii到zhs16gbk的转化,这样,再把该dmp文件导入到zhs16gbk字符集的数据库就可以了。 2. 版本问题 Exp/Imp很多时候,可以跨版本使用,如在版本7与版本8之间导出导入数据,但这样做必须选择正确的版本,规则为: 总是使用IMP的版本匹配数据库的版本,如果要导入到816,则使用816的导入工具。 总是使用EXP的版本匹配两个数据库中低的那个版本,如在815与816之间互导,则使用815的EXP工具。 imp和exp版本不能往上兼容: imp可以导入低版本exp生成的文件, 不能导入高版本exp生成的文件。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle数据库备份与恢复之一 expimp导出与导入装库与卸库 Oracle 数据库 备份 恢复 之一 expimp 导出 导入