Oracle Data Pump 내보내기 파일 내에서 스키마를 확인하는 방법

StackOverflow https://stackoverflow.com/questions/95578

  •  01-07-2019
  •  | 
  •  

문제

  • expdp를 사용하여 생성된 Oracle 데이터베이스 백업 파일(.dmp)이 있습니다.
  • .dmp 파일은 전체 데이터베이스를 내보낸 것입니다.
  • 이 덤프 파일 내에서 스키마 중 하나를 복원해야 합니다.
  • 이 덤프 파일 내의 스키마 이름을 모릅니다.
  • impdp를 사용하여 데이터를 가져오려면 로드할 스키마 이름이 필요합니다.

그러면 .dmp 파일을 검사하고 그 안에 있는 모든 스키마를 나열해야 합니다. 어떻게 해야 합니까?


업데이트 (2008-09-18 13:02) - 더 자세한 정보:

현재 사용 중인 impdp 명령은 다음과 같습니다.

impdp user/password@database directory=DPUMP_DIR 
      dumpfile=EXPORT.DMP logfile=IMPORT.LOG  

그리고 DPUMP_DIR이 올바르게 구성되었습니다.

SQL> SELECT directory_path
2  FROM dba_directories
3  WHERE directory_name = 'DPUMP_DIR';

DIRECTORY_PATH
-------------------------
D:\directory_path\dpump_dir\

그리고 그렇습니다. EXPORT.DMP 파일은 실제로 해당 폴더에 있습니다.

impdp 명령을 실행할 때 나타나는 오류 메시지는 다음과 같습니다.

Connected to: Oracle Database 10g Enterprise Edition ...
ORA-31655: no data or metadata objects selected for job
ORA-39154: Objects from foreign schemas have been removed from import

이 오류 메시지는 대부분 예상된 것입니다.impdp 명령은 다음과 같아야 합니다.

impdp user/password@database directory=DPUMP_DIR dumpfile=EXPORT.DMP 
      SCHEMAS=SOURCE_SCHEMA REMAP_SCHEMA=SOURCE_SCHEMA:MY_SCHEMA

하지만 그렇게 하려면 소스 스키마가 필요합니다.

도움이 되었습니까?

해결책

대용량 파일을 처리할 수 있는 편집기로 DMP 파일을 열면 스키마 이름이 언급된 영역을 찾을 수 있습니다.아무것도 변경하지 마십시오.원본 덤프의 복사본을 열면 더 좋을 것입니다.

다른 팁

impdp DDL을 내보냅니다. dmp 다음을 사용하는 경우 파일에 백업 SQLFILE 매개변수.예를 들어 이것을 텍스트 파일에 넣으십시오.

impdp '/ as sysdba' dumpfile=<your .dmp file> logfile=import_log.txt sqlfile=ddl_dump.txt

그런 다음 확인하십시오. ddl_dump.txt 백업의 테이블스페이스, 사용자 및 스키마에 대한 것입니다.

문서에 따르면 이는 실제로 데이터베이스를 수정하지 않습니다.

SQL은 실제로 실행되지 않으며 대상 시스템은 변경되지 않은 상태로 유지됩니다.

업데이트(2008-09-19 10:05) - 해결 방법:

내 솔루션: 사회공학, 정말 열심히 파서 스키마 이름을 아는 사람을 찾았습니다.
기술 솔루션: .dmp 파일 검색 했다 스키마 이름을 생성합니다.
스키마 이름을 알고 나면 덤프 파일을 검색하여 어디서 찾을 수 있는지 알아냈습니다.

.dmp 파일에서 스키마 이름이 표시된 위치는 다음과 같습니다.

  • <OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME>이는 각 테이블 이름/정의 앞에 표시됩니다.

  • SCHEMA_LIST 'SOURCE_SCHEMA'이는 .dmp의 끝 부분에서 나타났습니다.

흥미롭게도 주변에는 SCHEMA_LIST 'SOURCE_SCHEMA' 섹션에는 덤프를 생성하는 데 사용되는 명령줄, 사용된 디렉터리, 사용된 par 파일, 실행된 Windows 버전 및 내보내기 세션 설정(언어, 날짜 형식)도 포함되어 있습니다.

그럼 문제가 해결되었습니다 :)

처음에 파일을 생성한 expdp 작업의 로그 파일이 없다고 가정하면 가장 쉬운 옵션은 아마도 다음을 사용하는 것입니다. SQLFILE 매개변수 impdp가 DDL 파일을 생성하도록 합니다(전체 가져오기를 기반으로).그런 다음 해당 파일에서 스키마 이름을 가져올 수 있습니다.물론 이상적이지는 않습니다. impdp는 DDL을 추출하기 위해 전체 덤프 파일을 읽어야 하고, 관심 있는 스키마에 다시 도달해야 하며, 다양한 CREATE USER 문을 검색하는 약간의 텍스트 파일을 수행해야 하기 때문입니다. , 그러나 그것은 가능해야 합니다.

sqlfile을 생성하기 위해 impdp 명령을 실행하려면 DATAPUMP_IMP_FULL_DATABASE 역할이 있는 사용자로 실행해야 합니다.

또는...권한이 낮은 사용자로 실행하고 MASTER_ONLY=YES 옵션을 사용한 다음 마스터 테이블을 검사하십시오.예를 들어

select value_t 
from SYS_IMPORT_TABLE_01 
where name = 'CLIENT_COMMAND' 
and process_order = -59;

col object_name for a30
col processing_status head STATUS for a6
col processing_state head STATE for a5
select distinct
  object_schema,
  object_name,
  object_type,
  object_tablespace,
  process_order,
  duplicate,
  processing_status,
  processing_state
from sys_import_table_01
where process_order > 0
and object_name is not null
order by object_schema, object_name
/

http://download.oracle.com/otndocs/products/database/enterprise_edition/utilities/pdf/oow2011_dp_mastering.pdf

1 단계:다음은 간단한 예입니다.다음을 사용하여 덤프 파일에서 SQL 파일을 생성해야 합니다. SQLFILE 옵션.

2 단계:Grep for CREATE USER 생성된 SQL 파일(여기에서는 tables.sql)

여기 예:

$ impdp directory=exp_dir dumpfile=exp_user1_all_tab.dmp  logfile=imp_exp_user1_tab sqlfile=tables.sql

수입:릴리스 11.2.0.3.0 - 2013년 4월 26일 금요일 08:29:06 생산

저작권 (c) 1982, 2011, Oracle 및/또는 그 계열사.판권 소유.

사용자 이름:/ sysdba로

처리 개체 유형 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA 작업 "SYS"."SYS_SQL_FILE_FULL_01"이 08:29:12에 성공적으로 완료되었습니다.

$ grep "CREATE USER" tables.sql

'S:270D559F9B97C05EA50F78507CD6EAC6AD63969E5E;BBE7786A5F9103' 값으로 식별되는 사용자 "USER1" 생성

여기에 설명된 다양한 데이터펌프 옵션 http://www.acehints.com/p/site-map.html

내 솔루션 (KyleLanser의 답변과 유사) (Unix 상자에서):

strings dumpfile.dmp | grep SCHEMA_LIST

OWNER_NAME을(를) 검색해야 합니다.

cat -v dumpfile.dmp | grep -o '<OWNER_NAME>.*</OWNER_NAME>' | uniq -u

cat -v 덤프 파일을 보이는 텍스트로 바꿉니다.

grep -o는 일치하는 항목만 표시하므로 실제로 긴 줄은 표시되지 않습니다.

uniq -u는 중복된 줄을 제거하므로 더 적은 출력이 표시됩니다.

이는 대용량 덤프 파일에서도 꽤 잘 작동하며 스크립트에서 사용하기 위해 조정할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top