天天看點

【導入導出】EXP-00079

當我們對一個啟用管理精細審計的表進行導出資料時,會出現如下錯誤:

exp-00079: 表 "purchaseorder" 中的資料是被保護的。正常路徑隻能導出部分表。

. . 正在導出表                   purchaseorder導出了         132 行

exp-00079:

使用者在沒有對dbms_rls(存取控制包)的執行權限時,進行了對需要存取控制的表的導出。因為表的所有者也受存取控制權限的限制,是以即使是表的所有者也不能導出整個表的所有行,而隻能導出他所能看到的行。另外,為保證表的一緻性,導出表的使用者必須擁有足夠的權限,以保證在導入時重建表及其安全政策。是以,強烈建議由資料庫管理者來處理導出表的操作。賦予表的所有者以執行權限将有利于這個安全檢查,當然這會引起其他安全沖突.....

一 解決方法

1 以dba的身份導出

c:\users\aaaa>exp '/ as sysdba' wner=oe file=oe.dmp log=oe.log

連接配接到: oracle database 11g enterprise edition release 11.1.0.6.0 - production

with the partitioning, olap, data mining and real application testing options

已導出 zhs16gbk 字元集和 al16utf16 nchar 字元集

即将導出指定的使用者...

. 正在導出 pre-schema 過程對象和操作

. 正在導出使用者 oe 的外部函數庫名

. 導出 public 類型同義詞

. 正在導出專用類型同義詞

. 正在導出使用者 oe 的對象類型定義

即将導出 oe 的對象...

. 正在導出資料庫連結

. 正在導出序号

. 正在導出簇定義

. 即将導出 oe 的表通過正常路徑...

. . 正在導出表                  categories_tab導出了          22 行

. . 正在導出表      product_ref_list_nestedtab導出了         288 行

. . 正在導出表  subcategory_ref_list_nestedtab導出了          21 行

. . 正在導出表                       customers導出了         319 行

. . 正在導出表                     inventories導出了        1112 行

. . 正在導出表                          orders導出了         105 行

. . 正在導出表                     order_items導出了         665 行

. . 正在導出表            product_descriptions導出了        8640 行

. . 正在導出表             product_information導出了         288 行

. . 正在導出表                      promotions導出了           2 行

. . 正在導出表                      warehouses導出了           9 行

.......

. 正在導出維

. 正在導出 post-schema 過程對象和操作

. 正在導出統計資訊

成功終止導出, 沒有出現警告。

================================================

c:\users\aaaa>exp system/yang wner=oe file=oe2.dmp log=oe2.log

. 正在導出同義詞

........

導出成功終止, 但出現警告。

2 使用system使用者,使用direct=y 參數 導出資料。但是oe使用者使用direct=y參數導出時依然報錯!

c:\users\aaaa>exp system/yang wner=oe file=oe3.dmp log=oe3.log direct=y

. 即将導出 oe 的表通過直接路徑...

表 categories_tab 将以正常路徑導出。

表 customers 将以正常路徑導出。

表 purchaseorder 将以正常路徑導出。

表 warehouses 将以正常路徑導出。

.........

c:\users\aaaa>exp oe/yang wner=oe file=oe4.dmp  log=oe4.log direct=y

exp-00080: 表 "purchaseorder" 中的資料是被保護的。請使用正常模式。

. 正在導出重新整理組和子組

3 賦予使用者exempt access policy 再次導出。當oe 使用者自己導出資料是依然報錯!

c:\users\aaaa>exp oe/yang wner=oe file=oe3.dmp  log=oe3.log

export: release 11.1.0.6.0 - production on 星期日 2月 20 21:08:14 2011

sys@oracl> grant exempt access policy to oe;

====================================

二 如何确定導出的資料是否完整

以dba身份執行如下查詢并對比導出日志中的行數,是否相等。

sys@oracl> select count(*) from oe.purchaseorder;

  count(*)

----------

       132

查詢某些表是否啟動了管理精細審計

sys@oracl> select enable,sel,object_owner||'.'||object_name "object_owner.name"

  2  from dba_policies where object_name='purchaseorder';

ena sel object_owner.name

--- --- -------------------------------------------------------------

yes no  oe.purchaseorder

yes yes oe.purchaseorder

sys@oracl> desc dba_policies