在较早期的随笔《Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作》粗略介绍了Oracle数据库的备份还原操作,本文想从开发框架的基础上介绍Oracle数据库的脚本或者还原操作。
我们在Winform开发框架、混合式开发框架、Web开发框架等各种开发框架,底层都是支持多种数据库的,如MS SQLServer、Oracle、MySQL、SQLite、PostgreSQL等等,如下图所示。
其中SQLServer支持最为常用,而且也是最为方便备份还原的操作,而Oracle数据库这是次之,也是较为常用的数据库,不过相对SQLServer来说,Oracle的数据库处理起来并不是那么方便,因此本文着重介绍一下,基于框架层面的数据库,如何实现数据库脚本的处理或者基于备份文件的还原操作。
1、框架中的数据库脚本处理
如果使用数据库脚本的方式,Oracle可以按照前面《Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作》的方式构建一个表空间,然后创建对应的数据库信息,如下所示。
create tablespace win_tbs datafile 'C:\app\Administrator\oradata\whcdb\win.dbf' size 100M;
create user win identified by win default tablespace win_tbs;
grant connect,resource to win;
grant dba to win;
上面代码就是创建表空间文件,然后创建一个win用户,并附加在表空间里面。
有了这些信息,我们就可以通过用户win,密码为win的方式登录Oracle数据库了。
然后我们就可以利用这个用户,在PLSQL上进行表的创建和数据操作处理了。
如我们创建表的脚本如下所示。
/*==============================================================*/
/* Table: TB_CITY */
/*==============================================================*/
create table TB_CITY (
ID number not null,
CITYNAME NVARCHAR2(50),
ZIPCODE NVARCHAR2(50),
PROVINCEID number,
constraint PK_TB_CITY primary key (ID)
);
comment on table TB_CITY is'全国城市表';
comment on column TB_CITY.CITYNAME is'城市名称';
comment on column TB_CITY.ZIPCODE is'邮政编码';
comment on column TB_CITY.PROVINCEID is'省份ID';
例如我们创建各类不同的数据库脚本,那么只需要按照顺序加入或者选择加入执行数据库脚本即可。
那么执行这些SQL,该如何操作呢,是不是直接拖动到PL-SQL上就可以了?
当然不是,否则长一点的数据库脚本,就可能导致非常迟缓的执行效率。
一般可以通过两种方式,一种是使用命令行的方式。
这种方式执行速度非常快,比起直接在PL-SQL的SQL窗口上执行更有效率。
另外一种方式,就是可以利用PL-SQL里面的另外一个地方进行执行数据库脚本,如下所示。
在【 工具】【导入表】的操作里面,弹出一个对话框,也是执行脚本高效的操作之一。
上面介绍的这些方式,就是在数据库没有的情况下,根据数据库脚本构建对应的数据对象和数据的。
2、使用imp和exp进行数据的导入和导出
另外一个种还原已有备份文件或者备份已有数据库的操作就是使用Oracle的命令imp和exp了。
imp使用的基本格式:imp[username[/password[@service]]]
一般也可以使用imp,然后一步步的操作即可。
我们先来了解下这两个命令的格式:
基本语法和实例:
1、EXP: 有三种主要的方式(完全、用户、表)
1)、完全:
EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y
如果要执行完全导出,必须具有特殊的权限
2)、用户模式:
EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC
这样用户SONIC的所有对象被输出到文件中。
3)、表模式:
EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC) 这样用户SONIC的表SONIC就被导出
2、IMP: 具有三种模式(完全、用户、表)
1)、完全:
IMP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y
2)、用户模式:
IMP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP FROMUSER=SONIC TOUSER=SONIC
这样用户SONIC的所有对象被导入到文件中。必须指定FROMUSER、TOUSER参数,这样才能导入数据。 3)、表模式:
EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC)
这样用户SONIC的表SONIC就被导入。
将一个用户所属的数据导入还有一个用户格式:
imp win/win file=c:\win.dmp fromuser=win touser=win
如果有的表已经存在,执行的话它就报错,对该表就不进行导入。那么在后面加上 ignore=y 就可以了。
在框架的数据库目录里面,我们一般附带有对应的Oracle备份文件(.dmp文件)这样,用户可以在开发使用Oracle的时候,可以直接还原数据库即可,不过如果要详细化做好各个数据库脚本,使用Oracle脚本处理也是一种很好的选择之一。