oracle dblink用法總結和expdp和impdp利用dblink倒入匯出到本地
oracle中的database link是定義一個資料庫到另一個資料庫的路徑的物件,database link允許你查詢遠端表和執行遠端程式。在任何分散式環境裡,dblink都是必要的,另外注意database link是單向的連線。在建立database link的時候,oracle在資料字典中儲存了相關的database link的資訊,在使用database link的時候,oracle再透過oracle net使用者預先定義好的連線資訊訪問相應的遠端資料庫來完成相應的工作。
1、在建立database link之前需要注意:
(1)確認從local database到remote database的網路連線是否正常,tnsping要能成功。
(2)確認在remote database上面有相應的訪問許可權。
2、oracle database link可分為下面三類:
(1)private:建立的是使用者級別的dblink,只有建立該dblink的使用者才可以使用這個dblink來訪問遠端的資料庫,同時也只有該使用者可以刪除這個dblink。
(2)public:建立的是資料庫級別的dblink,本地資料庫中所有的使用者資料庫訪問許可權的使用者或者pl/sql程式都能使用這個dblink。
(3)global:建立的是網路級別的dblink,這是對於oracle network而言的。
3、建立dblink需要的許可權:
如果你新建了一個使用者,那麼你必須為它授予以下許可權才可以建立dblink:create database link、create public database link、create session。
4、建立dblink:
點選(此處)摺疊或開啟
-
-- 如果不指定public,預設的是private,host後面可以是ip地址,也可以是解析過的域名
-
CREATE PUBLIC DATABASE LINK dl_OCPLYZ1 CONNECT TO lyz IDENTIFIED BY lyz
-
USING '(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.95.155)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = OCPLYZ1)
)
)';
或者我們可以這樣寫:
create public database link dl_OCPLYZ1 connect to lyz identified by lyz using 'OCPLYZ1';
但是要再 tnsnames.ora 檔案上加上這個:OCPLYZ1 ,這個格式最好要和上面的對應規整點。。。。否則有可能認不到。。
然後上面的 using 'OCPLYZ1' 這邊就要和tnsnames.ora 名字一樣了
5、檢視dblink:
檢視dblink,可以從dba_objects、dba_db_links這兩張表去查:
點選(此處)摺疊或開啟
-
SELECT * FROM dba_objects do WHERE do.OBJECT_TYPE = 'DATABASE LINK';
- SELECT * FROM dba_db_links ddl;
除了上面兩張表,還有all_db_links、user_db_links。
6、使用dblink:
點選(此處)摺疊或開啟
-
-- 最簡單的用法
-
SELECT * FROM table_name@database_link;
-
-- 不想讓別人知道database link名字的時候,可以使用同義詞包裝一下
-
CREATE SYNONYM table_name for table_name@database_link;
-
SELECT * FROM table_name;
-
-- 也可以建立一個檢視來封裝
- CREATE VIEW table_name_v AS SELECT * FROM table_name@database_link;
點選(此處)摺疊或開啟
-
-- 刪除public型別的dblink
-
DROP PUBLIC DATABASE LINK dblink_name;
-
-- 刪除private型別的dblink,只有建立者自己能刪
- DROP DATABASE LINK dblink_name;
如果我們要使用expdp ,然後要像實現exp一樣,把這個dmp檔案,給它倒到本地,那麼我們應該怎麼實現呢。。。。。。?
我們可以用連線 dblink的方法來匯出:也就是說我們要用到兩個庫:
例子:我們可以從遠端資料庫倒入到本地資料庫。。。。
1 我們首先要在本地資料庫建立一個dblink
連線到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
再本地資料庫建立一個dblink :
SQL> create public database link dl_OCPLYZ1 connect to lyz identified by lyz us
ing 'OCPLYZ1';
資料庫連結已建立。
SQL>
'OCPLYZ1' 這邊的 OCPLYZ1我已經再 tnsnames.ora 那邊配好了:
我們可以簡單的遠端檢查下資料庫能不能通:查得到說明建立成功
點選(此處)摺疊或開啟
-
SQL> select count(1) from lyz.EMPLOYEES2@dl_OCPLYZ1;
-
-
COUNT(1)
-
----------
-
4
- SQL>
我們可以在 client 端或目標資料庫執行。。。。
我們這邊是直接在本地執行:
我們可以先查下本地ip 是多少:ipconfig:查得ip 172.17.146.3 ,但由於本地資料庫是直接安裝再win 7電腦上的,所以我本地就是目標資料庫啦。。。。
倒出命令如下:這邊說明下:這邊的倒出是基於 表的倒出。。。。。
點選(此處)摺疊或開啟
- expdp scott/tiger@172.17.146.3/orcl directory=DATA_PUMP_DIR dumpfile=exptable.dmp TABLES=lyz.TESTA network_link=dl_OCPLYZ1 LOGFILE=expdp_table.log;
這邊的 expdp 倒出一定是要本地的資料庫,也就是目標資料庫的使用者 和服務名
- expdp scott/tiger@172.17.146.3/orcl
- network_link=dl_OCPLYZ1
- TABLES=lyz.TESTA
也就是說,如果不加 使用者來源:lyz.testa 表,資料庫應該是預設成你這個
- TABLES=TESTA
當然如果你目標庫(本地資料庫)有這個lyz 這個使用者,我們也可以這樣寫:
點選(此處)摺疊或開啟
- expdp lyz/lyz@172.17.146.3/orcl directory=DATA_PUMP_DIR dumpfile=exptable.dmp TABLES=TESTA network_link=dl_OCPLYZ1 LOGFILE=expdp_table.log;
然後我們可以到本地看下結果: 這個 exptable.dmp 檔案就是從 遠端資料庫倒下來的資料來。。。。。
然後我們再倒入到庫就可以 了:這邊要倒入的資料庫為:oracl
由於上面的是基於表的匯出,我們可以用下面這個命令:
impdp scott/tiger@orcl DIRECTORY=DATA_PUMP_DIR DUMPFILE=exptable.dmp TABLES=lyz.TESTA REMAP_SCHEMA=lyz:scott table_exists_action=REPLACE
這邊的意思是:impdp 倒入到 oracl庫下的使用者,倒入的路徑為DATA_PUMP_DIR,倒入的dmp 檔案為:exptable.dmp ,倒入的表為:TABLES=lyz.TESTA ,REMAP_SCHEMA=lyz:scott : 這邊的意思是 從 lyz使用者到scott使用者,table_exists_action=REPLACE : 這邊的意思是:如果表存在,就直接替換掉。
或者是基於使用者的倒入:去掉這個TABLES=lyz.TESTA,但是也是 lyz 使用者到 scott使用者
impdp scott/tiger@orcl DIRECTORY=DATA_PUMP_DIR DUMPFILE=exptable.dmp REMAP_SCHEMA=lyz:scott table_exists_action=REPLACE
好了,這個就是 利用 db_link 的expdp 、impdp的匯出匯入。。。。。。。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-2156821/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 12c expdp和impdp匯出匯入表Oracle
- impdp和expdp用法及引數介紹
- Oracle資料泵匯出匯入(expdp/impdp)Oracle
- ORACLE EXPDP IMPDP 的停止和啟動及監控Oracle
- Oracle dblink監聽問題Oracle
- Oracle19c dblink連結mysql8.0OracleMySql
- Oracle使用資料泵expdp,impdp進行資料匯出匯入Oracle
- 配置Oracle DBlink連線MySQL庫OracleMySql
- 【DBLINK】DBLINK域名問題及與global_name和db_domian的關係
- 建立dblink
- oracle資料庫的impdp,expdpOracle資料庫
- 通過dblink,資料泵expdp遠端跨版本導庫
- Oracle DBLink中CLOB報錯ORA-22992Oracle
- 達夢7異構(DM-Oracle) DBLINKOracle
- dblink的關聯與本地關聯差異
- PostgreSQL DBA(58) - DBLinkSQL
- 不能刪除DBLINK
- oracle10g expdp資料泵的bug,按schema匯出,匯入impdp時無jobOracle
- Oracle DBLink bug引發的故障(Session Hang Memory leak)OracleSession
- dblink建立語句模板
- 資料泵datapump(expdp/impdp)的parfile用法,避免跳脫字元字元
- SQL Server建立dblink至MySQLServerMySql
- Oracle DBLink連線數過多的問題(Ora-02020)Oracle
- Oracle建立dblink報錯:ORA-01017、ORA-02063解決Oracle
- Oracle資料庫連結(DBLink)中如何訪問包含BLOB欄位的資料Oracle資料庫
- Oracle 12.1.0.2 impdp匯入慢診斷Oracle
- dblink涉及的表的賦權
- MySQL下的DBlink--FEDERATED引擎MySql
- 【等待事件】SQL*Net message from dblink事件SQL
- ORACLE dblink遠端DB表truncat導致本地proc執行報錯ORA-12012&ORA-06550&PLS-00907Oracle
- [20200620]expdp impdp exclude引數.txt
- expdp/impdp變慢 (Doc ID 2469587.1)
- 【Data Pump】expdp/impdp Job基本管理
- 【YashanDB知識庫】oracle dblink varchar型別查詢報錯記錄Oracle型別
- 配置ORACLE資料庫到達夢資料庫的異構DBLINKOracle資料庫
- [Oracle-> MySQL] Oracle通過dblink連線MySQL--Oracle 19c連線到MySQL 5.7OracleMySql
- 【等待事件】SQL*Net more data from dblink事件SQL
- Oracle expdp資料泵遠端匯出Oracle