oracle数据导入与导出
說明:
針對的對象:? 數據的導入導出牽涉到的角色主要是工程實施人員。
需解決的問題:把所需要的數據從一個數據庫中導入到另外一個數據庫中。
1??? 工具方式
1.1???????? 工具說明
1.? 使用PLSQL Developer工具主要為了方便工程實施人員操作數據庫,如導入、導出數據庫對象。
2.??? 使用TOAD工具方便工程實施人員操作數據庫且導入、導出數據的效率比較高。
3.??? 使用以上兩種工具,實施人員無需在命令行下操作數據庫,方便而且不易出錯。
1.1.1????? 準備工作
1.? 工具軟件PLSQL Developer 、TOAD。
2.? 記錄數據源的oracle數據庫信息(IP、端口、全局數據庫名),記為SOURCE_DB;
3.? scheme(SOURCE_SCHM)、tablespace(默認表空間 SOURCE _SPACE,索引表空間 INDEX _SPACE );
4.? 用于數據導出的賬號(記錄為EXPUSR);
5.? 記錄數據目標的oracle數據庫信息(IP、端口、全局數據庫名),記為DEST_DB;
6.? scheme(DEST_SCHM)、tablespace(默認表空間 DEST_SPACE,索引表空間 DESINDEX _SPACE);
7.? 用于數據導入的賬號(記錄為IMPUSR)等信息。
8.? 記錄需要從數據源中導出的數據庫對象,記為DB_OBJECTS;
9.? 如果需要過濾導出數據,則要記錄過濾條件,記為DATA_FILTER。
?
1.2???????? 數據庫對象
1.2.1????? 導出數據庫對象
1.? 啟動PL/SQL Developer,以用戶 EXPUSR 登錄源Oracle數據庫SOURCE_DB;
2.? 從PL/SQL Developer菜單Tools中選擇Export User Objects;
3.? 導出數據庫對象
a、?在User的下拉框中選擇需要導出數據的<SOURCE_SCHM>。
b、選中屬性 Single file,include Owner, include Storage。
c、選擇需要導出的數據庫對象;
d、點擊Export按鈕則可以將數據庫對象導出,此時會生成一個以sql為擴展名的文件(記錄為EXPORT_FILE)。
1.1.1. 導入數據庫對象
1.? 修改Sql腳本
如果源數據的scheme和目標數據庫的scheme不一致,或者源數據庫的表空間和目標數據庫的表空間不一致,需修改導出的EXPORT_FILE。
create table <SOURCE_SCHM>.ACTION_INFO 修改為
create table <DEST_SCHM>.ACTION_INFO
tablespace <SOURCE _SPACE> (源默認表空間)?? --?? 改為目標默認表空間(<DEST_SPACE>)
pctfree 10?? ????????????????????????????
initrans 1??????????????????????????????????
maxtrans 255?????????????????????????????????
storage???????????????????????????????????????
(??????????????????????????????????????????????
initial 64K????????????????????????? ??????????
minextents 1??????????????????????????????????
maxextents unlimited??????????????????????????
);??????????????????????????????????????????????
create index AK_CDR_D_DETAIL on CDR_D_DETAIL (USER_NUMBER)
tablespace <INDEX _SPACE>(源索引表空間)? --à改為目標索引表空間(<DESINDEX _SPACE>)
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
? using index
?tablespace <INDEX _SPACE>(源索引表空間)? --à改為目標索引表空間(<DESINDEX _SPACE>)
? pctfree 10
? initrans 2
? maxtrans 255
? storage
? (
??? initial 64K
??? minextents 1
??? maxextents unlimited
? );
2.? 啟動PL/SQL Developer,以用戶 IMPUSR登錄目標Oracle數據庫DEST_DB;
3.? 從PL/SQL Developer菜單中選擇New下面的Command Window;
選擇Editor選項,將EXPORT_FILE文件內容拷貝到Editor選項框中
按F8即可將數據庫對象導入到DEST_SCHM中。
????????
1.3???????? 數據導入導出
使用TOAD工具進行數據導入導出。
1.3.1????? 導出數據
1.? 啟動TOAD,以EXPUSR登錄源數據庫SOURCE_DB;
2選擇菜單中的Database->Export->Data Pump Export Wizard選項
?
?
2.? 在Export選項中選擇Tables
?
3.??? 在下拉框中選擇源數據庫的Scheme:SOURCE_SCHM,并選擇需要導出的數據表。
4.? 如果數據需過濾,則此處填寫過濾條件DATA_FILTER。
?
5.? Content下拉框選擇Data Only選項。
6.? Directory中選擇所要導出數據的目錄,Output file name(.dmp)給導出的數據指定一個文件名記為DUMP_FILE。
7.? 按Finish即可將數據導出。
?
??????? 1.3.2????? 導入數據????????
8.? 以用戶 <IMPUSR>登錄目標Oracle數據庫DEST_DB;
9.? 選擇菜單中的Database->Import-> Data Pump Import Wizard選項
Import選項中選擇Entire dumpfile。
?
10.????? Source為導出源數據庫的<SOURCE_SCHM>,Target為導入目標數據庫的<DEST_SCHM>。
?
11.????? Content下拉框選項中選擇Data Only。
12.????? Directory:指定導入數據文件的路徑;Input file name為所要導入的數據文件DUMP_FILE。
13.????? 按Finish即可將數據導入。
?
?
?
1.4???????? 導入導出記錄
| SOURCE_DB | 源數據庫信息 |
| SOURCE_SCHM | 源數據要導出的用戶 |
| SOURCE _SPACE | 源默認表空間 |
| INDEX _SPACE | 源索引表空間 |
| EXPUSR | 數據導出的賬號 |
| DEST_DB | 目標數據庫信息 |
| DEST_SCHM | 目標數據導入的用戶 |
| DEST_SPACE | 目標默認表空間 |
| DESINDEX _SPACE | 目標索引表空間 |
| IMPUSR | 數據導入的賬號 |
| EXPORT_FILE | 導出的sql腳本 |
| DUMP_FILE | 導出的數據文件 |
| DB_OBJECTS | 導出的數據庫對象 |
| DATA_FILTER | 導出數據的過濾條件 |
?
2??? 命令行方式??????
2.1???????? 數據庫對象導入
1、打開數據對象腳本,檢查腳本是否正確。表空間是否匹配,索引是否建在正確的索引空間。
2、在命令行窗口輸入數據對象腳本:@文件路徑+文件名,例如:
@e:/biao/tables.sql
把數據對象腳本導入后,檢查是否正確。包括表,索引,存儲過程,視圖等。檢查對象個數是否匹配。?
2.2???????? 數據導出
使用expdp要先在數據庫中創建directory如在D盤下建立dumptestdir,并給相應的用戶read,write權限. 注意要以有權限的的用戶登陸;
SQL>create directory dumpdir as 'd:\dumptestdir';
SQL>grant read,write on directory dumpdir to HUNAN;
1)??????? 數據的導出方法
從數據庫中把表數據導出到目錄中:
>Expdp hunan/hunan@192.168.1.22 tables(action_info) dumpfile=dumptest.dmp directory=dumpdir logfile=dumptest.log connect=data_only
2.3???????? 數據導入
1)? 使用Impdp要先在數據庫中創建directory如在D盤下建立dumptestdir,并給相應的用戶read,write權限.并把要導入的文件拷貝在此目錄下,注意要以有權限的的用戶登陸;
2)? 把表數據導入到數據庫中(先由上述方法把表結構導入到數據庫中):
Impdp kuang/kzp4715712@192.168.1.44 dumpfile=”dumptestsj.dmp” directory=dumpdir remap_schema=hunan:kuang remap_tablespace=cdmadata:cdma content=data_only
?
常用一些參數說明:
DUMPFILE:導出后的文件名(*)
DIRECTORY:導出文件存放位置(位于服務器端)(*)
CONTENT:導出文件中包含的內容(默認為:ALL,可選DATA_ONLY/METADATA_ONLY)
FILESIZE:指定導出文件大小(單位為bytes).
JOB_NAME:此次導出進程使用的名稱,方便跟蹤查詢(可選)
LOGFILE:日志文件名(默認為:export.log)
INCLUDE:導出時包含指定的類型
(例:INCLUDE=TABLE_DATA,
INCLUDE=TABLE:"LIKE 'TAB%'"
INCLUDE=TABLE:”NOT LIKE ‘TAB%’”…)
EXCLUDE:導出時排除的數據類型(例:EXCLUDE=TABLE:EMP)
FULL:全庫導出時使用(同EXP的FULL,默認為N)
SCHEMA:導出某一個SCHEMA下的所有數據
TABLES:按表導出(這里的方法和EXP一樣)
TABLESPACE:指定一個表空間導出.
QUERY:按表導出時,使用條件語句限定導出范圍(同exp中的QUERY
?
?
3??? Oracle備份恢復
3???????? ?
3.1???????? 基于RMAN備份策略
1?? ?
2?? ?
3.1.1????? RMAN簡介
RMAN(Recovery Manager)是DBA的一個重要工具,用于備份、還原和恢復oracle數據庫,RMAN 可以用來備份和恢復數據庫文件、歸檔日志和控制文件,也可以用來執行完全或不完全的數據庫恢復。具有如下特點:
1)? RMAN操作相對簡單,很多工作自動完成
2)? RMAN 工具能以很多種方法備份 Oracle 數據庫,給備份和恢復方法提供了很大的靈活性
3)? 執行增量備份。RMAN 具有執行增量備份和完全備份的能力。增量備份僅備份從上次備份后修改了的內容,此方法允許你一周只有一天執行完全備份,而其它幾天都執行增量備份,這樣就提高了備份的性能
4)? 提供目錄信息列表。可以使用 RMAN的LIST和REPORT命令查詢存儲在catalog目錄中有關備份的信息,這些命令提供顯示信息的有效方法
5)? RMAN在進行聯機備份時,自動判斷block的一致性,不需要將數據文件處于備份狀態
6)? RMAN可以提供一些關鍵信息的報告
7)? 可以方便的檢查介質上保存的備份是否可用
3.2???????? 備份策略???
3.2.1????? 備份目標
保證目標數據庫安全,使數據庫的失效次數減到最少,從而使數據庫保持最大的可用性;
當數據庫不可避免地失效后,要使恢復時間減到最少,從而使恢復的效率達到最高;
當數據庫失效后,要確保盡量少的數據丟失或根本不丟失,從而使數據具有最大的可恢復性。
?
3.2.2????? 備份策略制定準備
1) 以什么方式備份:
用RMAN的增量備份(差量備份),采用多級備份是為了減少了恢復所需要的時間和減少每天備份所需要的時間,而又保證系統有很好的恢復性。
2) 備份的數據保存在什么地方:
備份的數據應該異地保存,這樣備份的安全才能有保證。
3) 備份時間安排:
由于備份時對系統I/O有較大影響,所以,建議在下班以后進行備份工作。
4) RMAN備份注意事項:
任何數據庫的更改需要重新同步CATALOG目錄或重新備份
3.2.3????? 具體的備份策略
1)??? 配置目標數據庫:
確定數據庫為歸檔模式
設置Flashback啟用為ON
設置數據庫啟動時使用spfile參數
2)??? 配置rman數據庫
3)??? 差異增量備份:每個月一次全備,周日一次零備,周一,二做二級備份,周三做一次一級的,周四,五,六再做二級備份。
rman> backup database;(數據庫全備)
rman> backup incremental level 0 database;(周日)
rman> backup incremental level 2 database; (周一)
rman> backup incremental level 2 database; (周二)
rman> backup incremental level 1 database; (周三)
rman> backup incremental level 2 database; (周四)
rman> backup incremental level 2 database; (周五)
rman> backup incremental level 2 database; (周六)
說明:全備是對整個數據庫的所有數據進行完整備份和0級備份的區別在0級可以有增量備份,全備則不可以。
0級備份是對整個數據庫的所有數據進行完整備份
????? 1級備份是只對0級備份以后修改過的數據進行備份
????? 2級備份只是對1級備份以后修改過的數據進行備份
注意:具體備份恢復步驟參見1.3??????????
3.3???????? 備份步驟
備份目標數據庫和RMAN數據庫準備工作:
(一)??? 目標數據庫
a)? 修改數據庫歸檔狀態,查看歸檔狀態:
SQL> archive log list;
如果數據庫未處于未歸檔模式下,則設置為歸檔模式
b)? 啟用 FLASHBACK DATABASE 事件記錄,這樣在不慎drop表時可以快速恢復。查看Flashback啟用狀態:
SQL> select dbid,name,flashback_on,current_scn from v$database;
如果沒有flashback on,則進行如下設置:
SQL> shutdown immediate
SQL> startup mount
SQL> alter database flashback on; ?
SQL> select dbid,name,flashback_on,current_scn from v$database;
SQL> alter database open;
c)? 數據庫啟動時使用spfile參數,這樣備份時spfile會和控制文件一起備份。
查看是否用spfile參數文件:
SQL> show parameter spfile
VALUE的值為空,數據庫是用pfile文件啟動的,如果有值,則為spfile啟動,如果沒有值,則進行如下設置:
創建spfile參數文件
SQL> create spfile from pfile
SQL> shutdown immediate
SQL> startup
SQL> show parameter spfile;
(二)??? 配置rman數據庫
創建RMAN目錄,以下步驟說明了在一個數據庫中建立RMAN目錄的過程。
a. 為目錄創建一個單獨的表空間
SQL>Create tablespace rmantablespace datafile ‘D:/rmantablespace.ora’ size 500m;
b.創建RMAN用戶
SQL>Create user RMAN identified by RMAN default tablespace rmantablespace temporary tablespace temp;
c.給RMAN授予權限
SQL>Grant connect , resource , recovery_catalog_owner to rman;
d.打開RMAN
$>RMAN
e.連接數據庫
RMAN>connect catalog rman/rman
f.創建恢復目錄
RMAN>Create catalog tablespace rmantablespace;
注冊目標數據庫,恢復目錄創建成功后,就可以注冊目標數據庫了,目標數據庫就是需要備份的數據庫,一個恢復目錄可以注冊多個目標數據庫,注冊目標數據庫的命令為:
$>RMAN target sys/kzp4715712@kuang
RMAN>connect catalog rman/rman
RMAN>Register database;
數據庫注冊完成,就可以用RMAN來進行備份了。
d)? 查看和修改RMAN備份配置
RMAN>show all;
查看RMAN默認備份參數,根據實際需求更改
RMAN>configure controlfile autobackup on;
配置參數指定進行任何備份時,都對控制文件和參數文件同時進行備份(默認OFF)
(三)??? 備份目標數據庫
a)? 對目標數據庫進行日志切換,以便生成最新的歸檔文件進行備份
rman>sql ‘alter system archive log current’;
b)? 全庫備份:
RMAN>backup database;
備份目標數據庫上所有的數據文件,控制文件與參數文件以及歸檔文件
c)? 查看目標數據庫的備份信息:
RMAN>list backup of database;
d)? 增量備份:
Rman> backup incremental level 0 database; (周日)
Rman> backup incremental level 2 database; (周一)
Rman> backup incremental level 2 database; (周二)
Rman> backup incremental level 1 database; (周三)
Rman> backup incremental level 2 database; (周四)
Rman> backup incremental level 2 database; (周五)
Rman> backup incremental level 2 database; (周六)
3.4???????? 恢復步驟
(一)??? 全庫恢復
a)? 連接目標服務器
>rman
RMAN> connect target sys/kzp4715712@orcl
b)? 連接RMAN服務器
RMAN>connect catalog rman/rman
c)? 假設目標服務器損壞
d)? 啟動目標服務器
RMAN>startup nomount;
RMAN>restore spfile from autobackup;修復參數文件
RMAN>restore controlfile from autobackup;修復控制文件
RMAN>restore database;修復數據文件
RMAN>alter database mount;啟動到MOUNT狀態
RMAN>recover database;進行修復
RMAN>alter database open resetlogs;重設日志文件打開數據庫
e)? 最后重建臨時表空間
(二)??? 基于時間的恢復
基于時間的恢復可以將數據庫恢復到過去某一個時間點,常用于在誤操作刪除數據后,將庫恢復到刪除時間之前,從而挽回丟失的數據。
RMAN> run{
sql 'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss" ';
set until time '2009-04-08:11:00:00';
restore database;
recover database;
alter database open resetlogs;
}
4??? 基于EMP/IMP備份策略(oracle10g已不支持)
Oracle導出/導入(Export/Import)數據庫備份方法:利用Export可將數據從數據庫中提取出來,利用Import則可將提取出來的數據送回到Oracle數據庫中去。?????
4.1???????? 簡單導出數據(Export)和導入數據(Import)
Oracle支持三種方式類型的輸出:
(一)??? 表方式(T方式),將指定表的數據導出。
(二)??? 用戶方式(U方式),將指定用戶的所有對象及數據導出。
(三)??? 全庫方式(Full方式),將數據庫中的所有對象導出。
數據導入(Import)的過程是數據導出(Export)的逆過程,分別將數據文件導入數據庫和將數據庫數據導出到數據文件。
4.2???????? 增量導出/導入
增量導出是一種常用的數據備份方法,它只能對整個數據庫來實施,并且必須作為SYSTEM來導出。在進行此種導出時,系統不要求回答任何問題。導出文件名缺省為export.dmp,如果不希望自己的輸出文件定名為export.dmp,必須在命令行中指出要用的文件名。
增量導出包括三種類型:
(一)??? “完全”增量導出(Complete)
即備份三個數據庫,比如:
exp system/kzp4715712 inctype=complete file=040731.dmp
(二)??? “增量型”增量導出
備份上一次備份后改變的數據,比如:
Exp system/kzp4715712 inctype=incremental file=040731.dmp
(三)??? “累積型”增量導出
累計型導出方式是導出自上次“完全”導出之后數據庫中變化了的信息。比如:
exp system/manager inctype=cumulative file=040731.dmp
數據庫管理員可以排定一個備份日程表,用數據導出的三個不同方式合理高效的完成。
比如數據庫的備份任務可以做如下安排:(括號中字母表示備份文件名)
星期一:完全備份(A)
星期二:增量導出(B)
星期三:增量導出(C)
星期四:增量導出(D)
星期五:累計導出(E)
星期六:增量導出(F)
星期日:增量導出(G)
如果在星期日,數據庫遭到意外破壞,數據庫管理員可按一下步驟來回復數據庫:
第一步:用命令CREATE DATABASE重新生成數據庫結構;
第二步:創建一個足夠大的附加回滾。
第三步:完全增量導入A:
imp system/manager inctype=RESTORE FULL=y FILE=A
第四步:累計增量導入E:
imp system/manager inctype=RESTORE FULL=Y FILE=E
第五步:最近增量導入F:
imp system/manager inctype=RESTORE FULL=Y FILE=F
?
?
?
總結
以上是生活随笔為你收集整理的oracle数据导入与导出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动手动脑 - 继承与多态
- 下一篇: 嵌入式开发技术汇总001+modbus