Oracle数据库备份与恢复总结
关于Oracle数据库的备份与恢复,网上有不少文章。经过了不少项目,以及我在给公 司做培训时也有一些总结,现在总结在一起贴出来。以下方法,有一些可能不能完全归纳为
备份与恢复,但是作为开发DBA,有时也是很有用的。对于生产库,一般还是推荐使用 ARCHIVELOG模式下的OS备份或RMAN方法,要求比较高的可能还必须用到RAC等并 行处理的架构,这可是一个很大的主题了,在此不作讨论。
这里列出来,只是自己的一个备忘录以备需要时查看,有好多不全面或者不当的地方, 欢迎各位补充、批评指正!同时,本文借鉴了网上的一些相关文章,希望大侠们不要见怪, 此处一并谢过。
?exp/imp(导出与导入装库与卸库) ?SQL*Loader
?UserManagedBackupandRecovery(用户管理的备份与恢复) ?RMAN
?Flashback ?LogMiner
?备份与恢复的规划
1.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/userpassword buffer=8192000 compress=n grants=y
file=/oracle/test.dmp full=y 3.三种模式
(1)表方式,将指定表的数据导出/导入。 导出:
导出一张或几张表:
$expuser/pwdfile=/dir/xxx.dmplog=xxx.logtables=table1,table2
6
导出某张表的部分数据
$expuser/pwdfile=/dir/xxx.dmplog=xxx.logtables=table1query=\\”wherecol1=\\’?\\’
andcol2\\\\” 导入:
导入一张或几张表
$impuser/pwdfile=/dir/xxx.dmplog=xxx.logtables=table1,table2fromuser=dbuser touser=dbuser2commit=yignore=y
(2)用户方式,将指定用户的所有对象及数据导出/导入。 导出:
$expuser/pwdfile=/dir/xxx.dmplog=xxx.logowner=(xx,yy) 只导出数据对象,不导出数据(rows=n)
$expuser/pwdfile=/dir/xxx.dmplog=xxx.logowner=userrows=n 导入:
$impuser/pwdfile=/dir/xxx.dmplog=xxx.logfromuser=dbusertouser=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=1000mlog=xxx.logfull=y 以多个固定大小文件方式导入
$impuser/pwdfile=1.dmp,2.dmp,3.dmp,?filesize=1000mtables=xxxfromuser=dbuser touser=dbuser2commit=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:导入系统对象
7
RESTORE:导入所有用户对象 3.以SYSDBA进行导出/导入 1.用于Oracle技术支持 2.用于表空间传输 例:
$imp\\'usr/pwd@instanceassysdba\\'tablespaces=xxtransport_tablespace=y file=xxx.dmpdatafiles=xxx.dbf
$impfile=expdat.dmpuserid=”””sys/passwordassysdba”””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=y tablespaces=(app_data,app_index) 以上需要注意的是
·为了在SQL中执行EXP,USERID必须用三个引号,在UNIX中也必须注意 避免“/”的使用
·在816和以后,必须使用sysdba才能操作
8
·这个命令在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=ydatafiles=(“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.导出成功完成之后删除建立的管道
9
$rm-rf/home/exppipe 导出脚本:
###UNIX下ORACLE数据库通过PIPE管道进行备份
######using\trap\
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] then
echo\rmexp.dmp.Z fi
#makepipe
mkfifoexp.pipe chmoda+rwexp.pipe #gainthedmp.Zfile
compress
su-uoracle-c\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.导入生成的压缩文件
10
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库[精品]Oracle 数据库备份与恢复总结(2)在线全文阅读。
相关推荐: