[精品]Oracle 数据库备份与恢复总结(3)

2018-12-29 20:04

$imptest/testfile=/home/exppipefromuser=testtouser=macro& gunzip/home/exppipe 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字节的内容,如0001,先把它转换为10进制数,为1,使用函数

11

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

把852换成16进制数,为354,把2、3字节的0001换成0354,即完成了把该 dmp文件字符集从us7ascii到zhs16gbk的转化,这样,再把该dmp文件导入到zhs16gbk 字符集的数据库就可以了。 2.版本问题

Exp/Imp很多时候,可以跨版本使用,如在版本7与版本8之间导出导入数据,但 这样做必须选择正确的版本,规则为:

·总是使用IMP的版本匹配数据库的版本,如果要导入到816,则使用816的导入工 具。

·总是使用EXP的版本匹配两个数据库中低的那个版本,如在815与816之间互导, 则使用815的EXP工具。

imp和exp版本不能往上兼容:imp可以导入低版本exp生成的文件,不能导入高 版本exp生成的文件

2.SQL*Loader 2.1基本知识

Oracle的SQL*LOADER可以将外部格式化的文本数据加载到数据库表中。通常 与SPOOL导出文本数据方法配合使用。 1.命令格式

SQLLDRkeyword=value[,keyword=value,...] 例:

$sqlldruser/pwdcontrol=emp.ctldata=emp.datbad=emp.badlog=emp.log 2.控制文件

SQL*LOADER根据控制文件可以找到需要加载的数据。并且分析和解释这些数 据。

控制文件由三个部分组成,具体参数参考帮助文档: 1.全局选件,行,跳过的记录数等; 2.INFILE子句指定的输入数据; 3.数据特性说明。 comment:--注释 例: loaddata infile*

12

append--除了append外,还有insert、replace、truncate等方式 intotableemp

fieldsterminatedby‘|’ (

nofloatexternal, namechar(20),

ageintegerexternal, dutychar(1),

salaryfloatexternal,

upd_tsdate(14)‘YYYYMMDDHH24MISS’ )

begindata

100000000003|Mulder|000020|1|000000005000|20020101000000 100000000004|Scully|000025|2|000000008000|20020101235959

控制文件中infile选项跟sqlldr命令行中data选项含义相同,如使用infile*则表明 数据在本控制文件以begindata开头的区域内。 一些选项:

FIELDSTERMINATEDBYWHITESPACE FIELDSTERMINATEDBYx'09'

FILLER_1FILLER,//指定某一列将不会被装载

DEPTNOposition(1:2),DNAMEposition(*:16),//指定列的位置 SEQNORECNUM//载入每行的行号

SKIPn//指定导入时可以跳过多少行数据 3.数据文件

按控制文件数据格式定义的数据行集,例:

100000000001|Tom|000020|1|000000005000|20020101000000 100000000002|Jerry|000025|2|000000008000|20020101235959 固定格式、可变格式、流记录格式: 固定格式:

当数据固定的格式(长度一样)时且是在文件中得到时,要用INFILE\loaddata

infile'example.dat'\intotableexample

fieldsterminatedby','optionallyenclosedby'\(col1char(5), col2char(7)) example.dat:

001,cd,0002,fghi, 00003,lmn, 1,\0005,uvwx, 可变格式:

13

当数据是可变格式(长度不一样)时且是在文件中得到时,要用INFILE\。如: loaddata

infile'example.dat'\intotableexample

fieldsterminatedby','optionallyenclosedby'\(col1char(5), col2char(7)) example.dat:

009hello,cd,010world,im, 012my,nameis,

流记录格式://Stream-recoredformat: loaddatainfile'xx.dat'\

intotablexxfieldterminatedby','optionallyenclosedby'\(col1char(5),col2char(7)) example.dat: hello,ccd,| world,bb,| 4.坏文件 bad=emp.bad

坏文件包含那些被SQL*Loader拒绝的记录。被拒绝的记录可能是不符合要求的记 录。

5.日志文件及日志信息 log=emp.log

当SQL*Loader开始执行后,它就自动建立日志文件。日志文件包含有加载的总 结,加载中的错误信息等。 2.2高级选项

1.ConventionalPathLoad与DirectPathLoad Conventional-pathLoad: 通过常规通道方式上载。

特点:commit,alwaysgenredologs,enforceallconstraints,fireinserttriggers,can loadintocluster,otherusercanmakechange rows:每次提交的记录数

bindsize:每次提交记录的缓冲区

readsize:与bindsize成对使用,其中较小者会自动调整到较大者

sqlldr先计算单条记录长度,乘以rows,如小于bindsize,不会试图扩张rows以填 充bindsize;如超出,则以bindsize为准。 命令为:

$sqlldrdbuser/oraclecontrol=emp.ctllog=emp.logrows=10000bindsize=8192000 Direct-PathLoad:

通过直通方式上载,可以跳过数据库的相关逻辑,不进行SQL解析,而直接将数 据导入到数据文件中。

特点:save,conditionlygenredologs,enforcePKUKNN,notfiretriggers,cannotload

14

intocluster,otherusercannotmakechange 命令为:

$sqlldrdbuser/oraclecontrol=emp.ctllog=emp.logdirect=true 2.SPOOL导出文本数据方法

导入的数据文件可以用SPOOL导出文本数据方法生成。 SQL*PLUS环境设置

SETNEWPAGENONEHEADINGOFFSPACE0PAGESIZE0 SETTRIMOUTONTRIMSPOOLONLINESIZE2500

注:LINESIZE要稍微设置大些,免得数据被截断,它应和相应的TRIMSPOOL结 合使用防止导出的文本有太多的尾部空格。

但是如果LINESIZE设置太大,会大大降低导出的速度,另外在WINDOWS下导 出最好不要用PLSQL导出,速度比较慢,直接用COMMEND下的SQLPLUS命令最

小化窗口执行。对于字段内包含很多回车换行符的应该给与过滤,形成比较规矩的文本 文件。

通常情况下,我们使用SPOOL方法,将数据库中的表导出为文本文件,如下述: settrimspoolon

setlinesize120pagesize2000newpage1headingofftermoff spool路径+文件名

selectcol1||','||col2||','||col3||','||col4||'..'fromtablename; spooloff 2.3脚本

1.将表中数据记录导出为字段值用分隔符'|'分开的.dat文件 #!/bin/ksh

################################################################## ##名称:unloadtable

##功能:本shell用于将表中数据记录导出 ##导出为字段值用分隔符'|'分开的.dat文件 ##编者:

##日期:2006.03.18

################################################################## if[$#-ne3] then

echo\exit0 fi

##准备工作

echo\echo\echo\echo\

echo\

echo\

15


[精品]Oracle 数据库备份与恢复总结(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:在数学课堂上怎样培养学生的创新能力

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: