使用impdp實現資料在不同使用者、不同例項之間快速複製
宣告:本文是參考secooler的《同一資料庫例項不同使用者間資料遷移複製——NETWORK_LINK引數》(http://space.itpub.net/519536/viewspace-631571)而成,特此感謝!
在實際開發和運維中,我們經常遇到這樣的需求:把一個schema、一個tablespace或者某些資料表的結構和內容轉移到另一個資料schema、tablespace或者另一個例項上。
實現這種需求的方法有很多。比較常用的就是使用exp/expdp工具將指定資料來源的資料匯出,成.dmp格式檔案。之後指向目標資料來源,利用imp/impdp工具匯入。本文介紹一種方式,使用impdp工具的network_link引數,實現資料在同例項或者異例項之間的靈活的快速複製。
Exp/imp工具是Oracle早期(Oracle Release 5)推出的一種資料匯出匯入工具,因其簡單實用的優點,一直具有很強的生命力。但是隨著海量資料時代的到來,以及Oracle新特性的不斷引入,exp/imp工具的不適應性逐漸顯現。於是,Oracle10g中,推出了了資料泵(Data Dump)expdp/impdp元件,作為新一代資料管理元件。
總的來說,資料泵Data Dump元件具有如下的特點:
ü 相對於前一代的exp/imp工具,Data Dump具有更好的效能和可管理特性;
ü Data Dump是一個服務端工具,而不是在Oracle客戶端;
ü 具有匯入匯出作業中斷/重新開始的控制功能;
ü 支援網路network工作模式;
ü 可以在作業中斷後重新啟動;
ü 操作物件範圍更加靈活;
ü 提供了多種方式呼叫的API組織;
回到本文要實現的任務,首先我們進行環境準備和檢視。當前系統為Oracle 11gR2環境。
//建立一個實驗Tablespace
SQL> create tablespace test datafile '/u01/oradata/WILSON/datafile/test.dbf' size 100m extent management local
2 uniform. size 1m;
Tablespace created
SQL> select * from v$tablespace;
TS# NAME INCLUDED_IN_DATABASE_BACKUP
------------------------------ --------------------------- ------- ------------ -----------------
0 SYSTEM YES
1 SYSAUX YES
2 UNDOTBS1 YES
4 USERS YES
10 TEST YES
(篇幅原因,有省略…)
10 rows selected
建立物件test。
SQL> create user Test identified by test default tablespace TEST temporary tablespace TEMP;
User created
SQL> grant connect to test;
Grant succeeded
SQL> grant resource to test;
Grant succeeded
任務詳細描述:將schema scott下的所有物件包括資料,複製給test使用者schema。同時,將這些物件對應的表空間從原來的users,變換為表空間test。
實現這個任務目標,需要按照兩個步驟:
1、為了使用impdp工具的network_link引數,要建立指向資料來源的Database Link物件;
2、使用impdp工具的命令列等模式進行操作;
下面,我們根據步驟來進行:
建立Database Link
對Oracle Database Link的介紹,請參考《分散式資料庫元件——Database Link》)(http://space.itpub.net/17203031/viewspace-687469)中相應的介紹。這裡強調一個重點就是,建立Database Link時,using子句後面的命名連線名稱,是要求在資料庫伺服器上的tnsname.ora檔案中建立。而不是在使用者客戶端機器上建立的命名。
首先,構建本地服務名,手工改寫tnsname.ora。
[oracle@oracle11g admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/oracle/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
WILSON =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle11g)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = wilson)
)
)
本例項是從wilson導向到wilson,所以指向自身就可以了。如果是向不同例項資料庫進行匯入,就需要在目標例項上進行建立databaselink的操作。此處的本地服務命名就是指向源資料庫命名。
下面就是建立Database Link。
//資料庫連線Database Link建立語句
create public database link TO_SELF
connect to system identified by system
using 'wilson';
含義:建立一個Database Link,連線到本地命名服務名為“wilson”的資料庫例項上,使用system使用者登入,密碼為system。
測試Database Link的情況。
//使用To_Self名稱連線
SQL> select count(*) from dba_objects@to_self;
COUNT(*)
----------
72470
進行命令列匯入
匯入操作之前,我們先觀察一下scott下資料物件的情況。
SQL> select table_name, tablespace_name from dba_tables where wner='SCOTT';
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
DEPT USERS
EMP USERS
SALGRADE USERS
T2 USERS
T1 USERS
BONUS USERS
6 rows selected
SQL> select index_name, tablespace_name from dba_indexes where wner='SCOTT';
INDEX_NAME TABLESPACE_NAME
------------------------------ ------------------------------
PK_DEPT USERS
PK_EMP USERS
此時,我們有兩個問題需要解決,首先是如何將scott使用者的資料錶轉變為test使用者,另一個是如何將users表空間變換為test表空間。
此處我們介紹impdp工具的兩個引數:remap_schema和remap_tablespace。這兩個引數分別實現將特定Schema、特定表空間的轉換對映。利用這兩個引數,可以定義轉換規則。
下面開始進行匯入:
[oracle@oracle11g admin]$ impdp system/system network_link=to_self schemas=scott remap_schema=scott:test remap_tablespace=users:test
Import: Release 11.2.0.1.0 - Production on Thu May 5 07:51:00 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
UDI-28002: operation generated ORACLE error 28002
ORA-28002: the password will expire within 7 days
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_IMPORT_SCHEMA_01": system/******** network_link=to_self schemas=scott remap_schema=scott:test remap_tablespace=users:test
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 192 KB
Processing object type SCHEMA_EXPORT/USER
ORA-31684: Object type USER:"TEST" already exists
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
. . imported "TEST"."DEPT" 4 rows
. . imported "TEST"."EMP" 14 rows
. . imported "TEST"."SALGRADE" 5 rows
. . imported "TEST"."BONUS" 0 rows
. . imported "TEST"."T1" 0 rows
. . imported "TEST"."T2" 0 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/VIEW/VIEW
ORA-39082: Object type VIEW:"TEST"."V_T1" created with compilation warnings
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYSTEM"."SYS_IMPORT_SCHEMA_01" completed with 2 error(s) at 07:52:18
這樣,我們就實現了匯入。Impdp引數中,首先需要輸入指定的使用者名稱和密碼,之後表示將scott schema下的資料庫物件,透過Network_link:To_Self匯入到目標資料庫例項上。在schema方面,如果是scott的物件,全部轉化為test使用者。在tablespace方面,如果是users表空間的物件,全部轉化到test表空間。
下面我們觀察下實驗結果:
SQL> select table_name, tablespace_name from dba_tables where wner='TEST';
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
DEPT TEST
EMP TEST
SALGRADE TEST
T2 TEST
T1 TEST
BONUS TEST
6 rows selected
SQL> select index_name, tablespace_name from dba_indexes where wner='TEST';
INDEX_NAME TABLESPACE_NAME
------------------------------ ------------------------------
PK_DEPT TEST
PK_EMP TEST
匯入成功。
這種方法的優勢很多,特別是在進行同例項資料物件複製方面,network_link可以幫助我們提高工作效率。
ü 直接使用impdp進行匯入。避免了使用dmp檔案的過渡過程;
ü 藉助impdp新一代工具,可以更有效的提高複製速度;
ü 定製靈活的匯入對映規則,滿足更多個性化的複製需求;
對新工具、新特性的勇於嘗試,可以讓我們的生活變得更輕鬆。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-694740/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【IMPDP】不同資料庫例項不同使用者間資料遷移複製——NETWORK_LINK引數資料庫
- 【IMPDP】同一資料庫例項不同使用者間資料遷移複製——NETWORK_LINK引數資料庫
- 使用impdp命令在不同例項間透過dblink同步資料庫資料庫
- 在不同機器之間使用rman複製資料庫例項,從非asm到asm資料庫ASM
- 【IMPDP】實現不同使用者之間的資料遷移——REMAP_SCHEMA引數REM
- 使用dbms_schema_copy 進行不同使用者間資料複製
- MongoDB在不同主機間複製資料庫和集合MongoDB資料庫
- 使用EXPDP IMPDP傳輸不同資料庫的不同表空間(新增網路傳輸)資料庫
- 使用物化檢視實現在不同字符集的資料庫之間的資料同步資料庫
- 不同使用者,不同表空間遷移
- 透過REMAP_SCHEMA引數來實現不同使用者之間的資料遷移REM
- postman(五):在不同介面之間傳遞資料Postman
- 如實實現不同資料庫之間的 (模型) Eloquent: 關聯資料庫模型
- 使用RMAN複製活動資料庫(檔案路徑不同)資料庫
- 不同使用者,不同的session超時時間Session
- 利用TRANSPORT_TABLESPACE特性在同一db下不同使用者之間遷移資料!
- 同一資料間複製使用者
- 實現不同程式之間的通訊
- 在 ASP.NET 中實現不同角色的使用者使用不同登入介面的方法ASP.NET
- 不同Oracle資料庫之間的資料同步Oracle資料庫
- 同/不同庫遷移資料(在同使用者及表空間)測試
- Spring Boot應用中如何動態指定資料庫,實現不同使用者不同資料庫的場景Spring Boot資料庫
- 不同表結構或者不同資料型別之間的集合操作資料型別
- 不同使用者登陸模組的實現
- 同例項下不同使用者之前的表級遷移
- 多級複製的資料不同步問題
- 使用RMAN在ASM和檔案系統之間複製資料ASM
- 不同使用者訪問資料--current schema
- Oracle - 資料庫的例項、表空間、使用者、表之間關係Oracle資料庫
- 在不同字符集的資料庫之間匯入資料的方法(轉)資料庫
- SqlServer同例項複製資料庫方法SQLServer資料庫
- 關於在不同版本和平臺之間進行還原或複製的常見問題
- 克隆資料庫之使用者管理複製(三)資料庫
- 克隆資料庫之使用者管理複製(二)資料庫
- 克隆資料庫之使用者管理複製(一)資料庫
- 教你如何運用python實現不同資料庫間資料同步功能Python資料庫
- 在Oracle中實現資料庫的複製Oracle資料庫
- 使用過載方法實現不同型別資料的計…型別