oracle数据库导入导出数据冷备热备实例Word格式.docx
- 文档编号:16488379
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:109
- 大小:78.25KB
oracle数据库导入导出数据冷备热备实例Word格式.docx
《oracle数据库导入导出数据冷备热备实例Word格式.docx》由会员分享,可在线阅读,更多相关《oracle数据库导入导出数据冷备热备实例Word格式.docx(109页珍藏版)》请在冰豆网上搜索。
$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
高级选项
分割成多个文件
以多个固定大小文件方式导出:
这种做法通常用在表数据量较大,单个dump文件可能
会超出文件系统的限制的情况
$expuser/pwdfile=1.dmp,2.dmp,3.dmp,…filesize=1000m
log=xxx.logfull=y
以多个固定大小文件方式导入
user/pwdfile=1.dmp,2.dmp,3.dmp,…
filesize=1000mtables=xxx
fromuser=dbusertouser=dbuser2
增量导出/导入
//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:
导入所有用户对象
以SYSDBA进行导出/导入
用于Oracle技术支持
用于表空间传输
例:
imp
/'
usr/pwd@instance
as
sysdba/'
tablespaces=xx
transport_tablespace=yfile=xxx.dmpdatafiles=xxx.dbf
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转换文件格式,略)
检测一个表空间是否符合传输标准的方法:
SQL>
execsys.dbms_tts.transport_set_check(‘tablespace_name’,true);
SQL>
select*fromsys.transport_set_violations;
如果没有行选择,表示该表空间只包含表数据,并且是自包含的。
对于有些非自包
含的表空间,如数据表空间和索引表空间,可以一起传输。
3.
简要使用步骤:
如果想参考详细使用方法,也可以参考ORACLE联机帮助。
1.设置表空间为只读(假定表空间名字为APP_Data
和APP_Index)
altertablespaceapp_datareadonly;
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.设置目标数据库表空间为读写
1.3
优化
加快exp速度
加大large_pool_size,可以提高exp的速度采用直接路径的方式(direct=y),数据不需要经过内存进行整合和检查.设置较大的buffer,如果导出大对象,小buffer会失败。
export文件不在ORACLE使用的驱动器上不要export到NFS文件系统
UNIX环境:
用管道模式直接导入导出来提高imp/exp的性能
加快imp速度
建立一个indexfile,在数据import完成后在建立索引
将import文件放在不同的驱动器上增加DB_BLOCK_BUFFERS
增加LOG_BUFFER
用非归档方式运行ORACLE:
ALTERDATABASENOARCHIVELOG;
建立大的表空间和回滚段,OFFLINE其他回滚段,回滚段的大小为最大表的1/2使用
COMMIT=N
使用ANALYZE=N
单用户模式导入
通过unix/LinuxPIPE管道加快exp/imp速度
通过管道导出数据:
1.通过mknod-p建立管道
$mknod/home/exppipep
在目录/home下建立一个管道exppipe注意参数p
2.通过exp和gzip导出数据到建立的管道并压缩
$exptest/testfile=/home/exppipe&
gzip<
/home/exppipe>
exp.dmp.gz
$exptest/testtables=bitmapfile=/home/newsys/test.pipe&
gzip<
/home/newsys/test.pipe>
bitmap.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`
#
clearoldresultfile
cd$DUMPDIR
if[-fexp.dmp.Z]
then
echo"
clearoldresultfile"
rmexp.dmp.Z
fi
makepipe
mkfifoexp.pipe
chmoda+rwexp.pipe
gainthedmp.Zfile
compress<
exp.pipe>
exp.dmp.Z&
su-uoracle-c"
expuserid=ll/llfile=$DUMPDIR/exp.pipefull=ybuffer=20000000"
expendat'
`date`
rmpipe
rmexp.pipe
tarthedmp.Zfiletotape
mt-f/dev/rmt/0rew
tarcvf/dev/rmt/0exp.dmp.Z
tarendat'
通过管道导入生成的文件:
$mknod/home/exppipep
2.导入生成的压缩文件
$imptest/testfile=/home/exppipefromuser=testtouser=macro&
gunzip<
exp.dmp.gz>
/home/exppipe
3.删除管道
$rm–fr/home/exppipe
全库导入的一般步骤
注意:
在导出时,需要通过toad或其他工具提取源数据库创建主键和索引的脚本
先全库加rows=n把结构导进去
$impsystem/managerfile=exp.dmplog=imp.logfull=yrows=nindexes=n
使业务用户的触发器失效/删除主键和唯一索引
spooldrop_pk_u.sql
select'
altertable'
||table_name||'
dropconstraint'
||constraint_name||'
;
'
fromuser_constraints
whereconstraint_typein('
P'
'
U'
);
/
spooloff
spooldisable_trigger.sql
altertrigger'
||trigger_name||'
disable;
fromuser_triggers;
@drop_pk_u.sql
@disable_trigger.sql
以ignore=y全库导入
$impsystem/managerfile=exp.dmplog=imp.logfull=yignore=y
通过toad或其他工具提取源数据库创建主键和索引的脚本,在目标数据库中创建主键
和索引。
使触发器生效。
1.4
常见问题
字符集问题
ORACLE
多国语言设置是为了支持世界范围的语言与字符集,一般对语言提示,货币形式,排序方式和
CHAR,VARCHAR2,CLOB,LONG
字段的数据的显示等有效。
ORACLE
的多国语言设置最主要的两个特性就是国家语言设置与字符集设置,国家语言设置决定了界面或提示使用的语言种类,字符集决定了数据库保存与字符集有关数据
(如文本)时候的编码规则。
ORACLE字符集设定,分为数据库字符集和客户端字符集环境设置。
在数据库端,
字符集在创建数据库的时候设定,并保存在数据库props$表中。
在客户端的字符集环境比较简单,主要就是环境变量或注册表项
NLS_LANG,注意NLS_LANG的优先级别为:
参数文件<
注册表<
环境变量<
alter
session。
如果客户端字符集和服务器端字符集不一样,而且字符集的转换也不兼容,那么客户端的数据显示与导出/导入的与字符集有关的数据将都是乱码。
使用一点点技巧,就可以使导出/导入在不同的字符集的数据库上转换数据。
这里
需要一个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获取该字符集的编号:
selectnls_charset_id('
zhs16gbk'
)fromdual;
NLS_CHARSET_ID('
ZHS16GBK'
)
--------------------------
把852换成16进制数,为354,把2、3字节的00
01换成03
54,即完成了把该dmp文件字符集从us7ascii到zhs16gbk的转化,这样,再把该dmp文件导入到zhs16gbk字符集的数据库就可以了。
版本问题
Exp/Imp很多时候,可以跨版本使用,如在版本7与版本8之间导出导入数据,但这样做必须选择正确的版本,规则为:
总是使用IMP的版本匹配数据库的版本,如果要导入到816,则使用816的导入工具。
总是使用EXP的版本匹配两个数据库中低的那个版本,如在815与816之间互导,则使用815的EXP工具。
imp和exp版本不能往上兼容:
imp可以导入低版本exp生成的文件,
不能导入高版本exp生成的文件。
2.1基本知识
Oracle
的
SQL*LOADER
可以将外部格式化的文本数据加载到数据库表中。
通常与SPOOL导出文本数据方法配合使用。
1.命令格式
SQLLDRkeyword=value[,keyword=value,...]
$sqlldruser/pwdcontrol=emp.ctldata=emp.datbad=emp.badlog=emp.log
2.控制文件
SQL*LOADER
根据控制文件可以找到需要加载的数据。
并且分析和解释这些数
据。
控制文件由三个部分组成,具体参数参考帮助文档:
全局选件,行,跳过的记录数等;
2.INFILE子句指定的输入数据;
数据特性说明。
comment:
--注释
loaddatainfile*
append
--除了append外,还有insert、replace、truncate等方式
intotableemp
fieldsterminatedby‘|’
(
no
floatexternal,namechar(20),
age
integerexternal,
duty
char
(1),
salary
floatexternal,
upd_ts
date(14)‘YYYYMMDDHH24MISS’
begindata
100000000003|Mulder|000020|1|000000005000|20020101000000
100000000004|Scully|000025|2|000000008000|20020101235959
控制文件中infile选项跟sqlldr命令行中data选项含义相同,如使用infile*则表明
数据在本控制文件以begindata开头的区域内。
一些选项:
FIELDSTERMINATEDBYWHITESPACEFIELDSTERMINATEDBYx'
09'
FILLER_1FILLER,//
指定某一列将不会被装载
DEPTNOposition(1:
2),DNAMEposition(*:
16),//
指定列的位置
SEQNORECNUM//载入每行的行号
SKIPn
指定导入时可以跳过多少行数据
3.数据文件
按控制文件数据格式定义的数据行集,例:
100000000001|Tom|000020|1|000000005000|20020101000000
100000000002|Jerry|000025|2|000000008000|20020101235959
固定格式、可变格式、流记录格式:
固定格式:
当数据固定的格式(长度一样)时且是在文件中得到时,要用INFILE"
fixn"
loaddata
infile'
example.dat'
"
fix11"
intotableexample
fieldsterminatedby'
optionallyenclosedby'
(col1char(5),col2char(7))
example.dat:
001,cd,0002,fghi,
00003,lmn,
1,"
pqrs"
0005,uvwx,
可变格式:
当数据是可变格式(长度不一样)时且是在文件中得到时,要用INFILE"
varn"
。
如:
var3"
(col1char(5),col2char(7))example.dat:
009hello,cd,010world,im,
012my,nameis,
流记录格式:
//Stream-recoredformat:
loaddatainfile'
xx.dat'
str'
|/n'
intotablexxfieldterminatedby'
example.dat:
hello,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 数据库 导入 导出 数据 冷备热备 实例