ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 使用DBMS_FILE_TRANSFER解决无权限读取dump文件问题

使用DBMS_FILE_TRANSFER解决无权限读取dump文件问题

原创 Linux操作系统 作者:redhouser 时间:2013-03-20 16:47:23 0 删除 编辑
经常碰到这样的问题,有权限使用expdp导出文件(owner为oracle,other无读权限),但没权限读取导出文件。
使用DBMS_FILE_TRANSFER包可以绕过该限制,测试如下:
1,导出文件无权限读取
[bnet@SHPAM013:/bnet/exp_data]$ uname -a
AIX SHPAM013 3 5 00F710654C00

[bnet@SHPAM013:/bnet/exp_data]$ ls -lrt *.dmp
-rw-r-----    1 oracle   dba        21667840 Dec 31 10:19 tmp_accounts_ef0109.dmp
2,使用COPY_FILE复制文件,权限不变,不能读取:
BEGIN
  DBMS_FILE_TRANSFER.COPY_FILE('DATA_PLATFORM_OVERSEA','tmp_accounts_ef0109.dmp', 'DATA_PLATFORM_OVERSEA',
                             'a.dmp');
END;
/
 
PL/SQL procedure successfully completed.

SQL> host ls -lrt *.dmp
-rw-r-----    1 oracle   dba        21667840 Dec 31 10:19 tmp_accounts_ef0109.dmp
-rw-r-----    1 oracle   dba        21667840 Jan 20 15:11 a.dmp

3,使用GET_FILE在本机复制文件,权限不变,不能读取:
create database link aaa
  connect to bnet303 IDENTIFIED BY bnet303
  using '(DESCRIPTION=
(LOAD_BALANCE=ON)
(ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))
    )
    (CONNECT_DATA=
      (SERVICE_NAME=orau10g)
    )
  )';
BEGIN
  DBMS_FILE_TRANSFER.GET_FILE('DATA_PLATFORM_OVERSEA','a.dmp', 'AAA','DATA_PLATFORM_OVERSEA',
                             'b.dmp');
END;
/

SQL> host ls -lrt *.dmp
-rw-r-----    1 oracle   dba        21667840 Dec 31 10:19 tmp_accounts_ef0109.dmp
-rw-r-----    1 oracle   dba        21667840 Jan 20 15:11 a.dmp
-rw-r-----    1 oracle   dba        21667840 Jan 20 16:24 b.dmp

4,使用GET_FILE把文件复制到有Oracle权限的数据库服务器上:
[oracle@bnet95 ~]$ uname -a
Linux bnet95 2.6.18-164.el5xen #1 SMP Thu Sep 3 04:47:32 EDT 2009 i686 i686 i386 GNU/Linux
4.1 复制
create database link aaa
  connect to bnet303 IDENTIFIED BY bnet303
  using '(DESCRIPTION=
(LOAD_BALANCE=ON)
(ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=TCP)(HOST=22.188.20.138)(PORT=1521))
    )
    (CONNECT_DATA=
      (SERVICE_NAME=orau10g)
    )
  )';

BEGIN
  DBMS_FILE_TRANSFER.GET_FILE('DATA_PLATFORM_OVERSEA','a.dmp', 'AAA','MYDIR',
                             'b.dmp');
END;
/
[oracle@bnet95 ~]$ ls -lrt b.dmp
-rw-r----- 1 oracle oinstall 21667840 Oct  9 16:33 b.dmp

4.2 导入
[oracle@bnet95 ~]$ impdp mh/mh directory=mydir dumpfile=b.dmp sqlfile=b.sql full=y
Import: Release 10.2.0.1.0 - Production on Monday, 09 October, 2028 16:35:50
Copyright (c) 2003, 2005, Oracle.  All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Master table "MH"."SYS_SQL_FILE_FULL_01" successfully loaded/unloaded
Starting "MH"."SYS_SQL_FILE_FULL_01":  mh/******** directory=mydir dumpfile=b.dmp sqlfile=b.sql full=y
Processing object type TABLE_EXPORT/TABLE/TABLE
Job "MH"."SYS_SQL_FILE_FULL_01" successfully completed at 16:36:01
[oracle@bnet95 ~]$ more b.sql
-- CONNECT MH
-- new object type path is: TABLE_EXPORT/TABLE/TABLE
CREATE TABLE "bnet303"."TMP_ACCOUNTS_EF0109"
   (    "ACTNUM" VARCHAR2(24)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "bnetOVS_TBS" ;
[oracle@bnet95 ~]$ impdp mh/mh  full=y directory=mydir dumpfile=b.dmp remap_schema=bnet303:MH remap_tablespace=bnetOVS_TBS:USERS
Import: Release 10.2.0.1.0 - Production on Monday, 09 October, 2028 16:39:59
Copyright (c) 2003, 2005, Oracle.  All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Master table "MH"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "MH"."SYS_IMPORT_FULL_01":  mh/******** full=y directory=mydir dumpfile=b.dmp remap_schema=bnet303:MH remap_tablespace=bnetOVS_TBS:USERS
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "MH"."TMP_ACCOUNTS_EF0109"                  20.60 MB 1269546 rows
Job "MH"."SYS_IMPORT_FULL_01" successfully completed at 16:40:08

4.3 导入数据验证
SQL> select count(*) from TMP_ACCOUNTS_EF0109;
  COUNT(*)
----------
   1269546

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/18922393/viewspace-756658/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-05-26

  • 博文量
    211
  • 访问量
    876668