在較早期的隨筆《Oracle如何實現創建數據庫、備份數據庫及數據導出導入的一條龍操作》粗略介紹了Oracle數據庫的備份還原操作,本文想從開發框架的基礎上介紹Oracle數據庫的腳本或者還原操作。
我們在Winform開發框架、混合式開發框架、Web開發框架等各種開發框架,底層都是支持多種數據庫的,如MS SQLServer、Oracle、MySQL、SQLite、PostgreSQL等等,如下圖所示。
其中SQLServer支持最為常用,而且也是最為方便備份還原的操作,而Oracle數據庫這是次之,也是較為常用的數據庫,不過相對SQLServer來說,Oracle的數據庫處理起來並不是那麼方便,因此本文著重介紹一下,基於框架層面的數據庫,如何實現數據庫腳本的處理或者基於備份文件的還原操作。
如果使用數據庫腳本的方式,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裡面的另外一個地方進行執行數據庫腳本,如下所示。
在【 工具】【導入表】的操作裡面,彈出一個對話框,也是執行腳本高效的操作之一。
上面介紹的這些方式,就是在數據庫沒有的情況下,根據數據庫腳本構建對應的數據對象和數據的。
另外一個種還原已有備份文件或者備份已有數據庫的操作就是使用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腳本處理也是一種很好的選擇之一。