DBMS_DATAPPUMP를 사용하여 모든 데이터베이스 링크를 가져옵니다
-
29-09-2020 - |
문제
소스 DB 버전 : 11.2.0.3
대상 DB 버전 : 12.1.0.2
DBMS_DATAPPUMP를 사용하여 하나의 데이터베이스에서 다른 데이터베이스 링크를 다른 데이터베이스로 가져 오려고합니다. 코드가 위의 대상 DB에서 실행되고 데이터베이스 링크를 통해 위의 소스 DB에서 DB 링크를 가져옵니다.
과거에는 DBMS_DATAPUMP.METADATA_FILTER를 사용하여 특정 오브젝트 (예 : 기능 또는 절차)를 가져 오도록했습니다. 그러나 다음은 ORA-39001을 반환합니다. 잘못된 인수 값 :
dbms_datapump.metadata_filter(h1,'INCLUDE_PATH_EXPR','IN (''DATABASE LINK'')');
.
, 나는 또한 ORA-39001을 반환 한 복수형 버전을 시도했다 :
dbms_datapump.metadata_filter(h1,'INCLUDE_PATH_EXPR','IN (''DATABASE LINKS'')');
.
여기에 기본적인 것을 누락해야하지만, "DBMS_DATAPPUMP"의 검색 결과와 동일한 검색의 "데이터베이스 링크"가 데이터베이스 링크를 가져 오는 방법에 대한 결과 만 반환 된 결과 만 짜증났습니다. 데이터베이스 링크를 직접 가져 오는 방법은 아닙니다.
다음을 사용하여 직접 데이터베이스 링크를 가져올 수있었습니다.
select DBMS_LOB.SUBSTR@dblinkimp(DBMS_METADATA.GET_DDL@dblinkimp
('DB_LINK', '[DBlinkName]', '[SchemaName]')) from dual@dblinkimp;
.
i 즉시 실행을 사용하여 위의 명령문에서 출력을 실행하지만 더 이상 11.2.0.4에서 시작하는 유효한 옵션이 아닙니다 (Metalink Doc ID 190521.1 참조).
해결책
DATABASE LINK
또는 DATABASE LINKS
가 아니며 DB_LINK
입니다.DATABASE_EXPORT_OBJECTS
, SCHEMA_EXPORT_OBJECTS
및 TABLE_EXPORT_OBJECTS
에서 유효한 값을 찾을 수 있습니다.