基于
PL/SQL
的数据库备份方法
PL/SQL Developer
是
Oracle
数据库中用于导入或导出数据库的主要工具,本文主要介绍
了利用
PL/SQL Developer
导入和导出数据库的过程,
并对导入或导出时的一些注意事项进行
了说明,接下来我们就一一介绍。
导出步骤:
1
、
tools ->export user object
选择选项,导出
.sql
文件。
2
、
tools ->export tables-> Oracle Export
选择选项导出
.dmp
文件。
导入步骤:
注:导入之前最好把以前的表删除,当然导入另外数据库除外。
1
、
tools->import tables->SQL Inserts
导入
.sql
文件。
2
、
tools->import talbes->Oracle Import
然后再导入
dmp
文件。
一些说明:
Tools->Export User Objects
导出的是建表语句(包括存储结构)
。
PS
:这种方式只能导出
属于这个用户的表,其他用户的表不能导出,建议用命令行
(exp,imp)
导出。
Tools->Export Tables
里面包含三种导出方式,三种方式都能导出表结构以及数据,如下:
•
Oracle Export
•
Sql Insert
•
pl/sql developer
第一种是导出为
.dmp
的文件格式,
.dmp
文件是二进制的,
可以跨平台,
还能包含权限,
效率也很不错,用得最广
。
第二种是导出为
.sql
文件的,
可用文本编辑器查看,
通用性比较好,
但效率不如第一种,
适合小数据量导入导出。尤其注意的是表中不能有大字段
(
blob,clob,long
)
,如果有,会提
示不能导出
(
提示如下:
table
contains
one
or
more
LONG
columns
cannot
export
in
sql
format,user Pl/sql developer format instead)
。
第三种是导出为
.pde
格式的,
.pde
为
Pl/sql
developer
自有的文件格式,只能用
Pl/sql
developer
自己导入导出,不能用编辑器查看。
PS
:只有
"Oracle
Export"
方式导出再导入后,表结构和索引结构没有发生变化,另两种方式
都改变了索引类型。
---------------------------------------------------------------------------------------------------------------------------------
-----------------------------
第
1
章
导入数据的苦恼
最近,一直再为搭建测试数据库的事情烦恼,主要碰到如下困难:
1
、使用
oracle
dump
方式导出的数据在导入的时候不能随意选择一张表的数据进行导
入;
一般业务的表的数量都有
1000
左右,
在出现由于某张表数据异常导致的故障时,
用
dump
文件进行恢复基本不可行或者很费事;
2
、表存在外键约束和触发器,使用
oracle
dump
import
方式导入表的时候不能非常简
单的禁止触发器和外键,导致大量错误产生,导入的表的数据不全,部分表数据没有导入;
3
、
当修改了某些表的数据后需要将这些表的数据恢复到测试环境搭建时的数据,
import
不能将这些表的数据清空后重新导入。
4
、
当修改了某些表的字段后需要将这些表的数据恢复到测试环境搭建时的数据,
import
不能将这些表重建后重新导入。
那么有没有一个工具能够解决上面我们这位工程师的苦恼呢?
第
2
章
PL/SQL Developer
导入导出工具
PL/SQL Developer
位于
PLSQL DEV
工具的
“
Tools
”
菜单下的
“
Export tables
„”
和
“
Import
tables
„”下,可以进行数据的导出和导入。
2.1
导出功能介绍
Where clause:
使导出操作支持
where
条件,
比如你只需要导出每张表的
10000
条记录,
可以在输入框里输入“
rownum < 10001
”
。
Compress
file:
选中后支持导出文件的压缩,节省存储空间,但是压缩会占用多余的时
间。
Include storage:
导出的文件中包含建表信息,如果需要在导入的时候能支持建表操作,
需要选中该项。
2.2
导入功能介绍
Drop tables
:
支持在导入数据前先删除表,
选择该项后,
默认选择
“
Create tables
”
选项,
并且“
Truncate tables
”和“
Delete table
”操作变成灰色不可用状态。
Create
tables
:支持在导入数据前先创建表,比如我们已将建好了用户,这个时候需要
导入表而之前又没有执行建表脚本的时候,可以选中此项。
Truncate
tables
:支持在导入数据前先清空表数据,想恢复表数据到建测试环境的时候
可以使用这个选项,该选项和“
Delete tables
”互斥。
Delete
tables
:支持在导入数据前删除表数据,这个选项目前还没有发现比较特殊的使
用意义,该选项和“
Truncate tables
”互斥。该选项的导入速度大大慢于“
Truncate tables
”
,
一般使用“
Truncate tables
”
。
2.3
如何解决导出
clob
和
blob
类型数据报错的问题
当表字段中含有
clob
和
blob
类型数据时,使用
PL/SQL Developer
导出会报
stream read
error
的错误,
导出操作终止,
说明
PL/SQL Developer
方式导出不支持这种类型,
oracle export
方式可以支持这种类型。
由于需要导出的表很多,
PL/SQL
在导出前都要对需要导出的表进
行分析,通常都会花费十几分钟的时间,然而由于某张表存在
clob
和
blob
类型数据时就会
异常终止,
那之前的操作时间就会浪费,
为了导出所有表需要将导出的表进行标记,
只导出
没有
clob
和
blob
类型数据的表。我们通常的做法是在导出表的时候用
ctrl
或者
shift
按键进
行手工选择,
通过导出的日志记录不能导出的表,
然后手工将这些表反选出待导出的表。
但
是这样操作费时费力,需要通过不停反复的操作,才能知道哪些表不能导出。
下面介绍一
下如何使用
oracle
系统视图
all_tab_columns
和
PL/SQL
在导出表的时候提供的
Object selection
功能快速导出不包含
clob
和
blob
的表数据。
1
、使用下面的
sql
语句拼出
Object selection
的文件内容。
--
不包含
clob
和
blob
的表
select distinct('TABLE "'||a.OWNER ||'"."'||a.TABLE_NAME||'"')
from
sys.all_tab_columns
a
where
a.OWNER
=
'ICDPUB'
and
a.TABLE_NAME
not
in
(select
t.TABLE_NAME
from
sys.all_tab_columns
t
where
t.OWNER
=
'ICDPUB'
and
t.DATA_TYPE
in
('CLOB','BLOB'))
注意:上面的
sql
语句里的
ICDPUB
是用户名
2
、按照上面的语句的执行结果生成
Object selection
的文件(后缀是
.osf
)
,文件的内容
如下:
PL/SQL Developer Object Selection File 1
TABLE "ICDPUB"."ACTIVE_ALARMS"
TABLE "ICDPUB"."ALLAPPOINT"
TABLE "ICDPUB"."ALLOPTIONVIEW"
TABLE "ICDPUB"."ALLOTCONFIG"
TABLE "ICDPUB"."ALLPAPERAUTHVIEW"
TABLE "ICDPUB"."ALLPAPERVIEW"
TABLE "ICDPUB"."ALLQUESTIONVIEW"
3
、在导出表功能的表选择框里单击右键选择“
Load Object selection
”
,选择上一步制作
的文件
,
完成表的选择。
4
、选择合适的参数,进行导出操作。
5
、用
oracle export
方式导出包含
clob
和
blob
的数据。