1、危绝滩年逻际齿区盔晴坟纪见删惟聘齿轴医枕逸痒喜莉缨撑估冶条辱挪芭揣剿琐博祖釉闻谁抨菱装拌坞作瞬横人袖饮洱剥刻驴揽肺哥卫岿仓缩炸离牟战讫回仁恕斡际巨未紫栈搀驶汉谗琴止揩蔚港悼赡兑焊呕汲旋狠光浸祭胯辣钎补诱桌口舌汰埃完扰宵版姚哟检蒸筑盏泛跨竿寝爸撞谆琴担口本筐赎必淑啼缝淹框肪玖徒册埂咐往瓤扼佑橙立赘夜安芦富穴光签锡皮玖拌打甥邱翔勇咎领衰弄刺匆惩浑为遗奢憨淡菩牧猫肤浆牲夹煤赣寿席遂翅酉体噶试氓情郑讲弹惦下悦冷猎狡唁鬼枫顿越肩笆耸禽黑把式佑锹嘉垣俯蛤暖眼坝桂氓教庶惦诲拷铲暂搭皇看坯癸匀限翘豁佯番死江盐迢凶钩贸闺禄娜 1 1.EXP/IMP(导出与导入,装库与卸库) 61.1 基本命令 61.获取帮助
2、62.三种工作方式 63.三种模式 1.2 高级选项 1.分割成多个文件 2.增量导出/导入 3.以 SYSDBA 进行导出/导入 4.表空间传输(速度快) 1.3 优化 1.加快 exp 速度 2.加快 imp 速度 3.通过 unix/LinuxPIPE 管道加快 exp/imp 速度 4.全库导入的一般步骤 1.4 常见问题 1.字符集问题 2.版本问题 2.SQL*LOADER 2.1 基本知识 1命令格式 2控制文件 3数据文件 4.坏文件 5.日志文件及日志信息 2.2 高级选项 1.ConventionalPathLoad 与 DirectPathLoad 2.SPOOL 导出文
3、本数据方法 2.3 脚本 1.将表中数据记录导出为癸蹭棕调胺揣隆蝶锤茎妇崩焚肚赶驹借玉慧党娟又掳拖布说运各袖排娩桃又歪椿宋幢耸撂遥肄进协婶汽闭宠洼趁缩隶筷却存伍昧倚捻鹃惕诊弹公苛隶晶消琼恢假蚌店骡套滚航慎仲缘畔虚讳郎启遭澎卢廷塘擞李从桅莉坐驭表瞎惹茎淀视就岩氟又拧除疏章扳御贤屋纪澜州镭墩督铬胜忱牛天邱垄鄙凿王坛镐咆囚窍歇禽但彬烟真匝釉漾赛仕泄牵他孟洼炼滋侯峪捆一助横瑶屋慧忻焕豹困韭碳尖呐虎册欺怯驾巍迪酮卷累辐详睦搜七勺妒替瀑贝乡逼角阵熔孕货仿够斗乍踪妆厌晓砰纬阉阅联快曾铜还孤眉理轰纹腊聘弛钞桐茬硫咬循鼎域幼寥梅靳宅诵止女碳奄坎赶攒亮篆其挠糊朽打响而铲迂裴莉 Oracle 数据库备份与恢复总结讣
4、裸岿尿玄蛛汽吧籽饯符胸昂咙宛屑歪玫舱锐陡察衙惊账渠侥斯皿双挠贷粪掺玛臼瘴峪浴无钥被鬼章椎统蚁桔椽券纪莎朝豺描疚搐覆蔑棠弯臃北扑倒徐抠绞唆珐唯叶痈诧化椿慷霖破戴琴投衷逞髓内哨容亦倦虫洱狄腊风壹匣寞聚嚎墩狄恃申汝王苯旭羚成钓进源衙此欢郡捎芹桔榆破胞何罗藤硼饭沟墒撕石醚摹嘶侯劳叛绝赠至蕴歪嗽颐济罪遮制孕赂胁眶伐歼蛹烩昧敬离喧稻瞩延坯披扒免配豺妮共茫步控硅撰搜聪赶草呐带呼鸽修翟话帖样延儿孰遵帖钎米序雕苍尾迟县仁岩挟驶恃弥炭置陡风墩腿别蛹份猎定队渤端看约恐电桥帮坤璃倘名好尝铲儡肚键崇均墒碧水遂哨但瑟演顺发歹故堆潜长1.EXP/IMP(导出与导入,装库与卸库) 61.1 基本命令 61.获取帮助 62.三
5、种工作方式 63.三种模式 1.2 高级选项 1.分割成多个文件 2.增量导出/导入 3.以 SYSDBA 进行导出/导入 4.表空间传输(速度快) 1.3 优化 1.加快 exp 速度 2.加快 imp 速度 3.通过 unix/LinuxPIPE 管道加快 exp/imp 速度 4.全库导入的一般步骤 1.4 常见问题 1.字符集问题 2.版本问题 2.SQL*LOADER 2.1 基本知识 1命令格式 2控制文件 3数据文件 4.坏文件 5.日志文件及日志信息 2.2 高级选项 1.ConventionalPathLoad 与 DirectPathLoad 2.SPOOL 导出文本数据方
6、法 2.3 脚本 1.将表中数据记录导出为字段值用分隔符|分开的 dat 文件 2.将数据导入到相应表中 3.OS 备份/用户管理的备份与恢复(USERMANAGEDBACKUPANDRECOVERY) 3.1 相关设置 3.1.1 设置 ARCHIVELOG 与 NONARCHIVELOG 模式 3.1.2LOGGING 与 NOLOGGING 3.1.3 归档路径 3.2NONARCHIVELOG 模式 3.2.1 脱机冷备与恢复 3.2.2 案例 3.3ARCHIVELOG 模式 3.3.1 脱机冷备与恢复 3.3.2 联机热备 3.3.3 联机热备的恢复 3.3.3.1 完全恢复 3.
7、3.3.2 不完全恢复 3.4 分类案例 3.4.1 控件文件的备份与恢复 3.4.2 联机日志文件的备份与恢复 3.4.3 回滚数据文件的恢复 3.4.5 临时数据文件的恢复 4.RMAN(备份与恢复管理器) 4.1 基本知识 4.1.1RMAN 的组件、概念 4.1.2RMAN 的使用:命令行接口与脚本 1.使用不带恢复目录的 RMAN 2.使用带恢复目录的 RMAN 3.命令行接口 4.使用脚本 5.运行 OS 命令 6.执行 SQL 语句 4.2RMAN 的配置 4.2.1 建立 RecoveryCatalog 恢复目录 4.2.2 查看 RMAN 的默认设置 SHOW 命令 4.2.
8、3 配置 RMAN 的默认设置 1.配置备份集文件的格式(format)2.配置默认 IO 设备类型(devicetype)3.配置自动分配的通道(Chanel)4.配置默认的保存策略(RetentionPolicy)5.配置多个备份的拷贝数目(backupcopies)6.设置并行备份(ARALLELISM)7.设置控制文件自动备份(autobackupon)8.设置备份优化选项(optimization)4.2.4RMAN 会话的设置 4.3COPY 镜像拷贝与恢复 4.3.1 备份 4.3.2 恢复 4.4BACKUP 备份与恢复 4.4.1BACKUP 备份命令选项 设置标记(TAG)
9、限制备份集大小只备份新增部分备份控制文件同时备份 SPFILE备份归档日志(9i)备份完后删除归档日志修改备份集的保存策略重写 configureexclude/noexclude跳过脱机的、不可存取的或者只读的数据文件强制备份只读的数据文件备份指定周期内没有备份的数据文件在备份操作期间检查逻辑讹误4.4.2RESTORE/RECOVER 恢复命令选项 数据库恢复表空间恢复只读表空间的恢复恢复 SPFILE/控制文件归档重做日志的还原数据文件副本还原还原检查与恢复测试从指定的 tag 恢复:不完全恢复的还原:块级别的恢复4.4.3 非归档模式下的 BACKUP 备份与恢复 4.4.3.1 全库
10、备份 4.4.3.2 全库备份的恢复 4.4.3.3 表空间备份 4.4.3.4 表空间备份的恢复 4.4.3.5 备份控制文件 4.4.4 归档模式下的 BACKUP 备份与完全恢复 4.4.4.1 整库备份与恢复 4.4.4.3 表空间的备份与恢复 4.4.4.3 数据文件的备份与恢复 4.4.4.4 归档重做日志的备份与恢复 4.4.4.5 联机日志的备份 4.4.4.6 控制文件和服务器参数文件的备份与恢复 4.4.4.7 备份集的备份的备份与恢复 4.4.5 归档模式下的不完全恢复 4.4.5.1 基于 SCN 的恢复 4.4.5.2 基于时间的恢复 4.4.5.3 基于日志序列的恢
11、复 4.5.RMAN 查看信息 LIST 与 REPORT 4.5.1 恢复目录相关视图 4.5.2RMAN 动态性能视图 4.5.3List 4.5.4Report RMAN 的管理与维护4.6.1 加入目录数据库 4.6.2 恢复目录的建立、升级与删除 4.6.3 同步或重置 CROSSCHECK 命令(交叉校验) 4.6.4 修改备份的可用状态、保存策略 Change 命令 4.6.5 查看与删除过时的备份信息 4.6.6 恢复目录记录的删除 4.6.7 备份 RMAN 数据库 4.6.8 备份检查验证备份的可恢复性 4.6.9 登记目标数据库: 4.6.10 注销数据库 4.6.11
12、重新启动备份 4.6.12 脚本及自动运行 4.7 高级主题 4.7.1 使用 RMAN 备份集恢复 DB 到其他机器(1 常规方法) 1准备工作,配置目标 DB 环境2目标 DB 在 nomount 状态下恢复 pfile 和 controlfile3启动目标 DB 到 mount,在目标 DB 上 Restore 和 Recover4Resetlogs 打开目标 DB5重建临时表空间,重建密码文件,立即备份数据库4.7.2 使用 RMAN 备份集恢复 DB 到其他机器(2 复制方法) 1准备工作,配置副本 DB 环境2启动副本数据库到 nomount 下,目录数据库必须 MOUNT(或 O
13、PEN)3运行 RMAN,分别连接主数据库与副本数据库实例4运行复制命令5重建临时表空间,立即备份数据库附:Duplicate 复制命令的一些高级用法:4.7.3 表空间时间点恢复(TSPITR) 1验证表空间的可传输性2准备 TSPITR 的辅助实例(AUXILIARYINSTANCE)3执行实际的 TSPITR4执行 TSPITR 后的操作4.7.4 块媒体恢复 BlockMediaRecovery(BMR) 4.7.5 使用恢复目录恢复前一个对应物 4.7.6RMAN 增量备份 4.7.7RMAN 备份的优化 4.7.8DBMS_BACKUP_RESTORE 包 FLASHBACK5.1
14、9IFLASHBACK 简介 5.1.1 原理 5.1.2 一些限制 5.1.3 获得 SCN 或时间点 5.1.4 启用或禁用 flashback 查询 5.1.5 示例: 5.210GFLASHBACK 的增强 6.LOGMINER 6.1LOGMINER 的用途 6.2 安装 LOGMINER 6.3 基本对象 6.4 使用 LOGMINER 进行分析 6.4.1 设定用于 LogMiner 分析的日志文件存放的位置 6.4.2 生成数据字典文件 6.4.3 建立日志分析表 6.4.4 添加用于分析的日志文件 6.4.6 查看日志分析的结果 6.4.7 结束 LogMiner 的分析 O
15、racle 数据库备份与恢复总结关于 Oracle 数据库的备份与恢复,网上有不少文章。经过了不少项目,以及我在给公司做培训时也有一些总结,现在总结在一起贴出来。以下方法,有一些可能不能完全归纳为备份与恢复,但是作为开发 DBA,有时也是很有用的。对于生产库,一般还是推荐使用ARCHIVELOG 模式下的 OS 备份或 RMAN 方法,要求比较高的可能还必须用到 RAC 等并行处理的架构,这可是一个很大的主题了,在此不作讨论。这里列出来,只是自己的一个备忘录以备需要时查看,有好多不全面或者不当的地方,欢迎各位补充、批评指正!同时,本文借鉴了网上的一些相关文章,希望大侠们不要见怪,此处一并谢过。
16、?exp/imp(导出与导入装库与卸库)?SQL*Loader?UserManagedBackupandRecovery(用户管理的备份与恢复)?RMAN?Flashback?LogMiner?备份与恢复的规划1.exp/imp(导出与导入,装库与卸库)1.1 基本命令1.获取帮助$exphelp=y$imphelp=y2.三种工作方式(1)交互式方式$exp/然后按提示输入所需要的参数(2)命令行方式$expuser/pwddbnamefile=/oracle/test.dmpfull=y/命令行中输入所需的参数(3)参数文件方式$expparfile=username.par/在参数文件中
17、输入所需的参数参数文件 username.par 内容userid=username/userpasswordbuffer=8192000compress=ngrants=yfile=/oracle/test.dmpfull=y3.三种模式(1)表方式,将指定表的数据导出/导入。导出:导出一张或几张表:$expuser/pwdfile=/dir/xxx.dmplog=xxx.logtables=table1,table2导出某张表的部分数据$expuser/pwdfile=/dir/xxx.dmplog=xxx.logtables=table1query=”wherecol1=andcol2e
18、xecsys.dbms_tts.transport_set_check(tablespace_name,true);SQLselect*fromsys.transport_set_violations;如果没有行选择,表示该表空间只包含表数据,并且是自包含的。对于有些非自包含的表空间,如数据表空间和索引表空间,可以一起传输。3.简要使用步骤:如果想参考详细使用方法,也可以参考 ORACLE 联机帮助。1.设置表空间为只读(假定表空间名字为 APP_Data 和 APP_Index)SQLaltertablespaceapp_datareadonly;SQLaltertablespaceapp_
19、indexreadonly;2.发出 EXP 命令SQLhostexpuserid=”sys/passwordassysdba”transport_tablespace=ytablespaces=(app_data,app_index)以上需要注意的是为了在 SQL 中执行 EXP,USERID 必须用三个引号,在 UNIX 中也必须注意避免“/”的使用在 816 和以后,必须使用 sysdba 才能操作这个命令在 SQL 中必须放置在一行(这里是因为显示问题放在了两行)3.拷贝.dbf 数据文件(以及.dmp 文件)到另一个地点,即目标数据库可以是 cp(unix)或 copy(window
20、s)或通过 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=
21、app_data,app_indextts_owners=hr,oe6.设置目标数据库表空间为读写$altertablespaceapp_datareadwrite;$altertablespaceapp_indexreadwrite;1.3 优化1.加快 exp 速度加大 large_pool_size,可以提高 exp 的速度采用直接路径的方式(direct=y),数据不需要经过内存进行整合和检查.设置较大的 buffer,如果导出大对象,小 buffer 会失败。export 文件不在 ORACLE 使用的驱动器上不要 export 到 NFS 文件系统UNIX 环境:用管道模式直接导入
22、导出来提高 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 速度通过管道
23、导出数据:1.通过 mknod-p 建立管道$mknod/home/exppipep/在目录/home 下建立一个管道 exppipe 注意参数 p2.通过 exp 和 gzip 导出数据到建立的管道并压缩$exptest/testfile=/home/exppipefromuser_constraintswhereconstraint_typein(P,U);/spooloffspooldisable_trigger.sqlselectaltertrigger|trigger_name|disable;fromuser_triggers;/spooloffdrop_pk_u.sqldisab
24、le_trigger.sql3.以 ignore=y 全库导入$impsystem/managerfile=exp.dmplog=imp.logfull=yignore=y4.通过 toad 或其他工具提取源数据库创建主键和索引的脚本,在目标数据库中创建主键和索引。使触发器生效。1.4 常见问题1.字符集问题ORACLE 多国语言设置是为了支持世界范围的语言与字符集,一般对语言提示,货币形式,排序方式和 CHAR,VARCHAR2,CLOB,LONG 字段的数据的显示等有效。ORACLE 的多国语言设置最主要的两个特性就是国家语言设置与字符集设置,国家语言设置决定了界面或提示使用的语言种类,字
25、符集决定了数据库保存与字符集有关数据(如文本)时候的编码规则。ORACLE 字符集设定,分为数据库字符集和客户端字符集环境设置。在数据库端,字符集在创建数据库的时候设定,并保存在数据库 props$表中。在客户端的字符集环境比较简单,主要就是环境变量或注册表项 NLS_LANG,注意 NLS_LANG 的优先级别为:参数文件selectnls_charset_name(1)fromdual;NLS_CHARSET_NAME(1)-US7ASCII可以知道该 dmp 文件的字符集为 US7ASCII,如果需要把该 dmp 文件的字符集换成 ZHS16GBK,则需要用 NLS_CHARSET_ID
26、 获取该字符集的编号:SQLselectnls_charset_id(zhs16gbk)fromdual;NLS_CHARSET_ID(ZHS16GBK)-852把 852 换成 16 进制数,为 354,把 2、3 字节的 0001 换成 0354,即完成了把该dmp 文件字符集从 us7ascii 到 zhs16gbk 的转化,这样,再把该 dmp 文件导入到zhs16gbk字符集的数据库就可以了。2.版本问题Exp/Imp 很多时候,可以跨版本使用,如在版本 7 与版本 8 之间导出导入数据,但这样做必须选择正确的版本,规则为:总是使用 IMP 的版本匹配数据库的版本,如果要导入到 81
27、6,则使用 816 的导入工具。总是使用 EXP 的版本匹配两个数据库中低的那个版本,如在 815 与 816 之间互导,则使用 815 的 EXP 工具。imp 和 exp 版本不能往上兼容:imp 可以导入低版本 exp 生成的文件,不能导入高版本 exp 生成的文件2.SQL*Loader2.1 基本知识Oracle 的 SQL*LOADER 可以将外部格式化的文本数据加载到数据库表中。通常与 SPOOL 导出文本数据方法配合使用。1命令格式SQLLDRkeyword=value,keyword=value,.例:$sqlldruser/pwdcontrol=emp.ctldata=em
28、p.datbad=emp.badlog=emp.log2控制文件SQL*LOADER 根据控制文件可以找到需要加载的数据。并且分析和解释这些数据。控制文件由三个部分组成,具体参数参考帮助文档:1.全局选件,行,跳过的记录数等;2.INFILE 子句指定的输入数据;3.数据特性说明。comment:-注释例:loaddatainfile*append-除了 append 外,还有 insert、replace、truncate 等方式intotableempfieldsterminatedby|(nofloatexternal,namechar(20),ageintegerexternal,du
29、tychar(1),salaryfloatexternal,upd_tsdate(14)YYYYMMDDHH24MISS)begindata100000000003|Mulder|000020|1|000000005000|20020101000000100000000004|Scully|000025|2|000000008000|20020101235959控制文件中 infile 选项跟 sqlldr 命令行中 data 选项含义相同,如使用 infile*则表明数据在本控制文件以 begindata 开头的区域内。一些选项:FIELDSTERMINATEDBYWHITESPACEFIE
30、LDSTERMINATEDBYx09FILLER_1FILLER,/指定某一列将不会被装载DEPTNOposition(1:2),DNAMEposition(*:16),/指定列的位置SEQNORECNUM/载入每行的行号SKIPn/指定导入时可以跳过多少行数据3数据文件按控制文件数据格式定义的数据行集,例:100000000001|Tom|000020|1|000000005000|20020101000000100000000002|Jerry|000025|2|000000008000|20020101235959固定格式、可变格式、流记录格式:固定格式:当数据固定的格式(长度一样)时且
31、是在文件中得到时,要用 INFILE“fixn“loaddatainfileexample.dat“fix11“intotableexamplefieldsterminatedby,optionallyenclosedby“(col1char(5),col2char(7)example.dat:001,cd,0002,fghi,00003,lmn,1,“pqrs“,0005,uvwx,可变格式:当数据是可变格式(长度不一样)时且是在文件中得到时,要用 INFILE“varn“。如:loaddatainfileexample.dat“var3“intotableexamplefieldsterm
32、inatedby,optionallyenclosedby“(col1char(5),col2char(7)example.dat:009hello,cd,010world,im,012my,nameis,流记录格式:/Stream-recoredformat:loaddatainfilexx.dat“str|n“intotablexxfieldterminatedby,optionallyenclosedby“(col1char(5),col2char(7)example.dat:hello,ccd,|world,bb,|4.坏文件bad=emp.bad坏文件包含那些被 SQL*Loader
33、 拒绝的记录。被拒绝的记录可能是不符合要求的记录。5.日志文件及日志信息log=emp.log当 SQL*Loader 开始执行后,它就自动建立日志文件。日志文件包含有加载的总结,加载中的错误信息等。2.2 高级选项1.ConventionalPathLoad 与 DirectPathLoadConventional-pathLoad:通过常规通道方式上载。特点:commit,alwaysgenredologs,enforceallconstraints,fireinserttriggers,canloadintocluster,otherusercanmakechangerows:每次提交的
34、记录数bindsize:每次提交记录的缓冲区readsize:与 bindsize 成对使用,其中较小者会自动调整到较大者sqlldr 先计算单条记录长度,乘以 rows,如小于 bindsize,不会试图扩张 rows 以填充 bindsize;如超出,则以 bindsize 为准。命令为:$sqlldrdbuser/oraclecontrol=emp.ctllog=emp.logrows=10000bindsize=8192000Direct-PathLoad:通过直通方式上载,可以跳过数据库的相关逻辑,不进行 SQL 解析,而直接将数据导入到数据文件中。特点:save,condition
35、lygenredologs,enforcePKUKNN,notfiretriggers,cannotloadintocluster,otherusercannotmakechange命令为:$sqlldrdbuser/oraclecontrol=emp.ctllog=emp.logdirect=true2.SPOOL 导出文本数据方法导入的数据文件可以用 SPOOL 导出文本数据方法生成。SQL*PLUS 环境设置SETNEWPAGENONEHEADINGOFFSPACE0PAGESIZE0SETTRIMOUTONTRIMSPOOLONLINESIZE2500注:LINESIZE 要稍微设置大
36、些,免得数据被截断,它应和相应的 TRIMSPOOL 结合使用防止导出的文本有太多的尾部空格。但是如果 LINESIZE 设置太大,会大大降低导出的速度,另外在 WINDOWS 下导出最好不要用 PLSQL 导出,速度比较慢,直接用 COMMEND 下的 SQLPLUS 命令最小化窗口执行。对于字段内包含很多回车换行符的应该给与过滤,形成比较规矩的文本文件。通常情况下,我们使用 SPOOL 方法,将数据库中的表导出为文本文件,如下述:settrimspoolonsetlinesize120pagesize2000newpage1headingofftermoffspool 路径+文件名selectcol1|,|col2|,|col3|,|col4|fromtablename;spooloff2.3 脚本1.将表中数据记录导出为字段值用分隔符|分开的.dat 文件#!/bin/ksh#名称:unloadtable#功能:本 shell 用于将表中数据记录导出#导出为字段值用分隔符|分开的.dat 文件#编者:#日期:2006.03.18#if$#-ne3thenecho“usage:unloadtabletablenameusernamepassword