del文件怎么db2 导入del到Oracle中

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(1602)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_084066',
blogTitle:'python将DBF文件数据导入到Oracle数据库',
blogAbstract:'因需要将农保数据从Foxpro迁移到Oracle中,找了一些工具,包括sqlplus
developer,来导入数据,要么就速度慢,要么就老出错,感觉极不爽。最后想了下,还是自己用刚学了一点皮毛的python来写个程序,编写和调试 花了几个小时,导入几张表几百万条数据只花了半个小时,比那些工具要爽多了。处理的一些问题:1、Foxpro表有个字段名为Number,是Oracle的关键字,不能使用,只好改名为Number1。2、批量Insert时,有些表会提示“excepting string,unicode or buffer object”,但逐条记录导入提交则没有问题。&&&& 只好在批量导入出错时,跳转到逐条记录导入。运行:python this.py 表名。需要dbfpy和cx_Oracle支持,网上都可以找到。',
blogTag:'python',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:3,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}博客分类:
control=result.ctl
log=resulthis.out rows=10000
bindsize=8192000
获取帮助 $ exp help=y$ imp help=y 2.
三种工作方式 (1)交互式方式$ exp
然后按提示输入所需要的参数(2)命令行方式$ exp
file=/oracle/test.dmp full=y
命令行中输入所需的参数 (3)参数文件方式$ exp parfile=username.par
在参数文件中输入所需的参数参数文件 username.par 内容 userid=username/userpassword buffer=8192000compress=n grants=yfile=/oracle/test.dmp full=y 3.
三种模式 (1)表方式,将指定表的数据导出/导入。导出:导出一张或几张表:$ exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1,table2导出某张表的部分数据$ exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1 query=\”where col1=\’…\’and col2 \&…\”导入:导入一张或几张表$
file=/dir/xxx.dmp
log=xxx.log
tables=table1,table2
fromuser=dbuser touser=dbuser2 commit=y ignore=y (2)用户方式,将指定用户的所有对象及数据导出/导入。导出:$ exp user/pwd file=/dir/xxx.dmp log=xxx.log owner=(xx, yy)只导出数据对象,不导出数据
(rows=n )$ exp user/pwd file=/dir/xxx.dmp log=xxx.log owner=user rows=n导入:$
file=/dir/xxx.dmp
log=xxx.log
fromuser=dbuser
touser=dbuser2commit=y ignore=y(3)全库方式,将数据库中的所有对象导出/导入导出:$ exp user/pwd file=/dir/xxx.dmp log=xxx.log full=ycommit=y ignore=y导入:$ imp user/pwd file=/dir/xxx.dmp log=xxx.log fromuser=dbuser touser=dbuser2
分割成多个文件 以多个固定大小文件方式导出:这种做法通常用在表数据量较大,单个 dump文件可能会超出文件系统的限制的情况$ exp user/pwd file=1.dmp,2.dmp,3.dmp,…filesize=1000m
log=xxx.log full=y以多个固定大小文件方式导入$
user/pwd file=1.dmp,2.dmp,3.dmp,…
filesize=1000m tables=xxx
fromuser=dbuser touser=dbuser2
commit=y ignore=y 2.
增量导出/导入 // oracle 9i
inctype必须为
才可执行增量导出导入增量导出:
包括三个类型:(1)“完全”增量导出(Complete)
备份整个数据库$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=complete(2)“增量型”增量导出
导出上一次备份后改变的数据。$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=incremental(3)
“累计型”增量导出(Cumulative)只导出自上次“完全”导出之后数据库中变化 了的信息。$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=cumulative增量导入:$ imp usr/pwd FULL=y inctype=system/restore/inct ype其中:SYSTEM:
导入系统对象RESTORE:
导入所有用户对象
以SYSDBA进行导出/导入
用于 Oracle 技术支持2.
用于表空间传输例:$
\'usr/pwd@instance
tablespaces=xx
transport_tablespace=y file=xxx.dmp datafiles=xxx.dbf$
file=expdat.dmp
userid=”””sys/password
sysdba”””
transport_tablespace=y“datafile=(c:tempapp_data,c:tempapp_index)” 4.
表空间传输
(速度快) 表空间传输是
新增加的一种快速在数据库间移动数据的一种办法,是把一个数 据库上的格式数据文件附加到另外一个数据库中,而不是把数据导出成
文件,这 在有些时候是非常管用的,因为传输表空间移动数据就象复制文件一样快。1.关于传输表空间有一些规则
(10g前):?
源数据库和目标数据库必须运行在相同的硬件平台上。 ?
源数据库与目标数据库必须使用相同的字符集。?
源数据库与目标数据库一定要有相同大小的数据块?
目标数据库不能有与迁移表空间同名的表空间?
SYS 的对象不能迁移?
必须传输自包含的对象集?
有一些对象,如物化视图,基于函数的索引等不能被传输(同字节序文件的跨平台可以用更换数据文件的文件头的方法)(10g
支持跨平台的表空间传输,只要操作系统字节顺序相同,就可以进行表空间 传输。需要使用 RMAN转换文件格式,略)2.
检测一个表空间是否符合传输标准的方法:SQL & exec sys.dbms_tts.transport_set_check(‘tablespace_name’,true); SQL & select * from sys.transport_set_如果没有行选择,表示该表空间只包含表数据,并且是自包含的。对于有些非自包含的表空间,如数据表空间和索引表空间,可以一起传输。 3. 简要使用步骤:如果想参考详细使用方法,也可以参考 ORACLE联机帮助。1.设置表空间为只读(假定表空间名字为 APP_Data
和 APP_Index)SQL & alter tablespace app_ SQL & alter tablespace app_2.发出 EXP命令SQL& host exp userid=”””sys/password as sysdba””” transport_tablespace=y tablespaces=(app_data, app_index)以上需要注意的是·为了在 SQL 中执行 EXP,USERID 必须用三个引号,在 UNIX中也必须注意 避免“/”的使用·在 816和以后,必须使用 sysdba才能操作·这个命令在 SQL中必须放置在一行(这里是因为显示问题放在了两行)3.拷贝.dbf数据文件(以及.dmp文件)到另一个地点,即目标数据库可以是 cp(unix)或 cop y(windows)或通过 ftp传输文件(一定要在 bin方式)4.把本地的表空间设置为读写$ alter tablespace app_$ alter tablespace app_5.在目标数据库附加该数据文件
(直接指定数据文件名)(表空间不能存在,必须建立相应用户名或者用 fromuser/touser)$ imp file=expdat.dmp userid=”””sys/password as sysdba””” transport_tablespace=y
datafiles=(“c:\app_data.dbf,c:\app_index.dbf”) tablespaces=app_data,app_index tts_owners=hr,oe6.设置目标数据库表空间为读写$ alter tablespace app_$ alter tablespace app_
加快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:ALTER DATABASE NOARCHIVELOG; 建立大的表空间和回滚段,OFFLINE其他回滚段,回滚段的大小为最大表的 1/2 使用
COMMIT=N使用 ANALYZE=N单用户模式导入UNIX环境:用管道模式直接导入导出来提高 imp/exp的性能 3.
通过unix/Linux PIPE管道加快exp/imp速度 通过管道导出数据:1.通过 mknod -p 建立管道$ mknod /home/exppipe p
在目录/home下建立一个管道 exppipe注意参数 p2.通过 exp和 gzip导出数据到建立的管道并压缩$ exp test/test file=/home/exppipe & gzip & /home/exppipe & exp.dmp.gz$ exp test/test tables=bitmap file=/home/newsys/test.pipe &gzip & /home/newsys/test.pipe & bitmap.dmp.gz3.导出成功完成之后删除建立的管道$ rm
/home/exppipe 导出脚本:###UNIX下 ORACLE数据库通过 PIPE管道进行备份###### using "export" and "tar" command to bakup oracle datebase ####### trap "" 1 #nohupLOGFILE=/opt/bakup/log/bakup_ora.log export LOGFILEDUMPDIR=/archlog_node1export DUMPDIRexec &$LOGFILE 2&&1
echoecho ' Begin at ' `date`echo
clear old result filecd $DUMPDIRif [ -f exp.dmp.Z ]thenecho "clear old result file"rm exp.dmp.Zfi
make pipemkfifo exp.pipechmod a+rw exp.pipe
gain the dmp.Z filecompress & exp.pipe & exp.dmp.Z &su -u oracle -c "exp userid=ll/ll file=$DUMPDIR/exp.pipe full=y buffer="
echoecho '
exp end at '`date`echo
rm piperm exp.pipe
tar the dmp.Z file to tapemt -f /dev/rmt/0 rewtar cvf /dev/rmt/0 exp.dmp.Z
echoecho '
tar end at '`date`echo 通过管道导入生成的文件:1.通过 mknod -p 建立管道 $ mknod /home/exppipe p2.导入生成的压缩文件$ imp test/test file=/home/exppipe fromuser=test touser=macro &gunzip & exp.dmp.gz & /home/exppipe3.删除管道$ rm –fr /home/exppipe
全库导入的一般步骤 注意:在导出时,需要通过toad或其他工具提取源数据库创建主键和索引的脚本1.
先全库加 rows=n 把结构导进去$ imp system/manager file=exp.dmp log=imp.log full=y rows=n indexes=n2.
使业务用户的触发器失效/删除主键和唯一索引spool drop_pk_u.sqlselect 'alter table '||table_name||' drop constraint '||constraint_name||';'from user_constraintswhere constraint_type in ('P','U');/spool offspool disable_trigger.sqlselect 'alter trigger '||trigger_name||''from user_/spool off
@drop_pk_u.sql@disable_trigger.sql
以 ignore=y全库导入$ imp system/manager file=exp.dmp log=imp.log full=y ignore=y4.
通过 toad或其他工具提取源数据库创建主键和索引的脚本,在目标数据库中创建主键和索引。使触发器生效。 1.4
字符集问题 ORACLE
多国语言设置是为了支持世界范围的语言与字符集,一般对语言提示, 货币形式,排序方式和
CHAR,VARCHAR2,C LOB,LONG
字段的数据的显示等有效。 ORACLE
的多国语言设置最主要的两个特性就是国家语言设置与字符集设置,国家语 言设置决定了界面或提示使用的语言种类,字符集决定了数据库保存与字符集有关数据(如文本)时候的编码规则。ORACLE 字符集设定,分为数据库字符集和客户端字符集环境设置。在数据库端, 字符集在创建数据库的时候设定,并保存在数据库 props$表中。在客户端的字符集环境比较简单,主要就是环境变量或注册表项
NLS_ LANG,注 意 NLS_LANG的优先级别为:参数文件&注册表&环境变量&alter
session。如果客户端 字符集和服务器端字符集不一样,而且字符集的转换也不兼容,那么客户端的数据显示 与导出/导入的与字符集有关的数据将都是乱码。使用一点点技巧,就可以使导出/导入在不同的字符集的数据库上转换数据。这里需要一个 2进制文件编辑工具即可,如 uedit32。用编辑方式打开导出的 dmp文件,获取
字节 的 内容 , 如
01 , 先 把 它 转换 为
进 制 数, 为
1 ,使用 函 数NLS_CHARSET_NAME 即可获得该字符集: SQL& select nls_charset_name(1) NLS_CHARSET_NAME(1)------------------- US7ASCII可以知道该 dmp文件的字符集为 US7ASCII,如果需要把该 dmp文件的字符集换成 ZHS16GBK,则需要用 NLS_CHARSET_ID 获取该字符集的编号: SQL& select nls_charset_id('zhs16gbk') 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生成的文件。
2.1 基本知识
SQL* LOADER
可以将外部格式化的文本数据加载到数据库表中。通常 与 SPOOL导出文本数据方法配合使用。 1.命令格式 SQLLDR keyword=value [,keyword=value,...]例:$ sqlldr user/pwd control=emp.ctl data=emp.dat bad=emp.bad log=emp.log 2.控制文件 SQL*LOADER
根据控制文件可以找到需要加载的数据。并且分析和解释这些数据。控制文件由三个部分组成,具体参数参考帮助文档:1.
全局选件,行,跳过的记录数等;2. INFILE 子句指定的输入数据;3.
数据特性说明。comment: --注释例:load data infile *append
--除了 append外,还有 insert、replace、truncate等方式into table empfields terminated b y ‘|’(no
float external, name char(20),age
integer external,duty
char(1),salary
float external,upd_ts
date(14) ‘YYYYMMDDHH24MISS’)begindata|Mulder|||00|Scully|||59 控制文件中 infile选项跟 sqlldr 命令行中 data 选项含义相同,如使用 infile *则表明数据在本控制文件以 begin data 开头的区域内。 一些选项:FIELDS TERMINATED BY WHITESPACE FIELDS TERMINATED BY x'09'FILLER_1 FILLER, //
指定某一列将不会被装载DEPTNO position(1:2), DNAME position(*:16), //
指定列的位置SEQNO RECNUM //载入每行的行号SKIP n
指定导入时可以跳过多少行数据 3.数据文件 按控制文件数据格式定义的数据行集,例:|Tom|||00|Jerry|||59
固定格式、可变格式、流记录格式:固定格式:当数据固定的格式(长度一样)时且是在文件中得到时,要用 INFILE "fix n"load datainfile 'example.dat' "fix 11"into table examplefields terminated b y ',' optionally enclosed by '"'(col1 char(5), col2 char(7)) example.dat:001, cd, 0002,fghi,00003,lmn,1, "pqrs",0005,uvwx,可变格式:当数据是可变格式(长度不一样)时且是在文件中得到时,要用 INFILE "var n"。如:load datainfile 'example.dat' "var 3"into table examplefields terminated b y ',' optionally enclosed by '"'(col1 char(5), col2 char(7)) example.dat:009hello,cd,010world,im,012my,name is,流记录格式: // Stream-recored format:load data infile 'xx.dat' "str '|\n'" into table xx field terminated b y ',' optionally enclosed by '"'(col1 char(5), col2 char(7))
example.dat:hello, ccd,|world, bb,| 4.
bad=emp.bad坏文件包含那些被 SQL*Loader拒绝的记录。被拒绝的记录可能是不符合要求的记录。 5.
日志文件及日志信息 log=emp.log当 SQL*Loader
开始执行后,它就自动建立
日志文件。日志文件包含有加载的总 结,加载中的错误信息等。 2.2
1. Conventional Path Load
Direct Path Load Conventional-path Load:通过常规通道方式上载。特点:commit, always
gen redo logs,
enforce all constraints, fire insert triggers, can load into cluster, other user can make changerows:每次提交的记录数bindsize:每次提交记录的缓冲区readsize:与 bindsize 成对使用,其中较小者会自动调整到较大者sqlldr 先计算单条记录长度,乘以 rows,如小于 bindsize,不会试图扩张 rows以填充 bindsize;如超出,则以 bindsize 为准。 命令为:$ sqlldr dbuser/oracle control=emp.ctl log=emp.log rows=10000 bindsize=8192000Direct-Path Load:通过直通方式上载,可以跳过数据库的相关逻辑,不进行
SQL解析,而直接将数 据导入到数据文件中。特点:save, conditionly gen redo logs, enforce PK UK NN, not fire triggers, can not load into cluster, other user can not make change命令为:$ sqlldr dbuser/oracle control=emp.ctl log=emp.log direct=true 2. SPOOL导出文本数据方法 导入的数据文件可以用 SPOOL导出文本数据方法生成。SQL*PLUS环境设置SET NEWPAGE NONE HEADING OFF SPACE 0 PAGESIZE 0SET TRIMOUT ON TRIMSPOOL ON LINESIZE 2500注:LINESIZE 要稍微设置大些,免得数据被截断,它应和相应的 TRIMSPOOL结合使用防止导出的文本有太多的尾部空格。但是如果 LINESIZE 设置太大,会大大降低导出的速度,另外在 WINDOWS下导 出最好不要用 PLSQL导出,速度比较慢,直接用
COMMEND 下的 SQLPLUS命令最 小化窗口执行。对于字段内包含很多回车换行符的应该给与过滤,形成比较规矩的文本 文件。通常情况下,我们使用 SPOOL方法,将数据库中的表导出为文本文件,如下述:set trimspool onset linesize 120 pagesize 2000 newpage 1 heading off
term off spool
路径+文件名select col1||','||col2||','||col3||','||col4||'..' 2.3 脚本
将表中数据记录导出为字段值用分隔符'|'分开的.dat文件 #!/bin/ksh####################################################################
名称: unloadtable##
本 shell 用于将表中数据记录导出##
导出为字段值用分隔符'|'分开的.dat文件##
日期: ################################################################## if [ $# -ne 3 ]thenecho "usage:unloadtable tablename username password."exit 0fi ##准备工作echo "set heading off
" &/tmp/$1.colecho "set pagesize 0" &&/tmp/$1.colecho "set linesize 800
" &&/tmp/$1.colecho "set feedback off
" &&/tmp/$1.col echo "set tab off
" &&/tmp/$1.colecho
column_name||','
user_tab_columns
lower(table_name)='$1'
bycolumn_ " && /tmp/$1.col ##产生 select 语句echo "set heading off
" &/tmp/$1.selecho "set pagesize 0" &&/tmp/$1.selecho "set linesize 800
" &&/tmp/$1.selecho "set feedback off
" &&/tmp/$1.selecho "set tab off
" &&/tmp/$1.selecho "select " &&/tmp/$1.selecho
/tmp/$1.col`
"s/,/||'|'||/g"
"s/||$//g"|sed
"s/date/\"date\"/g"&&/tmp/$1.sel ##生成 dat文件#echo "from $1;\n/" &&/tmp/$1.sel
导致多执行一次 selectecho "from $1;\n" &&/tmp/$1.selsqlplus -s $2/$3 & /tmp/$1.sel &$1_tmp.dat#awk '{if(FNR!=1) print $0}' $1_tmp.dat &$1.dat
FNR 选项使得第一条记录选不出awk '{print $0}' $1_tmp.dat &$1.datrm -f $1_tmp.dat 2.
将数据导入到相应表中 #!/bin/ksh####################################################################
名称:loadtable##
功能:本 shell 用于将已经准备好的.dat数据文件导入相应的表中##
.dat 文件各个字段值用分隔符'|'分开。##
日期: ##################################################################if [ $# -ne 3 ]thenecho "usage:loadtable tablename username
password."exit 0fi ##准备工作echo "set heading off
" &/tmp/$1.colsql echo "set pagesize 0" &&/tmp/$1.colsqlecho "set linesize 800
" &&/tmp/$1.colsqlecho "set feedback off
" &&/tmp/$1.colsqlecho "set tab off
" &&/tmp/$1.colsqlecho
column_name||','
user_tab_columns
lower(table_name)='$1'
bycolumn_ " && /tmp/$1.colsql ##产生 ctl文件echo "load data" &/tmp/$1.ctlecho "infile *" &&/tmp/$1.ctlecho "into table $1" &&/tmp/$1.ctlecho "fields terminated by '|'" &&/tmp/$1.ctlecho `sqlplus -s $2/$3 & /tmp/$1.colsql` |sed "s/,$/)/g" |sed "s/^/(/g" &&/tmp/$1.ctl ##开始导入数据echo "truncate table $1;" &/tmp/$1.sqlsqlplus $2/$3 & /tmp/$1.sqlsqlldr $2/$3 data=$1.dat control=/tmp/$1.ctl log=/tmp/$1.log
用户管理的备份与恢复也称 OS物理备份,是指通过数据库命令设置数据库为备份 状态,然后用操作系统命令,拷贝需要备份或恢复的文件。这种备份与恢复需要用户的 参与手工或自动完成。
对于使用 OS拷贝备份的数据文件,可以使用 DBVERTIFY
进行检验。DBVERTIFY是一个外部工具,主要用于校验数据文件或备份的数据文件的数据块是否正确。 例:
dbv /u01/oradata/oracle/users01.dbf BLOCKSIZE=8192参数说明:关键字
(默认)FILE 要检验的文件 (NONE) START 起始块 (文件的第一个块) END 结束块 (文件的最后一个块) BLOCKSIZE 逻辑块大小 (2048) LOGFILE 输出日志 (NONE) FEEDBACK 显示进程 (0)
还可以进行测试,检测恢复的错误,错误信息记载在
alert_SID.log
文件中,通过测试,我们可以知道该恢复操作是否能正常完成。SQL& RECOVER TABLESPACE sales TEST;SQL& RECOVER DATABASE UNTIL CANCEL TEST; 3.1
相关设置 3.1.1
设置ARCHIVELOG与NONARCHIVELOG模式 重做日志组是以循环方式使用的,重做日志组会被覆盖重做日志信息就会丢失。为了保存历史以来的重做日志,数据库可以运行在日志归档模式下(archivelog mode)。 在日志归档模式下,当日志组撤换到下一个组时后台进程
将上一个日志文件复制到另一个地方(oracle 10g
使用快速恢复区会归档到该区)保存。数据库默认为非归档模式(noarchivelog mode)。设置 ARCHIVELOG模式步骤:1.
关闭数据库,备份已有的数据,改变数据库的运行方式是对数据库的重要改动,所以要对数据库做备份,对可能出现的问题作出保护。2.
修改初试化参数:
使用 PFILE,修改初始化参数文件 init[SID].ora log_archive_start=true #启动自动归档 log_archive_format=ARC%T%S.arc #归档文件格式 log_archive_dest=/arch12/arch
#归档路径 3.
启动 Instance 到 Mount状态,即加载数据库但不打开数据库:SQL &4.
发出修改命令SQL & alter SQL &设置 NONARCHIVELOG模式步骤同上,只需修改相应参数值即可。 3.1.2 LOGGING
NOLOGGING 表空间、表、索引、分区可以设置为
NOLOGGING,用于快速装入数据(Direct Load)。 在插入数据时只写入最小的重做日志和回滚数据。在归档数据库模式下,执行
Load 操作后应立即进行备份,否则不能使用之前的备份进行恢复。另外,用户可以设置数据库的 强制日志模式,使用所有操作都记入日志。LOGGING
的区别: LOGGING NOLOGGING 所有的更改写入 REDO 最小写入 REDO LOG 从最近备份中完全恢复 不能从最近备份中完全恢复 不需要增加备份 需要增加备份
的操作:CREATE TABLE … NOLOGGING AS SELECT
语句 INSERT /*+APPEND*/
INTO &表& NOLOGGING
语句INSERT /*+ PARALLEL(&表&,&n&)达式*/ INTO &表& NOLOGGING SELECT
语句SQL*LOADER
DIRECT 方法例: SQL&CREATE TABLE emp1 NOLOGGING AS SELECT * FROM SQL&SELECT name,unrecoverable_time FROM V$DATAFILE; SQL&INSERT /*+ APPEND */ INTO emp1 NOLOGGING SELECT* * FROM SQL&SELECT name,unrecoverable_time FROM V$DATAFILE; SQL&ALTER DATABASE NO FORCE LOGGING; 3.1.3
归档路径 在归档模式下进行自动归档时,或者在恢复时设置归档所在的位置,需要设置归档路径初始化参数:LOG_ARCHIVE_DEST_n=”LOCATION=path MANDATORY|OPTIONAL REOPEN=n”LOG_ARCHIVE_DEST_n=”SERVICE=standby MANDATORY|OPTIONAL REOPEN=n 3.2 NONARCHIVELOG 模式
脱机冷备与恢复 冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数 据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份
信息而言,冷 备份是最快和最安全的方法。冷备份的优点:1.是非常快速的备份方法(只需拷贝文件)2.容易归档(简单拷贝即可)3.容易恢复到某个时间点上(只需将文件再拷贝回去)4.能与归档方法相结合,作数据库“最新状态”的恢复。5.低度维护,高度安全。冷备份的不足:1.单独使用时,只能提供到“某一时间点上”的恢复。2.在实施备份的全过程中,数据库必须要作备份而不能作其它工作。也就是说,在冷备份过程中,数据库必须是关闭状态。3.若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。4.不能按表或按用户恢复。如果可能的话(主要看效率),应将信息备份到磁盘上,然后启动数据库(使用户可以 工作)并将所备份的信息拷贝到磁带上(拷贝的同时,数据库也可以工作)。冷备份中必须 拷贝的文件包括:1.所有数据文件2.所有控制文件3.所有联机 REDO LOG 文件4.参数化参数 Init.ora 文件(可选)。 3.2.2
案例 1.9i
脱机冷备/恢复的例子:(1)
关闭数据库$ sqlplus /nologSQL& connect /as sysdbaSQL&(2)
用拷贝命令备份/恢复全部的时间文件、重做日志文件、控制文件、初始化参数 文件SQL & ho 可以使用以下冷备脚本:#!/bin/bash####################################################################
coldback_gen.sh ##
本 shell 用于生成冷备份脚本, 进行冷备份同时生成相应的恢复命令##
可以修改后在生成后立即执行 ## 编者:
## 日期: .
################################################################## ##设置变量##设置临时文件名tempsql=./backup.sql##设置备份文件存放路径backdate=`date -u +%Y%m%d`backupdir=/u04/oracle/coldback/$backdate mkdir $backupdir##设置备份脚本文件名backupsh=$backupdir/coldback.shrcvrsh=$backupdir/recovery.sh echo "正在生成冷备份脚本[$backupsh]..." ##检查 ORACLE数据库是否启动oraisrun=`ps -ef|grep -c ora_`if [ "$oraisrun" = "0" ] || [ "$oraisrun" = "1" ]thenecho "ORACLE 数据库尚未启动,请先启动 ORACLE"echo ""exitfi ##准备工作echo "set heading off
" & $tempsqlecho "set feedback off
" &&$tempsqlecho "set tab off
" &&$tempsqlecho "set verify off
" &&$tempsqlecho "set pagesize 0"
&&$tempsqlecho "set linesize 800
" &&$tempsqlecho "select '#!/bin/bash'"
&& $tempsqlecho "select ''
&& $tempsqlecho
备份脚本生成时间:
+%Y 年%m月%d日-%H:%M:%S`
"'" && $tempsqlecho "select '##
备份目的路径: $backupdir' "
&& $tempsqlecho "select '' " && $tempsql echo ""echo "select 'echo ''开始进行脱机冷备...''' "
&& $tempsqlecho "select 'echo ''备份目的路径: $backupdir ''' "
&& $tempsql ##这里不直接关闭数据库,提示用户手工关闭为好
如果需要直接关闭,请修改echo "select 'orarun='||'\`'||'ps -ef|grep -c ora_'||'\`'" &&$tempsqlecho "select 'if [ "\$orarun" != "0" ] && [ "\$orarun" != "1" ]
'" &&$tempsqlecho "select 'then' " &&$tempsqlecho "select 'echo '' '' '" &&$tempsqlecho "select 'echo ''ORACLE 数据库已启动,请先关闭 ORACLE 数据库'' '" &&$tempsqlecho "select 'echo '' '' '" &&$tempsqlecho "select 'exit' "
&&$tempsqlecho "select 'fi' "
&&$tempsql echo "select 'echo '' '' ' "
&& $tempsqlecho "select 'echo ''正在备份控制文件...''' "
&& $tempsqlecho "select 'cp ' ||name||' $backupdir' from v\$ "
&& $tempsqlecho "select 'echo ''控制文件备份完毕!''' "
&& $tempsqlecho "select 'echo '' '' ' "
&& $tempsqlecho "select 'echo ''正在备份数据文件...''' "
&& $tempsqlecho "select 'cp ' ||name||' $backupdir' from v\$
&& $tempsqlecho "select 'echo ''数据文件备份完毕!''' "
&& $tempsqlecho "select 'echo ''正在备份联机日志...''' "
&& $tempsqlecho "select 'echo '' '' ' "
&& $tempsqlecho "select 'cp '||member||' $backupdir' from v\$
&& $tempsqlecho "select 'echo ''联机日志备份完毕!'''"
&& $tempsqlecho "select 'echo '' '' ' " && $tempsqlecho "select 'echo ''脱机冷备完毕!'''"
&& $tempsqlecho "select 'echo '' '' ' " && $tempsqlecho "select 'echo '' '' ' " && $tempsql ##生成冷备份执行脚本sqlplus -s ' / as sysdba' & $tempsql & $backupshrm -f $tempsqlchmod +x $backupshcp $backupsh . echo "正在生成冷备对应的恢复脚本[$rcvrsh]..." ##准备工作echo "set heading off
" & $tempsqlecho "set feedback off
" &&$tempsqlecho "set tab off
" &&$tempsqlecho "set verify off
" &&$tempsqlecho "set pagesize 0"
&&$tempsqlecho "set linesize 800
" &&$tempsqlecho "select '#!/bin/bash'"
&& $tempsqlecho "select ''
&& $tempsqlecho
恢复脚本生成时间:
+%Y 年%m月%d日-%H:%M:%S`
"'" && $tempsqlecho "select '##
恢复文件所在路径: $backupdir' "
&& $tempsqlecho "select '' " && $tempsqlecho ""echo "select 'echo ''开始进行文件的复制恢复...''' "
&& $tempsqlecho "select 'echo ''恢复文件所在的路径: $backupdir ''' "
&& $tempsql ##这里不直接关闭数据库,提示用户手工关闭为好
如果需要直接关闭,请修改echo "select 'orarun='||'\`'||'ps -ef|grep -c ora_'||'\`'" &&$tempsqlecho "select 'if [ "\$orarun" != "0" ] && [ "\$orarun" != "1" ]
'" &&$tempsqlecho "select 'then' " &&$tempsqlecho "select 'echo '' '' '" &&$tempsqlecho "select 'echo ''ORACLE 数据库已启动,请先关闭 ORACLE 数据库'' '" &&$tempsqlecho "select 'echo '' '' '" &&$tempsqlecho "select 'exit' "
&&$tempsqlecho "select 'fi' "
&&$tempsql echo "select 'echo '' '' ' "
&& $tempsqlecho "select 'echo ''正在恢复控制文件...''' "
&& $tempsqlecho
'||'$backupdir'||'/'||substr(name,instr(name,'/',-1)+1,length(name)-instr(name,'/',-1) )||' '||name from v\$ "
&& $tempsqlecho "select 'echo ''控制文件恢复完毕!''' "
&& $tempsqlecho "select 'echo '' '' ' "
&& $tempsqlecho "select 'echo ''正在恢复数据文件...''' "
&& $tempsqlecho
'||'$backupdir'||'/'||substr(name,instr(name,'/',-1)+1,length(name)-instr(name,'/',-1) )||' '||name from v\$
&& $tempsqlecho "select 'echo ''数据文件恢复完毕!''' "
&& $tempsqlecho "select 'echo ''正在恢复联机日志...''' "
&& $tempsqlecho "select 'echo '' '' ' "
&& $tempsqlecho
'||'$backupdir'||'/'||substr(member,instr(member,'/',-1)+1,length(member)-instr(member,'/',-1) )||' '||member from v\$
&& $tempsql echo "select 'echo ''联机日志恢复完毕!'''"
&& $tempsqlecho "select 'echo '' '' ' " && $tempsqlecho "select 'echo ''脱机冷备恢复完毕!'''"
&& $tempsqlecho "select 'echo '' '' ' " && $tempsqlecho "select 'echo '' '' ' " && $tempsql ##生成冷备恢复的执行脚本sqlplus -s ' / as sysdba' & $tempsql & $rcvrsh rm -f $tempsqlchmod +x $rcvrshcp $rcvrsh . echo "生成脱机冷备备份与恢复脚本完毕!"echo "请检查脚本文件: [$backupsh]"echo "
[$rcvrsh]"echo "" #如果需要生成后立即执行备份,可增加关闭数据库的操作,然后将以一几行的注释#去掉即可#./$backupsh#echo "备份执行完毕,请检查!"#echo "" (3)
重启 Oracle 数据库$ sqlplus /nologSQL& connect /as sysdbaSQL& startup 2.如果自从上次脱机冷备后,数据文件错误,联机日志没有被覆盖,可模拟不完全恢复。1. SQL&2. $ cp .. ..;
只恢复出错的数据文件3. SQL&4. SQL&5. SQL&
3.3 ARCHIVELOG 模式
脱机冷备与恢复 同 NONARCHIVELOG模式 3.3.2
联机热备 联机热备是在数据库运行的情况下进行备份的方法。热备份要求数据库在 Archivelog方式下操作,并需要大量的档案空间。热备份的优点:1.可在表空间或数据文件级备份,备份时间短。2.备份时数据库仍可使用,支持 24*7不间断运行。3.可达到秒级恢复(恢复到某一时间点上)。4.可对几乎所有数据库实体作恢复。5.恢复是快速的,在大多数情况下在数据库仍工作时恢复。热备份的不足是:1.不能出错,否则后果严重。2.若热备份不成功,所得结果不可用于时间点的恢复。3.因难于维护,所以要特别仔细小心,不允许“以失败而告终”。注意:在热备过程中系统会生成更多的重做日志和回滚数据。所以必须在数据库较空闲时才进行备份。备份内容:(1)
一个表空间一个表空间地备份 sql& alter tablespac sql& $copy '/xx/xx.dbf ''/yy/yy.dbf' ; sql& alter tablesp sql& alt(只读表空间直接拷贝,不用begin backup)(2)
备份归档 log文件(1)临时停止归档进程
log_archive_max_processes=0(2)log下那些在 archive redo log 目标目录中的文件(3)重新启动 archive 进程(4)备份归档的 redo log
备份联机的控制文件:sql& alter database backup controlfile to '/xx/xx.ctl';(4)
备份初始化文件
等:sql& $copy
.. .. ; 热备脚本:hotback.sql Rem
热备份脚本 for LinuxRem
执行该脚本必须保证数据库处于归档模式Rem
设置 SQL*Plus环境参数Rem set feedback offset pagesize 0set heading offset verify offset linesize 100set trimspool on Rem
设置备份相关的路径
For LinuxRem
设置数据文件备份路径define datafile_dir
= '/u05/oracle/hotback/datafile'Rem
设置归档日志文件备份路径define archlog_dir = '/u05/oracle/hotback/archlog'Rem
设置控制文件备份路径define controlfile_dir = '/u05/oracle/hotback/controlfile' Rem
设置生成的备份脚本名define hotback
= '/u05/oracle/hotback/open_hot_backup.sql'define spoolfile = '/u05/oracle/hotback/spool.tmp'define cpy = 'cp'prompt *** Spooling to &hotback Rem
产生备份数据文件、归档日志文件的命令 set serveroutput on size 1000000spool &hotbackprompt spool &spoolfile pro;prompt alter s;prompt alter sy; DECLARECURSOR cur_tablespace ISSELECT tablespace_nameFROM dba_tablespacesORDER BY tablespace_ CURSOR cur_datafile (tn VARCHAR) IS SELECT file_nameFROM dba_data_filesWHERE tablespace_name = tnORDER BY file_ CURSOR cur_arch_dest ISSELECT valueFROM v$parameterWHERE
name = 'log_archive_dest';BEGINFOR ct IN cur_tablespace LOOPIF ct.tablespace_name!='TEMP' thendbms_output.put_line ('alter tablespace '||ct.tablespace_name||'');FOR cd IN cur_datafile (ct.tablespace_name) LOOPdbms_output.put_line ('host &cp y '||cd.file_name||' &datafile_dir');END LOOP;dbms_output.put_line ('alter tablespace '||ct.tablespace_name||'');END LOOP; FOR dest IN cur_arch_dest LOOPdbms_output.put_line ('host &cpy '|| dest.value || '/* &archlog_dir ');END LOOP; END;/Rem
产生备份控制文件的命令 prompt alter system;prompt alter database backup ;prompt alter database backup controlfile to '&controlfile_dir/control.bak' REUSE;;pro;prompt prompt ***Hot Backup Finish***;prompt spool offhost rm -f &spoolfileRem
执行生成的脚本文件Rem @&hotbackRem host del &hotback 3.3.3
联机热备的恢复 3.3.3.1完全恢复 一般步骤:1.
通过以下信息,找到故障数据文件alert.logbackground trace file v$recover_file
v$recovery_lo通过这两个视图可以了解详细的需要恢复的数据文件与需要使用到的归档日志。2.
将故障数据文件对应的表空间
offlineSQL& alter ta3. restore and recoverSQL& host cp .. ..;SQL& [alter database] recover database/tablespace/datafile 'xx';4.
将表空间 onlineSQL& alter t 3.3.3.2不完全恢复 不完全恢复的方法只能恢复到过去某个时间点/SCN的数据库状态。一些限制:1.
必要条件一个有效的
online/offline
备份(包含所有的数据文件)自从备份到故障前的所有归档日志有可能需要控件文件
(所有控件文件丢失,数据库结构已改变) SQL& recover database ... usin2.
只能恢复到所有备份数据文件的最大 SCN以后,3.
恢复后需要 resetlog,所以需要在恢复后马上备份三种不完全恢复的方法:1.
基于变化的不完全恢复
Change-based Recovery2.
基于用户干涉(取消)的不完全恢复
Cancel-based Recovery3.
基于时间的不完全恢复
Time-based Recovery获得信息:alert.log可以通过 LogMiner获得精确的时间/SCN,一般在备机上恢复,再 exp/imp到生产机。 查看需要恢复的文件,以及相关的提示信息SQL& select * from v$recover_ SQL& select * from v$查看二者的 change#,
确定对应的在 v$log_history 中的范围,从而确定需要那个日志文件序列设置归档日志文件的路径:
LOG_ARCHIVE_DEST设置
在不同的路径:SQL& SET LOGSOURCE 'xx';SQL& alter system archive log start to 'xx';恢复步骤:1.
关闭数据库,启动到 MOUNT 状态SQL& SQL&2.
恢复数据文件、日志文件、归档日志文件SQL& host cp .. ..; SQL&SQL& archived log ==&LOG_ARCHIVE_DEST3.
执行恢复命令 基于变化:SQL& recover database until change 9999;基于时间:SQL& revover database until time ' 14:02:23' usin基于取消:SQL& recover d4.
重置日志,恢复后需要马上备份SQL& alter dat
控件文件的备份与恢复 一、备份 1.
镜像控制文件手工备份
每当数据库结构发生变化时立即备份1.数据库关闭时,OS命令拷贝。2.
联机备份SQL& alter database backup controlfile to 'ctl.bak'; SQL& alter database backup
二、恢复 1.
损坏一个控制文件:从镜像拷贝或修改 initSID.ora取消损坏的控制文件。2.
损坏所有的控制文件:利用备份的控制文件恢复,拷贝或在命令中恢复:SQL& recover database ...usin手工重建控制文件:
NOMOUNT状态下执行SQL& CREATE CONYTROLFILE..; //注意联机日志和数据文件的路径和文件名SQL& alter dat 3.4.2
联机日志文件的备份与恢复 一、备份 1.
镜像在不同的磁盘上。
//如果有镜像备份,不用恢复2.
非归档模式下,在数据库关闭时用 OS命令拷贝备份。3.
归档模式下,手工或自动归档。 二、恢复
在恢复后一定要重做备份 丢失日志组成员:在有多个镜像时,一般不会报错,如果需要恢复,可以先删除再增加。1.
SQL& alter database drop logfile member 'xx';2.
SQL& alter database add logfile member 'xx' to group 2;( 如果丢失当前日志组成员:
可以先 alter s
再进行操作。) 以下恢复方法都是指丢失所有日志组成员的情况下的恢复。 一、丢失非当前联机日志1.
重启数据库到 Mount状态:2.
重建丢失的日志:用命令清空日志组的方法//已归档,重建该日志SQL& alter database clear logfile group 2;//归档模式下如果没有归档SQL& alter database clear unarchived logfile group 2;二、丢失当前联机日志1.
如果数据库正常关闭:日志中没有未决事务需要实例恢复,同非当前联机日志方法。2.
如果是非正常关闭数据库的情况,未决事务需要实例恢复: 如果有备份,可通过备份进行不完全恢复。// until cancel 没有备份,进行强制性恢复
最后的办法,可能导致数据库的不一致3.
如果数据库当前为 Open状态,有活动的事务:尝试能否 Export 或热备份,如果可以,赶紧备份检查非当前日志是否正常,可先做 clear,然后尝试是否能 switch log,能否正常关闭 DB,如果可以 switch log 正常关闭 DB,方法同 1,否则同 2 3.4.3
回滚数据文件的恢复 1.
从可用备份中恢复非归档模式下的恢复会有数据丢失归档模式下,有可用备份,可完全恢复(需要关闭数据库)2.
没有可用备份时强行恢复:// offline drop,删除重建。//
需要先注释 undo_tablespace,或者重新指定一个系统回滚段表空间,然后再操作1.
数据库正常关闭
没有未决的事务1. shutdown,修改 init参数文件,注释 undo_tablespace2. SQL&st3. SQL&alter database datafile 24. SQL&5. SQL&drop tablespace xx6.
重建回滚段表空间7.
shutdown,修改 init参数文件,去掉注释设置新的 undo_tablespace8.
SQL& alter system disabl2.
非正常关闭
隐含参数:_CORRUPTED_ROLLBACK_SEGMENTS1. shutdown,修改 init参数文件,删除 undo_tablespace2. SQL&st3. SQL&alter database datafile 24. SQL&5. SQL&drop tablespace xx如果出错:回滚段中有活动事务SQL&drop rollback segment rbs0; rbs1, 2 ...在第 1步中,加入隐含参数_CORRUPTED_ROLLBACK_SEGMENTS= (_SYSSMU1$,_SYSSMU2$,_SYSSMU3$, ...)6.
重建回滚段表空间,online7. shutdown,修改 init参数文件,去掉注释设置新的 undo_tablespace去掉隐含参数8.
SQL&alter system disabl 3.4.5
临时数据文件的恢复 方法:
先将用户临时表空间置为其他,然后删除重建1. SQL& shutdown2. SQL& st3. SQL& alter user xxx temporary tablespace TEMP2;4. SQL&5. SQL& drop tablespace tem6.
重建临时表空间7.
重新分配给各用户8.
SQL& alter system disabl 如果是默认的临时表空间,需要先将默认临时表空间置为其他 SQL& alter database default temporary tablespace temp_2;
RMAN是 ORACLE提供的一个备份与恢复的工具,可以用来备份和还原数据库文件、 归档日志和控制文件。它也可以用来执行完全或不完全的数据库恢复。 RMAN可以由命令行接口或者 OEM的 Backup Manager GUI 来控制。4.1 基本知识4.1.1 RMAN的组件、概念 1.
主要包括以下组件: Target Database: (目标数据库)就是需要
对其进行备份与恢复的数据库,RMAN
可以备份数据文件,控制文件,归档日志,spfile。(注意:RMAN不能用于备份联机日志、初始化参数文件和口令文件)Server Session:
(服务器会话)RMAN启动数据库上的 Oracle服务器进程,将建立一个与目标数据库的会话。由目标数据库上的服务器进程进行备份、还原、恢复的实际操作。 服务器进程 RMAN
的服务进程是一个后台进程,用于与 RMAN工具与数据库之间的通信,也用于 RMAN
工具与磁盘/磁带等
设置之间的通信,服务进程负责备份与恢复的所有工作, 在如下情况将产生一个服务进程:
当连接到目标数据库
分配一个新的通道 Channel:
(通道) 一个通道是 RMAN和目标数据库之间的一个连接,"allocate channel"命令在目标数据库启动一个服务器进程,同时必须定义服务器进程执行备份或者恢复操作使用的 I/O类型。通道控制命令可以用来:?
控制 RMAN使用的 O/S资源,影响并行度?
指定 I/O带宽的限制值(设置 limit read rate 参数)?
定义备份片大小的限制(设置 limit kbytes)?
指定当前打开文件的限制值(设置 limit maxopenfiles) recovery catalog: (恢复目录) 用来保存备份与恢复信息的一个数据库,不建议创建在目标数据库上。RMAN
利用恢 复目录记载的信息去判断如何执行需要的备份恢复操作。如果不采用恢复目录,备份信息可以存在于目标数据库的 control file 中。如果存放在目标数据库的
中,控件文件会不断增长,不能保存
的Script。CONTROL_FILE_RECORD_KEEP_TIME
(default=7):控件文件中
信息保存的最短时间。使用恢复目录的优势:
可以存储脚本,记载较长时间的备份恢复操作。 RMAN Repository:
恢复目录数据库) 存放 recovery catalog(恢复目录)的数据库。建议为恢复目录数据库创建一个单独的数据库。 MML: (媒体管理库) Media Management Layer (MML)是第三方工具或软件,用于管理对磁带的读写与文件的 跟踪管理。如果你想直接通过
备份到磁带上,就必须配置媒体管理层,媒体管理层 的工具如备份软件可以调用 RMAN来进行备份与恢复。 2.概念述语 Backup Sets (备份集合) 备份集合的特性:包括一个或多个数据文件或归档日志,以 oracle专有的格式保存,有 一个完全的所有的备份片集合构成,构成一个完全备份或增量备份。 Backup Pieces (备份片) 一个备份集由若干个备份片组成。每个备份片是一个单独的输出文件。一个备份片的大 小是有限制的;如果没有大小的限制,
备份集就只由一个备份片构成。备份片的大小不能 大于使用的文件系统所支持的文件长度的最大值。 Image Copies 镜像备份 镜像备份是独立文件(数据文件、归档日志、控制文件)的备份。它很类似操作系统级 的文件备份。它不是备份集或备份片,也没有被压缩。 Full backup Sets 全备份集合 全备份是一个或多个数据文件中使用过的数据块的的备份。没有使用过的数据块是不被备份的,也就是说,oracle
进行备份集合的压缩。 Incremental backup sets 增量备份集合 增量备份是指备份一个或多个数据文件的自从上一次同一级别的或更低级别的备份以来被修改过的数据块。
与完全备份相同,增量备份也进行压缩。 File multiplexing 多个数据文件可以在一个备份集中。 Recovery catalog resyncing
恢复目录同步 使用恢复管理器执行 backup、copy、restore 或者 switch 命令时,恢复目录自动进行更 新,但是有关日志与归档日志信息没有自动记入恢复目录。需要进行目录同步。使用 resync catalog命令进行同步。RMAN& Incarnation
对应物 在不完全恢复完成之后,通常需要使用
选项来打开数据库。resetlogs
表示一个 数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始。数据库的逻辑生存期也被称为 一个对应物(incarnation)。每次使用
选项来打开数据库后都会创建一个新的数据库 对应物。4.1.2 RMAN的使用:命令行接口与脚本 数据库状态:RMAN恢复目录数据库:
必须OPEN目标数据库:
根据不同情况,必须MOUNT或OPEN 1.
使用不带恢复目录的 RMAN 设置目标数据库的
ORACLE_SID
,执行:$ rman nocatalogRMAN& connect targetRMAN& connect target user/pwd&@db 2.
使用带恢复目录的RMAN $ rman catalogrman/rmanRMAN& connecttarget
//连接本地数据库作为目标数据库RMAN& connecttarget user/pwd&@db //连接远程数据库或$ rman catalogrman/rman targetuser/pwd&@db 3.
命令行接口 1、单个执行RMAN&2、运行一个命令块RMAN& RUN {2& copy datafile 10 to3& '/oracle/prod/backup/prod_10.dbf';4& }3、运行存储在恢复目录中的脚本:RMAN& RUN
{ EXECUTE SCRIPT backup_whole_db };4、运行外部脚本:$ rman catalog rman/rman target / @backup_db.rman$ rman cmdfile=backup.rman msglog=backup.logRMAN& @backup_db.rmanRMAN& RUN
{ @backup_db.rman } 如果在 cron
中执行,注意在脚本中设置正确的环境变量,例:#set envexport ORACLE_HOME=/opt/oracle/product/9.2export ORACLE_SID=testexport NLS_LANG="AMERICAN_AMERICA.zhs16gbk"export PATH=$PATH:$ORACLE_HOME/bin rman cmdfile=backup_db.rman 4.
使用脚本 创建或者取代脚本:RMAN& create script alloc_disk {2& # Allocates one disk3& allocate channel dev14& setlimit channel dev1 kbytes 2097150 maxopenfiles 32 readrate 200;5& }RMAN& replace script rel_disk {2& # releases disk3& release channel dev1;5& }删除脚本:RMAN& DELETE SCRIPT Level0B查看脚本:RMAN& PRINT SCRIPT Level0B运行脚本:RMAN& RUN { EXECUTE SCRIPT backup_whole_db }; 5.
运行OS命令 RMAN支持通过执行 host命令暂时退出 RMAN的命令提示符而进入到操作系统的命令环境。 6.
执行SQL语句 在
的命令提示符后输入
命令,然后在一对单引号(双引号亦可)中输入要执行的
语句,例如:RMAN& SQL 'ALTER SYSTEM CHECKPOINT';对于 SELECT语句,无法得到结果。可以先执行 host再用 SQLPLUS。
4.2 RMAN 的配置
建立Recovery Catalog恢复目录 (1)
在目录数据库中创建恢复目录所用表空间:SQL& create tablespace rman_ts datafile '/xxx/rman_ts.dbf' size 20M;(2)
在目录数据库中创建RMAN
用户并授权:SQL&
identified
tablespace
temporary tablespace temp quota unlimited on rman_SQL& grant connect, resource, recovery_catalog_(3)
在目录数据库中创建恢复目录$ rman catalog rman/rmanRMAN& create catalog tablespace rman_(4)
登记目标数据库:一个恢复目录可以注册多个目标数据库,注册目标数据库的命令为:$ RMAN catalog rman/rman target user/pwd @ RMAN& 4.2.2
查看RMAN的默认设置SHOW命令 必须连接目标数据库RMAN& show allRMAN&
通道分配 RMAN&
// IO 设备类型 RMAN& s
保存策略RMAN& show da
多个备份的拷贝数目 RMAN& //
备份集大小的最大值 RMAN&
不必备份的表空间 RMAN& show
备份的优化 4.2.3
配置RMAN的默认设置 1.
配置备份集文件的格式
(format) RMAN& configure channel device type disk format'/u05/oracle/rmanback/%U';备份文件可以自定义各种各样的格式,如下%c
备份片的拷贝数%d
数据库名称%D
位于该月中的第几天
位于该年中的第几月
唯一的名称,这个格式的形式为
c-IIIIIIIIII-YYYYMMDD-QQ,其中 IIIIIIIIII
为该数据库的 DBID,YYYYMMDD
为日期,QQ
数据库名称,向右填补到最大八个字符%u
一个八个字符的名称代表备份集与创建时间%p
该备份集中的备份片号,从 1
开始到创建的文件数%U
一个唯一的文件名,代表%u_%p_%c%s
备份集的号%t
备份集时间戳%T
年月日格式(YYYYMMDD) 2.
配置默认 IO设备类型
( device type ) IO
设备类型可以是磁盘或者磁带,在默认的情况下是磁盘,可以通过如下的命令 进行重新配置。RMAN& configure default
RMAN& configure default注意,如果换了一种 IO
设备,相应的配置也需要做修改,如RMAN& configure device type sbt parallelism 2; 3.
配置自动分配的通道
( Chanel ) RMAN& configure channel device type disk format'/U01/ORACLE/BACKUP/%U在运行块中,手工指定通道分配,这样的话,将取代默认的通道分配。RMAN& Run {allocate channel cq type disk format='/u01/backup/%u.bak';…}通道的一些特性:读的速率限制
Allocate channel ……rate = integer 最大备份片大小限制
Allocate channel …… maxpiecesize = integer 最大并发打开文件数(默认 16)
Allocate channel …… maxopenfile = integer4.
配置默认的保存策略
( Retention Policy) 保存策略是管理备份与副本有效期或者是否有效的一种方法。恢复数据库的时候Oracle
不 考 虑 失效 的 备 份。我 们可 以 定 义 两 种 保存 策 略: 恢复 窗口 备份 保存 策 略(recovery window
retention policy
)和冗余备份保存策略(redundancy backup retention policy
)备份策略保持
分为两个保持策略: 一个是时间策略,决定至少有一个备份能恢复到指定的日期 一个冗余策略,规定至少有几个冗余的备份。 恢复窗口备份保存策略这种保存策略类型的使用基于数据库可能恢复到的最早的日期。
例如,假设今天 是星期一,此前存在
个备份。第一个备份在昨天生成的,第二个备份是上星期四生 成的,而最后一个备份是
天前备份的。假如恢复窗口是
天,那么昨天和上星期 四的备份是有效备份,而
天前的备份会成为废弃备份。下面的命令将恢复窗口配置为 7 天:RMAN& configure retention policy to recovery window of 7冗余备份保存策略使用这种保存策略,RMAN
会从最新备份开是保留
个数据备份,其余的废弃。 例如,如果有四个备份,而冗余数是
3,那么最早的那个备份将被废弃。下面的命令将 备份策略设置为
3:RMAN& configure retention policy to redundancy3;设置 NONE可以把使备份保持策略失效,Clear
将恢复默认的保持策略RMAN& configure rete例:保 证 至 少有一 个 备份 能 恢复 到
的时 间点 上, 之 前 的备份将 标 记 为ObsoleteRMAN& configure retention policy to recovery window of 5至少需要有三个冗余的备份存在,如果多余三个备份以上的备份将标记为冗余RMAN& configure retention policy to redundancy 5; 5.
配置多个备份的拷贝数目( backup copies ) 如果觉得单个备份集不放心,可以设置多个备份集的拷贝,如: RMAN& configure datafile backup copies for device type disk to 2; RMAN& configure archivelogbackup copies for device type disk to 2;如果指定了多个拷贝,可以在通道配置或者备份配置中指定多个拷贝地点:RMAN& configure channel device type disk format'/u01/backup/%U', '/u02/backup/%U';RMAN& backup datafile n format '/u01/backup/%U', '/u02/backup/%U'; 6.
设置并行备份( ARALLELISM ) RMAN支持并行备份与恢复,也可以在配置中指定默认的并行程度。如:RMAN& configure device type disk parallelism 4;指定在以后的备份与恢复中,将采用并行度为 4,同时开启 4个通道进行备份与恢 复,当然也可以在 RUN的运行块中手工分配多个通道来决定备份与恢复的并行程度。 并行的数目决定了开启通道的个数。如果指定了通道配置,将采用指定的通道,如果没 有指定通道,将采用默认通道配置。还可以在 BACKUP命令中使用指定 FILESPERSET 或者指定(datafile
channel c1 tag=DF1)(datafile 2,3,6 channel c2 tag=DF2) 7.
设置控制文件自动备份
(autobackup on) 通过如下的命令,可以设置控制文件的自动备份RMAN& configure contr对于没有恢复目录的备份策略来说,这个特性是特别有效的,控制文件的自动备份发生在任何 backup
命令之后,或者任何数据库的结构改变之后。可以用如下的配置指定控制文件的备份路径与格式RMAN& configure controlfile autobackup format for type disk to '%f'; 在备份期间,将产生一个控制文件的快照,用于控制文件的读一致性,如下配置:RMAN& configure snapshot controlfile name to'/u01/app/oracle/produ
浏览: 223910 次
来自: 南昌
不错,学习了。shadow文件中记录的格式是什么?
重拾jstl——写得很好。我收藏下。
不错,非常简明扼要
很好,所见略同,
摘话回帖!
通过response对象的sendRedirect ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 db2导入del文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信