dblink를 통해expdp를 사용하면 9i 라이브러리의 데이터를 내보낼 수 있습니까?

9183 단어 oracleexpdpDBlink
expdp/impdp는 10g에서 내놓은 가져오기 내보내기 도구입니다. 9i에는 이 도구가 없습니다. 어떤 사람이 10g의expdp를 사용하여dblink를 통해 9i의 데이터를 내보내자고 제안했습니다. 언뜻 들으면 그럴 것 같지만 과연 될지 시험해 봅시다.
1. 10g/11g 서버에 로그인하고 9i 라이브러리 TEST에 연결된 링크 tlink를 먼저 만듭니다.
SQL> create database link tlink connect to test identified by test using 'TEST';

Database link created.

2. expdp에서 내보낸 구성 파일을 편집합니다.
userid=user/pwd			- expdp          
directory=expdp_dir		- directory  
dumpfile=testtkt.dump
logfile=testtkt.log
tables=test.t_r			-     9i  t_r
network_link=tlink		-     9i dblink

3. expdp를 실행합니다.
[oracle11g@Node1 expdp_dir]$ expdp parfile=tlink.par

Export: Release 11.2.0.1.0 - Production on Mon May 18 13:35:57 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-39006: internal error
ORA-39065: unexpected master process exception in DISPATCH
ORA-00904: "SYS"."KUPM$MCP"."GET_ENDIANNESS": invalid identifier

ORA-39097: Data Pump job encountered unexpected error -904
일련의 ORA 오류를 표시합니다.
expdp는exp와 같지 않다. 그는 내보내기를 Oracle 내부의job 작업으로 바꾸었다. 한 가지 증명할 수 있듯이 exp를 사용하여 내보낼 때 ctrl+c로 중단한다. 이때 내보내는 과정이 전체적으로 중단된다. 만약에expdp를 사용하여 내보낼 때 ctrl+c로 중단하면 내보내는 과정이 중단되지 않는다. 이것은 이미 Oracle로 전환된 작업이기 때문에 클라이언트와 무관하고 상호작용 모드를 종료한 후에export의 명령행 모드에 들어갑니다. status, start,stop 등 명령을 사용할 수 있습니다.
위의 오보를 보면 ORA-00904: "SYS"를 볼 수 있습니다."KUPM$MCP".GET ENDIANNESS: invalid identifier, 904에 대한 오류 설명:
[oracle11g@Node1 expdp_dir]$ oerr ora 904
00904, 00000, "%s: invalid identifier"
// *Cause:
// *Action:
설명은 대응하는 표지부를 찾을 수 없습니다. SYS를 다시 보십시오.KUPM$MCP는 대략 다음과 같습니다.
SQL> desc sys.KUPM$MCP;
PROCEDURE CLOSE_JOB
FUNCTION DISPATCH RETURNS KUPC$_MESSAGE
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 REQUEST                        KUPC$_MESSAGE           IN
PROCEDURE FILE_LOG_MESSAGE
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 ERRCODE                        NUMBER                  IN
 PARAMETER1                     VARCHAR2                IN     DEFAULT
 PARAMETER2                     VARCHAR2                IN     DEFAULT
 PARAMETER3                     VARCHAR2                IN     DEFAULT
 PARAMETER4                     VARCHAR2                IN     DEFAULT
 PARAMETER5                     VARCHAR2                IN     DEFAULT
 PARAMETER6                     VARCHAR2                IN     DEFAULT
 PARAMETER7                     VARCHAR2                IN     DEFAULT
 PARAMETER8                     VARCHAR2                IN     DEFAULT
PROCEDURE FILE_TO_WORKER
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 MESSAGE                        KUPC$_MESSAGE           IN
FUNCTION GET_ENDIANNESS RETURNS NUMBER
PROCEDURE MAIN
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 JOB_NAME                       VARCHAR2                IN
 JOB_OWNER                      VARCHAR2                IN
 RESTART_JOB                    BINARY_INTEGER          IN
 DEBUG_INFO                     BINARY_INTEGER          IN
PROCEDURE MAINLOOP
PROCEDURE SET_DEBUG
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 DEBUG_FLAGS                    BINARY_INTEGER          IN
FUNCTION VALIDATE_EXPRESSION RETURNS NUMBER
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 EXPR_VALUE                     VARCHAR2                IN
사실 그는 몇 가지 함수를 포함하고 있는데,
GET_ENDIANNESS는 그중의 하나이다. (이름상으로는 '대소단 정보' 를 얻은 것 같다.) 분명히 대응하는 함수를 찾지 못했고, 이 함수에 대한 설명을 어디서 본 적이 있는지 잊어버렸다.
(어떤 분이 기억하신다면 답장할 수 있습니다) 그는 9i에 존재하지 않습니다.expdp 내보내기 과정은 이 함수를 호출해야 한다는 것을 증명할 수 있지만 이 함수는 9i에 정의가 없기 때문에 9i에서expdp를 사용할 수 없습니다.
4.dblink에서 10g 이상 버전의 라이브러리 내보내기
SQL> create database link ldplink connect to puser identified by puser_pwd using 'link_10g';

Database link created.

5. expdp 프로필을 편집하려면 다음과 같이 하십시오.
[oracle11g@Node1 expdp_dir]$ vi link_10g.par

userid=user/pwd
directory=expdp_dirdumpfile=link_10g.dumplogfile=link_10g.logtables=puser.l_rnetwork_link=link_10g
6.expdp를 실행합니다.
[oracle11g@Node1 expdp_dir]$ expdp parfile=link_10g.par 

Export: Release 11.2.0.1.0 - Production on Mon May 18 13:40:45 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-31631: privileges are required
ORA-39149: cannot link privileged user to non-privileged user

이번에는 ORA-31631과 ORA-39149 두 가지 오류를 제시했다.
[oracle11g@Node1 expdp_dir]$ oerr ora 31631
31631, 00000, "privileges are required" 
// *Cause:  The necessary privileges are not available for operations such
//          as: restarting a job on behalf of another owner, using a device
//          as a member of the dump file set, or ommiting a directory
//          object associated with any of the various output files.  
//          Refer to any following error messages for additional information.
// *Action: Select a different job to restart, try a different operation, or
//          contact a database administrator to acquire the needed privileges.

힌트는 권한이 없습니다.
[oracle11g@Node1 expdp_dir]$ oerr ora 39149
39149, 00000, "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.
이 오류 알림은 더욱 명확하고 dblink를 사용하며 EXPORT 가 있음을 알립니다FULL_DATABASE/IMPORT_FULL_DATABASE 역할의 실행 사용자로서 원격 사용자에 대한 역할 권한이 없습니다.간단히 말하면expdp를 사용하는 데이터베이스 사용자user는 DBA 권한이 있기 때문에
EXPORT_FULL_DATABASE/IMPORT_FULL_DATABASE 역할 권한이 있지만 원격 데이터베이스 사용자puser는 일반 사용자일 뿐 이 권한이 없기 때문에 이 알림 오류가 있습니다.
솔루션 1:
원격 라이브러리의 설정:
SQL> grant exp_full_database to puser;

Grant succeeded.
expdp를 다시 실행합니다.
[oracle11g@Node1 expdp_dir]$ expdp parfile=link_10g.par 

Export: Release 11.2.0.1.0 - Production on Mon May 18 13:51:37 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "USER"."SYS_EXPORT_TABLE_01":  user/******** parfile=link_10g.par 
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "PUSER"."L_R"                          20.49 KB      28 rows
Master table "BISAL"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for USER.SYS_EXPORT_TABLE_01 is:
  /home/oracle11g/expdp_dir/link_10g.dump
Job "USER"."SYS_EXPORT_TABLE_01" successfully completed at 13:51:56

솔루션 2:
양장로의 이 박문( )http://blog.itpub.net/4227/viewspace-448665/)를 참조하십시오.이 질문에는 EXPORT 을 부여하지 않고 새 로컬 사용자를 만드는 방법도 있습니다.FULL_DATABASE/IMPORT_FULL_DATABASE 역할
요약:
1.9i는expdp를 지원하지 않습니다. 10g의expdp에서dblink를 사용하여 9i까지 연결해도 안 됩니다. 상기 실험에서 보듯이 일부expdp가 사용하는 함수는 9i에서 정의되지 않았습니다.
2. dblink 방식의expdp 내보내기를 사용하십시오. 로컬 사용자가 EXPORT 가 없거나FULL_DATABASE/IMPORT_FULL_DATABASE 역할, 또는 로컬 사용자에게 두 역할이 있는 경우 원격 사용자에게 EXPORTFULL_DATABASE 역할, 그렇지 않으면 ORA-31631과 ORA-39149 두 가지 오류가 표시됩니다.

좋은 웹페이지 즐겨찾기