dblink를 통해expdp를 사용하면 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 두 가지 오류가 표시됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Control Version de una base de datos OraclePodemos는 Flyway y Liquibase의 새로운 기반 버전을 제어할 수 있는 프로젝트를 제안합니다. Dada la integración de SQLcl y Liquibase, este ejemplo nos...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.