程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> [獨孤九劍]Oracle知識點梳理(三)導入、導出,oracle知識點

[獨孤九劍]Oracle知識點梳理(三)導入、導出,oracle知識點

編輯:Oracle教程

[獨孤九劍]Oracle知識點梳理(三)導入、導出,oracle知識點


本系列鏈接導航:

[獨孤九劍]Oracle知識點梳理(一)表空間、用戶

[獨孤九劍]Oracle知識點梳理(二)數據庫的連接

[獨孤九劍]Oracle知識點梳理(三)導入、導出

[獨孤九劍]Oracle知識點梳理(四)SQL語句之DML和DDL

[獨孤九劍]Oracle知識點梳理(五)數據庫常用對象之Table、View

[獨孤九劍]Oracle知識點梳理(六)數據庫常用對象之Procedure、function、Sequence

[獨孤九劍]Oracle知識點梳理(七)數據庫常用對象之Cursor

[獨孤九劍]Oracle知識點梳理(八)常見Exception 

[獨孤九劍]Oracle知識點梳理(九)數據庫常用對象之package

[獨孤九劍]Oracle知識點梳理(十)%type與%rowtype及常用函數

3、數據庫的導入導出(在命令提示符cmd下直接執行)

  Oracle 9i之前,使用imp/exp命令完成導入/導出操作。

3.1、數據導出

1   --將數據庫orcl完全導出到D盤指定目錄
2   exp userName/password@orcl file=d:\backup\userName01.dmp log=d:\backup\userName01.log full=y
3   --將 數據庫中userName用戶和userName2用戶的相關內容導出
4   exp userName/password@orcl file=d:\backup\userName01.dmp log=d:\backup\userName01.log owner=(userName,userName2) 
5   --將表t1和t2導出
6   exp userName/password@orcl file=d:\backup\userName01.dmp log=d:\backup\userName01.log tables=(t1,t2)
7   --將表t1中以00開頭的數據導出
8   exp userName/password@orcl file=d:\backup\userName01.dmp log=d:\backup\userName01.log tables=(t1) query=\" where field1 like '00%'\"

 3.2、數據導入

  導入的前提:數據庫中用於即將導入的數據的一致的表空間同名用戶見的導入: 

1  --將備份文件全部導入 
2  imp userName/password@orcl file=d:\backup\userName01.dmp log=d:\backup\userName01.log full=y 
3  --其中ignore=y表示忽略已存在的表,不加,遇到同名的表,對該表就不導入
4  imp userName/password@orcl file=d:\backup\userName01.dmp log=d:\backup\userName01.log full=y ignore=y
5  --將表t1 導入
6  imp userName/password@orcl file=d:\backup\userName01.dmp log=d:\backup\userName01.log tables=(t1)

   不同名用戶間的導入:

imp userName/password@orcl file=d:\backup\userName01.dmp 
  log=d:\backup\userName01.log
  fromuser=userNameA touser=userNameB --注意fromuser和touser

  Oracle 10i之後,Oracle推薦使用數據泵方式導入/導出數據【impdp/expdp】;使用數據泵方式,只能在服務器上進行導入/導出操作。

3.3、數據泵導出步驟:

a) 創建Directory

create directory dir_dp as 'D:\backup\dir_dp';

b) 授權

create read,write on directory dir_dp on userName;

b.1) 查看目錄及權限

select privilege,directory_name,directory_path 
  from user_tab_privs t,all_directories d     where t.table_name(+)=d.directory_name;

c) 執行導出

expdp userName/password@orcl schemas=userName 
  directory=dir_dp dmpfile=expdp_userName.dmp logfile=expdp_userName.log

注意:

  1、directory=dir_dp必須放在前面,如果將其放置最後,會提示 ORA-39002: 操作無效
    ORA-39070: 無法打開日志文件。
    ORA-39087: 目錄名 DATA_PUMP_DIR; 無效
  2、在導出過程中,DATA DUMP 創建並使用了一個名為SYS_EXPORT_SCHEMA_01的對象,此對象就是DATA DUMP導出過程中所用的JOB名字,如果在執行這個命令時如果沒有指定導出的JOB名字那麼就會產生一個默認的JOB名字,如果在導出過程中指定JOB名字就為以指定名字出現。
如下改成:

expdp userName/password@orcl schemas=userName 
  directory=dir_dp dumpfile =expdp_test1.dmp logfile=expdp_test1.log,job_name=my_job1;

  3、導出語句後面不要有分號,否則如上的導出語句中的job表名為‘my_job1;’,而不是my_job1。因此導致expdp userName/password attach=userName.my_job1執行該命令時一直提示找不到job表

  4、創建的目錄一定要在數據庫所在的機器上。否則也是提示:
    ORA-39002: 操作無效
    ORA-39070: 無法打開日志文件。
    ORA-39087: 目錄名 DATA_PUMP_DIR; 無效


數據泵導出的各種模式:

  • 按表模式導出:
expdp userName/password@orcl tables=userName.b$i_exch_info,userName.b$i_manhole_info 
  dumpfile =expdp_test2.dmp logfile=expdp_test2.log directory=dir_dp job_name=my_job
  • 按查詢條件導出:
expdp userName/password@orcl tables=userName.b$i_exch_info 
  dumpfile=expdp_test3.dmp logfile=expdp_test3.log directory=dir_dp job_name=my_job query='"where rownum<11"'
  • 按表空間導出:
Expdp userName/password@orcl dumpfile=expdp_tablespace.dmp 
  tablespaces=GCOMM.DBF logfile=expdp_tablespace.log directory=dir_dp job_name=my_job
  • 導出方案
Expdp userName/password DIRECTORY=dir_dp DUMPFILE=schema.dmp SCHEMAS=userName,gwm
  • 導出整個數據庫:
expdp userName/password@orcl dumpfile =full.dmp full=y logfile=full.log directory=dir_dp job_name=my_job

3.4、數據泵導入步驟:

准備:1.建庫2.建表空間3.建用戶並授權4.將aa.dmp拷貝到dpdump目錄下(如果不修改並指定備份文件目錄的話)

  • 按表導入(p_street_area.dmp文件中的表,此文件是以gwm用戶按schemas=gwm導出的:)
impdp gwm/gwm@fgisdb dumpfile =p_street_area.dmp logfile=imp_p_street_area.log directory=dir_dp tables=p_street_area job_name=my_job
  • 按用戶導入(可以將用戶信息直接導入,即如果用戶信息不存在的情況下也可以直接導入)
impdp gwm/gwm@fgisdb schemas=gwm dumpfile =expdp_test.dmp logfile=expdp_test.log directory=dir_dp job_name=my_job
  • 不通過expdp的步驟生成dmp文件而直接導入的方法:(從源數據庫中向目標數據庫導入表p_street_area)
impdp gwm/gwm directory=dir_dp NETWORK_LINK=igisdb tables=p_street_area logfile=p_street_area.log job_name=my_job
-- igisdb是目的數據庫與源數據的鏈接名,dir_dp是目的數據庫上的目錄
  • 更換表空間(采用remap_tablespace參數 ,--導出gwm用戶下的所有數據)
expdp system/orcl directory=data_pump_dir dumpfile=gwm.dmp SCHEMAS=gwm

注意:

  如果是用sys用戶導出的用戶數據,包括用戶創建、授權部分,用自身用戶導出則不含這些內容

--以下是將gwm用戶下的數據全部導入到表空間gcomm(原來為gmapdata表空間下)下
impdp system/orcl directory=data_pump_dir dumpfile=gwm.dmp remap_tablespace=gmapdata:gcomm

 3.5、不同版本數據庫間的數據導入/導出

3.5.1、Oracle 10g與Oracle 11g之間的導入導出

  • 導出
1 create directory dir_dp as 'D:\backup\dir_dp';
2 create read,write on directory dir_dp on userName;
3 expdp userName/password@orcl schemas=userName directory=dir_dp 
    dumpfile=expdp_userName.dmp logfile=expdp_userName.log version=10.2.0.1.0 --帶上版本號
  • 導入
impdp userName/password@orcl schemas=userName directory=dir_dp 
    dumpfile=expdp_userName.dmp logfile=expdp_userName.log version=10.2.0.1.0 --帶上版本號

3.5.2、其他方法

  用Notepad++或其它文本編輯工具軟件查看dmp文件,將頭部修改成你將導入目標數據庫的版本號
  以下對應的版本號: 11g R2:V11.02.00   11g R1:V11.01.00   10g:V10.02.01


  這樣,ORACLE10g就可以導入此文件了,當然也可能考驗人品。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved