Oracle DBA神器:PRM-DUL灾难恢复工具,Schema级别数据恢复。PRM-DULFor Oracle Database – schema级别oracle数据库数据恢复特性 ,PRM-DUL即ParnassusData Recovery Manager是企业级别Oracle数据库灾难恢复工具。PRM可以在无备份的情况下恢复被truncated掉的表,也可以恢复无法打开的Oracle数据库(Alter Database Open失败)中的数据。
在Oracle数据库中,新建一个包时可能会遇到卡住现象,这个问题一般是由于数据库正在进行大量处理,导致系统繁忙,而造成的。要解决这个问题,首先可以检查当前的数据库状态,看看是否存在大的事务正在进行;其次,可以创建索引来优化数据库查询;最后,也可以更改数据库的并发参数来提升性能。
基本知识
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数据库文件进行恢复与备份、oracle新建包卡住、Oracle数据库备份与恢复之二:SQL*Loader等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)