資料泵報錯ORA-39149

路途中的人2012發表於2017-09-25

在利用NETWORK_LINK方式匯出的時候,出現了這個錯誤。

 

 

詳細錯誤資訊如下:

bash-3.00$ expdp yangtk/yangtk directory=d_temp dumpfile=jiangsu.dp network_link=test113 logfile=jiangsu.log tables=cat_org

Export: Release 11.1.0.6.0 - 64bit Production on 星期二, 16 9, 2008 17:08:22

Copyright (c) 2003, 2007, Oracle.  All rights reserved.

連線到: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-31631:
需要許可權
ORA-39149:
無法將授權使用者連結到非授權使用者

檢查Oracle的錯誤手冊:

ORA-39149: cannot link privileged user to non-privileged user
Cause: A Data Pump job initiated be a user with EXPORT_FULL_DATABASE/IMPORT_FULL_DATABASE roles specified a network link that did not correspond to a user with equivalent roles on the remote database.
Action: Specify a network link that maps users to identically privileged users in the remote database.

錯誤描述的比較清楚,不過這個錯誤很難理解,難道一個許可權大的使用者不能透過資料庫鏈匯出一個許可權小的使用者。

當然,瞭解了這個錯誤的原因,其實問題很容易解決。在本地建立一個新使用者,不要授權EXP_FULL_DATABASE/IMP_FULL_DATABASE角色,就可以匯出:

bash-3.00$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.1.0.6.0 - Production on 星期二 9 16 16:53:48 2008

Copyright (c) 1982, 2007, Oracle.  All rights reserved.


連線到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> col grantee format a15
SQL> col granted_role format a15
SQL> select grantee, granted_role from dba_role_privs
  2  where grantee = 'YANGTK';

GRANTEE         GRANTED_ROLE
--------------- ---------------
YANGTK          CONNECT
YANGTK          RESOURCE
YANGTK          DBA

SQL> drop user test cascade;

使用者已刪除。

SQL> create user test identified by test
  2  default tablespace users
  3  quota unlimited on users;

使用者已建立。

SQL> grant connect to test;

授權成功。

SQL> grant create table, create database link to test;

授權成功。

SQL> grant read, write on directory d_temp to test;

授權成功。

SQL> conn test/test
已連線。
SQL> create database link test113 connect to jiangsu identified by jiangsu
  2  using '172.0.2.113/test';

資料庫連結已建立。

SQL> select * from global_name@test113;

GLOBAL_NAME
--------------------------------------------------------------------------------
TEST

SQL> exit
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
斷開

使用這個使用者就執行匯出了:

bash-3.00$ expdp yangtk/yangtk directory=d_temp dumpfile=jiangsu.dp network_link=test113 logfile=jiangsu.log tables=cat_org

Export: Release 11.1.0.6.0 - 64bit Production on 星期二, 16 9, 2008 17:08:22

Copyright (c) 2003, 2007, Oracle.  All rights reserved.

連線到: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-31631:
需要許可權
ORA-39149:
無法將授權使用者連結到非授權使用者

bash-3.00$ expdp test/test directory=d_temp dumpfile=jiangsu.dp network_link=test113 logfile=jiangsu.log tables=cat_org

Export: Release 11.1.0.6.0 - 64bit Production on 星期二, 16 9, 2008 17:09:10

Copyright (c) 2003, 2007, Oracle.  All rights reserved.

連線到: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
啟動 "TEST"."SYS_EXPORT_TABLE_01":  test/******** directory=d_temp dumpfile=jiangsu.dp network_link=test113 logfile=jiangsu.log tables=cat_org
正在使用 BLOCKS 方法進行估計...
處理物件型別 TABLE_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的總估計: 6 MB
處理物件型別 TABLE_EXPORT/TABLE/TABLE
處理物件型別 TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
處理物件型別 TABLE_EXPORT/TABLE/INDEX/INDEX
處理物件型別 TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
處理物件型別 TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
處理物件型別 TABLE_EXPORT/TABLE/COMMENT
處理物件型別 TABLE_EXPORT/TABLE/TRIGGER
處理物件型別 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. .
匯出了 "JIANGSU"."CAT_ORG"                         4.390 MB   31827
已成功載入/解除安裝了主表 "TEST"."SYS_EXPORT_TABLE_01"
******************************************************************************
TEST.SYS_EXPORT_TABLE_01
的轉儲檔案集為:
  /data/jiangsu.dp
作業 "TEST"."SYS_EXPORT_TABLE_01" 已於 17:09:57 成功完成

如果可以修改遠端的使用者,那麼更簡單,只需要給遠端使用者授權EXP_FULL_DATABASE角色就可以了:

-bash-3.00$ sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.3.0 - Production on Tue Sep 16 17:16:27 2008

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning and Data Mining options

SQL> select global_name from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
TEST

SQL> grant exp_full_database to jiangsu;

Grant succeeded.

下面再次使用yangtk執行匯出:

bash-3.00$ expdp yangtk/yangtk directory=d_temp dumpfile=jiangsu1.dp network_link=test113 logfile=jiangsu.log tables=cat_org

Export: Release 11.1.0.6.0 - 64bit Production on 星期二, 16 9, 2008 17:19:25

Copyright (c) 2003, 2007, Oracle.  All rights reserved.

連線到: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
啟動 "YANGTK"."SYS_EXPORT_TABLE_01":  yangtk/******** directory=d_temp dumpfile=jiangsu1.dp network_link=test113 logfile=jiangsu.log tables=cat_org
正在使用 BLOCKS 方法進行估計...
處理物件型別 TABLE_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的總估計: 6 MB
處理物件型別 TABLE_EXPORT/TABLE/TABLE
處理物件型別 TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
處理物件型別 TABLE_EXPORT/TABLE/INDEX/INDEX
處理物件型別 TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
處理物件型別 TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
處理物件型別 TABLE_EXPORT/TABLE/COMMENT
處理物件型別 TABLE_EXPORT/TABLE/TRIGGER
處理物件型別 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. .
匯出了 "JIANGSU"."CAT_ORG"                         4.390 MB   31827
已成功載入/解除安裝了主表 "YANGTK"."SYS_EXPORT_TABLE_01"
******************************************************************************
YANGTK.SYS_EXPORT_TABLE_01
的轉儲檔案集為:
  /data/jiangsu1.dp
作業 "YANGTK"."SYS_EXPORT_TABLE_01" 已於 17:19:45 成功完成

問題倒是很容易解決,只是不理解Oracle為什麼處理不了這麼簡單的問題。而且關鍵的是,Oracle似乎沒有把這個問題當作bug

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29067253/viewspace-2145420/,如需轉載,請註明出處,否則將追究法律責任。

相關文章