基本知识
Oracle 的 SQL LOADER 可以将外部格式化的文本数据加载到数据库表中 通常 与 SPOOL导出文本数据方法配合使用
命令格式
SQLLDR keyword=value [ keyword=value ……]
例 $ sqlldr user/pwd control=emp ctl data=emp dat bad=emp bad log=emp log
控制文件
SQLLOADER 根据控制文件可以找到需要加载的数据 并且分析和解释这些数据
控制文件由三个部分组成 具体参数参考帮助文档 全局选件 行 跳过的记录数等 INFILE 子句指定的输入数据 数据特性说明
ment ——注释
例
load data infile
append ——除了 append外 还有 insert replace truncate等方式
into table emp fields terminated b y |
(
no float external name char( )
age integer external
duty char( ) salary float external
upd_ts date( ) YYYYMMDDHH MISS )
begindata
|Mulder| | | |
|Scully| | | |
控制文件中infile选项跟sqlldr 命令行中data 选项含义相同 如使用infile 则表明数据在本控制文件以 begin data 开头的区域内 一些选项 FIELDS TERMINATED BY WHITESPACE FIELDS TERMINATED BY x FILLER_ FILLER // 指定某一列将不会被装载
DEPTNO position( ) DNAME position( ) // 指定列的位置SEQNO RECNUM //载入每行的行号
SKIP n // 指定导入时可以跳过多少行数据
数据文件
按控制文件数据格式定义的数据行集
例
|Tom| | | |
|Jerry| | | |
固定格式 可变格式 流记录格式
固定格式
当数据固定的格式(长度一样)时且是在文件中得到时 要用 INFILE fix n
load data
infile example dat fix
into table example
fields terminated b y optionally enclosed by
(col char( ) col char( )) example dat
cd fghi
lmn
pqrs
uvwx
可变格式
当数据是可变格式(长度不一样)时且是在文件中得到时 要用 INFILE var n 如
load data
infile example dat var
into table example
fields terminated b y optionally enclosed by
(col char( ) col char( )) example dat
hello cd world im
my name is
流记录格式 // Stream recored format load data infile xx dat str |\n
into table xx field terminated b y optionally enclosed by
(col char( ) col char( ))
example dat
hello ccd |
world bb |
坏文件
bad=emp bad坏文件包含那些被 SQLLoader拒绝的记录 被拒绝的记录可能是不符合要求的记录
日志文件及日志信息
log=emp log当 SQLLoader 开始执行后 它就自动建立 日志文件 日志文件包含有加载的总 结 加载中的错误信息等
高级选项
Conventional Path Load与Direct Path Load
Conventional path Load 通过常规通道方式上载
特点 mit always gen redo logs enforce all constraints fire insert triggers can load into cluster other user can make change
rows 每次提交的记录数
bindsize 每次提交记录的缓冲区
readsize 与 bindsize 成对使用 其中较小者会自动调整到较大者
sqlldr 先计算单条记录长度 乘以 rows 如小于 bindsize 不会试图扩张 rows以填充 bindsize 如超出 则以 bindsize 为准 命令为
$ sqlldr dbuser/oracle control=emp ctl log=emp log rows= bindsize=
Direct 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
SPOOL导出文本数据方法
导入的数据文件可以用 SPOOL导出文本数据方法生成
SQLPLUS环境设置
SET NEWPAGE NONE HEADING OFF SPACE
PAGESIZE SET TRIMOUT ON TRIMSPOOL ON LINESIZE
注 LINESIZE 要稍微设置大些 免得数据被截断 它应和相应的 TRIMSPOOL结合使用防止导出的文本有太多的尾部空格
但是如果 LINESIZE 设置太大 会大大降低导出的速度 另外在 WINDOWS下导 出最好不要用 PLSQL导出 速度比较慢 直接用 MEND 下的 SQLPLUS命令最 小化窗口执行 对于字段内包含很多回车换行符的应该给与过滤 形成比较规矩的文本 文件
通常情况下 我们使用 SPOOL方法 将数据库中的表导出为文本文件 如下述
set trimspool on
set linesize pagesize newpage heading off term off spool 路径+文件名
select col || ||col || ||col || ||col || …… from tablename
spool off
脚本
将表中数据记录导出为字段值用分隔符 | 分开的 dat文件
#!/bin/ksh
##################################################################
## 名称 unloadtable
## 功能 本 shell 用于将表中数据记录导出
## 导出为字段值用分隔符 | 分开的 dat文件
## 编者
## 日期
##################################################################
if [ $# ne ]
then echo usage unloadtable tablename username password
exit
fi
##准备工作
echo set heading off >/tmp/$l
echo set pagesize >>/tmp/$l
echo set linesize >>/tmp/$l
echo set feedback off >>/tmp/$l
echo set tab off >>/tmp/$l
echo select column_name|| from user_tab_columns where lower(table_name)= $ order by
column_id >> /tmp/$l
##产生 select 语句
echo set heading off >/tmp/$ sel
echo set pagesize >>/tmp/$ sel
echo set linesize >>/tmp/$ sel
echo set feedback off >>/tmp/$ sel
echo set tab off >>/tmp/$ sel
echo select >>/tmp/$ sel
echo `sqlplus s $ /$ < /tmp/$l` |sed s/ /|| | ||/g |sed s/||$//g |sed s/date/\ date\ /g
>>/tmp/$ sel
##生成 dat文件
#echo from $ \n/ >>/tmp/$ sel 由于 / 导致多执行一次 select
echo from $ \n >>/tmp/$ sel
sqlplus s $ /$ < /tmp/$ sel >$ _tmp dat
#awk {if(FNR!= ) print $ } $ _tmp dat >$ dat FNR 选项使得第一条记录选不出
awk {print $ } $ _tmp dat >$ dat
rm f $ _tmp dat
将数据导入到相应表中
#!/bin/ksh
##################################################################
## 名称 loadtable
## 功能 本 shell 用于将已经准备好的 dat数据文件导入相应的表中
## dat 文件各个字段值用分隔符 | 分开
## 编者
## 日期
##################################################################
if [ $# ne ]
then
echo usage loadtable tablename username password exit fi
##准备工作
echo set heading off >/tmp/$lsql
echo set pagesize >>/tmp/$lsql
echo set linesize >>/tmp/$lsql
echo set feedback off >>/tmp/$lsql
echo set tab off >>/tmp/$lsql
echo select column_name|| from user_tab_columns where lower(table_name)= $ order by
column_id >> /tmp/$lsql
##产生 ctl文件
echo load data >/tmp/$ ctl
echo infile >>/tmp/$ ctl
echo into table $ >>/tmp/$ ctl
echo fields terminated by | >>/tmp/$ ctl
echo `sqlplus s $ /$ < /tmp/$lsql` |sed s/ $/)/g |sed s/^/(/g >>/tmp/$ ctl
##开始导入数据
echo truncate table $ >/tmp/$ sql
sqlplus $ /$ < /tmp/$ sql
lishixinzhi/Article/program/Oracle/201311/17312
oracle版本oracle 11g
逻辑备份与恢复
备份前可以先查看环境变量情况
如果没有则对变量进行export,特别是字符集,结合实际环境所在的情况
使用命令exp 进行导出备份,注意备份文件所在磁盘的空间
恢复,恢复前注意环境变量
如果没有则对变量进行export,特别是字符集
使用命令imp对数据库进行恢复,该命令建议是在新安装的环境进行数据导入,而不是已经有数据的数据库进行导入,会导致数据错乱,ignore=y(由于是在新的环境,没有数据,所以这个可以加,而且必须加,不加恢复数据表好像有问题,访问不了。)
imp 'system/chenzm123@orcl' file=/bakdir/db-20220513dmp full=y log=/imp-2022-0513log ignore=y
oracle imp 导入可以使用 ignore=y 参数进行覆盖数据库,
如果不使用 ignore=y 参数在进行imp 导入时,就会 对已经存在的表就不会进行导入,
如果加上ignore=y 参数就会对已经存在的表中没有的记录进行更新,但对已经存在记录不会进行覆盖修改。
备份脚本,在oracle运行用户下添加计划任务,备份的时候注意挂载目录的权限,注意系统时间,如果系统时间不对,那么要注意重启计划任务service crond restart ,不然计划任务可能不会按时执行。
三种方法:冷备份、热备份和Export导出数据库对象备份
Oracle作为目前世界上市场份额占有率最高的大型通用数据库,在世界上各行各业的信息化建设中起着核心首脑的作用。它(软件自身以及它所依赖运行的硬件)一旦出现问题,轻则导致业务中断,重则丢失部分数据,严重则全部数据不可逆转性损毁。备份方法如下:
1、冷备份
冷备份是Oracle最简单的一种备份;执行冷备份前必须关闭数据库;然后使用 *** 作系统实用工具或者第三方工具备份所有相关的数据库文件。
2、热备份
对于热备份来说,故名思议就是刚出炉的数据还是热乎的就开始执行备份的 *** 作。实现热备份的方式目前主要有两种方式,逻辑方式和物理方式。
3、Export导出数据库对象备份
导出导入是一种最初级的备份方式,它采用定时将全量、增量或者差异数据以表、用户或者全库为单位导出到某种格式的文件中达到备份的目的。
优点:能执行对象或者行恢复。备份和恢复速度更快。能够跨 *** 作系统平台迁移数据库。数据库可一直运行。
缺点:export并不是冷备份和热备份的替代工具。冷、热备份可保护介质失效。export备份可保护用户或应用错误。
Oracle数据库备份与恢复的三种方法
Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP)、热备份和冷备份。导出备件是一种逻辑备份,冷备份和热备份是物理备份。
一、 导出/导入(Export/Import)
利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去。
1、 简单导出数据(Export)和导入数据(Import)
Oracle支持三种方式类型的输出:
(1)、表方式(T方式),将指定表的数据导出。
(2)、用户方式(U方式),将指定用户的所有对象及数据导出。
(3)、全库方式(Full方式),瘵数据库中的所有对象导出。
数据导入(Import)的过程是数据导出(Export)的逆过程,分别将数据文件导入数据库和将数据库数据导出到数据文件。
2、 增量导出/导入
增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为SYSTEM来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为exportdmp,如果不希望自己的输出文件定名为exportdmp,必须在命令行中指出要用的文件名。
增量导出包括三种类型:
(1)、“完全”增量导出(Complete)
即备份三个数据库,比如:
exp system/manager inctype=complete file=040731dmp
(2)、“增量型”增量导出
备份上一次备份后改变的数据,比如:
exp system/manager inctype=incremental file=040731dmp
(3)、“累积型”增量导出
累计型导出方式是导出自上次“完全”导出之后数据库中变化了的信息。比如:
exp system/manager inctype=cumulative file=040731dmp
数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效的完成。
比如数据库的被封任务可以做如下安排:
星期一:完全备份(A)
星期二:增量导出(B)
星期三:增量导出(C)
星期四:增量导出(D)
星期五:累计导出(E)
星期六:增量导出(F)
星期日:增量导出(G)
如果在星期日,数据库遭到意外破坏,数据库管理员可按一下步骤来回复数据库:
第一步:用命令CREATE DATABASE重新生成数据库结构;
第二步:创建一个足够大的附加回滚。
第三步:完全增量导入A:
imp system/manager inctype=RESTOREFULL=y FILE=A
第四步:累计增量导入E:
imp system/manager inctype=RESTOREFULL=Y FILE=E
第五步:最近增量导入F:
imp system/manager inctype=RESTOREFULL=Y FILE=F
二、 冷备份
冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份时将关键性文件拷贝到另外的位置的一种说法。对于备份Oracle信息而言,冷备份时最快和最安全的方法。冷备份的优点是:
1、 是非常快速的备份方法(只需拷文件)
2、 容易归档(简单拷贝即可)
3、 容易恢复到某个时间点上(只需将文件再拷贝回去)
4、 能与归档方法相结合,做数据库“最佳状态”的恢复。
5、 低度维护,高度安全。
但冷备份也有如下不足:
1、 单独使用时,只能提供到“某一时间点上”的恢复。
2、 再实施备份的全过程中,数据库必须要作备份而不能作其他工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
3、 若磁盘空间有限,只能拷贝到磁带等其他外部存储设备上,速度会很慢。
4、 不能按表或按用户恢复。
如果可能的话(主要看效率),应将信息备份到磁盘上,然后启动数据库(使用户可以工作)并将备份的信息拷贝到磁带上(拷贝的同时,数据库也可以工作)。冷备份中必须拷贝的文件包括:
1、 所有数据文件
2、 所有控制文件
3、 所有联机REDO LOG文件
4、 Initora文件(可选)
值得注意的使冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的。
下面是作冷备份的完整例子。
(1) 关闭数据库
sqlplus /nolog sql>;connect /as sysdba sql>;shutdown normal;
(2) 用拷贝命令备份全部的时间文件、重做日志文件、控制文件、初始化参数文件
{$PageTitle=sql>;cp ; ;}
(3) 重启Oracle数据库
sql>;startup
三、 热备份
热备份是在数据库运行的情况下,采用archivelog mode方式备份数据库的方法。所以,如果你有昨天夜里的一个冷备份而且又有今天的热备份文件,在发生问题时,就可以利用这些资料恢复更多的信息。热备份要求数据库在Archivelog方式下 *** 作,并需要大量的档案空间。一旦数据库运行在archivelog状态下,就可以做备份了。热备份的命令文件由三部分组成:
1. 数据文件一个表空间一个表空间的备份。
(1) 设置表空间为备份状态
(2) 备份表空间的数据文件
(3) 回复表空间为正常状态
2. 备份归档log文件
(1) 临时停止归档进程
(2) log下那些在archive rede log目标目录中的文件
(3) 重新启动archive进程
(4) 备份归档的redo log文件
3. 用alter database bachup controlfile命令来备份控制文件
热备份的优点是:
1. 可在表空间或数据库文件级备份,备份的时间短。
2. 备份时数据库仍可使用。
3. 可达到秒级恢复(恢复到某一时间点上)。
4. 可对几乎所有数据库实体做恢复
5. 恢复是快速的,在大多数情况下爱数据库仍工作时恢复。
热备份的不足是:
1. 不能出错,否则后果严重
2. 若热备份不成功,所得结果不可用于时间点的恢复
3. 因难于维护,所以要特别仔细小心,不允许“以失败告终”。
Oracle数据库备份方式
Oracle的内核提供数据库的备份和恢复机制,SQLDBA按表空间进行数据的备份和恢复。Oracle提供两种方式:备份恢复和向前滚动,保证意外故障恢复数据库的一致性和完整性。
1 备份恢复方式
对数据库的某个一致状态建立副本,并储存在介质上脱机保存,以此作为数据库恢复的基础。现以Oracle实用程序Export/Import来介绍备份恢复方式。
Export/Import是Oracle提供的两个互补性程序,即卸载和装载。它们既完成数据库与 *** 作系统文件的互为转载,同时可以有效地回收数据库的碎片,提供不同版本间Oracle 数据传送的手段,进行不同用户间的数据传送。
Export数据卸载,将数据从Oracle写到指定的 *** 作系统文件进行备份。卸载的对象、内容与数量有三种模式:TABLE MODE(表模式)、USER MODE(用户模式)、FULL DATABASEM ODE(所有数据库模式)。使用方式既可用交互方式,也可采用命令行方式,以"关键字=值" 将所需信息在命令行中逐一描述来进行卸载。Export要求用户具有CONNECT或DBA特权。
Import与Export互逆,将 *** 作系统文件重新装载至Oracle数据库中,使用方式如Expo rt。使用者要求具有CONNECT和RESOURCE特权,且可选择部分或全部装入。
Export/Import非常方便,系统开销小,它的限制是输出的 *** 作系统文件采用专门的压缩方式存放,仅提供给Import使用。
也可采用SQLPLUS和SQLLOADER实用工具进行备份。使用SQLPLUS的SPOOL命令通过脱机定向输出,使用PLUS格式化结果,形成指定格式的ASCII文件,需要时可用SQLLOADER 进行加载。它的方便之处是ASCII文件可以编辑,可方便地加载至其他数据库(如FoxPro、 Sybase中)。
2 向前滚动方式
Oracle提供向前滚动方式,使建立备份后成功的事务不会丢失。恢复的基础是数据库的某个一致性状态(即方式1完成的备份恢复),恢复的依据是存档的重作记录文件。启动重作记录文件方法如下:
(1) 启动Oracle;
(2) 连接Oracle:CONNECT SYSTEM/PASSWORD;
(3) 启动ARCHIVE LOG。
出现介质故障时,可用SQLDBA的RECOVER命令,利用存档的重作记录文件恢复一个或多个表空间。RECOVER命令对DATABASE或TABLASPACE进行恢复。前者要求SQLDBA START UP已被排斥方式装载且未被打开;后者对无活跃回退段的表空间执行脱机,要求数据库已装载且被打开。
由于向前滚动方式恢复的依据是存档的重作记录文件,因而系统开销大,但恢复的是建立备份以后的成功事务,所以恢复的程度更高、更完备。
IT JOB
以上就是关于Oracle数据库备份与恢复之二:SQL*Loader全部的内容,包括:Oracle数据库备份与恢复之二:SQL*Loader、「oracle备份恢复」oracle数据库备份恢复之逻辑备份与恢复、oracle有哪些备份方式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)