새 테이블 스페이스 또는 다른 테이블 스페이스로 스키마 가져 오기


13

데이터가 시작된 곳과 다른 새 테이블 스페이스 또는 다른 테이블 스페이스를 사용하여 스키마를 Oracle 11gR2로 가져 오는 편리한 방법이 있습니까?

예를 들어, 모든 사용자 데이터가 USERS 테이블 스페이스에 저장되는 OLDDB에서 BLOG_DATA를 내보냈습니다.

NEWDB에서 BLOG_DATA 스키마를 가져오고 싶지만이 사용자를 위해 특별히 작성된 BLOG_DATA 테이블 스페이스에 사용자 오브젝트를 저장하려고합니다.

BLOG_DATA 사용자를 작성하고 BLOG_DATA 테이블 스페이스를 작성하여 해당 사용자의 기본 테이블 스페이스로 설정 한 후 적절한 무제한 할당량을 추가했습니다.

CREATE TABLESPACE blog_data DATAFILE SIZE 1G;

CREATE USER blog_data IDENTIFIED BY secretpassword DEFAULT TABLESPACE blog_data QUOTA UNLIMITED ON blog_data;

GRANT connect,resource TO blog_data

스키마는 OLDDB에서 다음과 같은 방식으로 내보내졌습니다.

exp blog_data/secretpassword@OLDDB file=blog_data.dmp 

아래 Phil의 훌륭한 답변을 읽은 후, 나는 궁금해했습니다 .

데이터가 사용자가 할당량을 가지고있는 유일한 테이블 스페이스 인 기본 테이블 스페이스 이외의 다른 위치를 가지지 않기 때문에 모든 사용자 객체를 해당 기본 테이블 스페이스에 효과적으로 배치 할 수 있습니까?

imp blog_data/secretpassword@NEWDB file=blog_data.dmp

그러면 NEWDB의 blog_data 테이블 스페이스에 전체 blog_data 스키마가 배치됩니까? 이것이 작동하지 않거나 특정 객체 등에 문제가 발생하는 이유가 있습니까?

최신 정보:

나는 빠른 테스트를했고 이것이 사실임을 알았다. Imp원본 테이블 스페이스에 객체를 배치 할 수없는 경우 (예 : 테이블 스페이스가 존재하지 않는 경우) 해당 사용자의 기본 테이블 스페이스에 객체를 배치합니다. 전체 설명 : http://www.dolicapax.org/?p=57

여전히 필과 같이 Data Pump를 사용하는 것이 선호되는 옵션이라고 생각합니다.


레거시 exp유틸리티 또는 expdp(데이터 펌프)를 사용하여 내보냈습니까 ?
Philᵀᴹ

이 예에서는 위에 표시된대로 기존 exp 유틸리티를 사용하여 내보냈습니다. expdp를 쉽게 사용하고 이전 DB 서버에서 파일을 선택할 수 있다고 가정하면 새 테이블 공간으로 쉽게 전환 할 수 있습니까?
Roy

나는 대답에서 둘 다 다루었 다. 데이터 펌프 사용-이 작업을 수행하는 것이 더 쉽습니다
Philᵀᴹ

답변:


15

oracle imp유틸리티를 사용하여 가져올 때 실제로 다른 테이블 스페이스를 지정할 수 없습니다 . 그러나 임시 해결책 ROWS=N으로 USERS테이블 스페이스 로 가져 오기를 수행하여 테이블을 사전 작성한 후 alter table mytable move tablespace BLOG_DATA;각 테이블이 새 테이블 스페이스로 테이블을 이동 한 후 IGNORE=Y매개 변수를 사용하여 다시 가져 오기를 수행 하여 테이블 작성 오류를 무시하고 모두 가져 오기를 수행 할 수 있습니다. 데이터의.

데이터 펌프 ( expdp)를 사용하여 데이터를 내 보낸 경우 (이제 모든 사람이 이전 레거시 exp/ imp유틸리티 대신 요즘 사용하고 있어야 함 ) REMAP_TABLESPACE매개 변수를 사용하여 다른 테이블 스페이스로 쉽게 가져올 수 있습니다 .

예 :

impdp scott/tiger@ZOMG file=blog_data.dmp directory=mydir remap_tablespace=USERS:BLOG_DATA

정말 고마워요, 필 궁금한 점이 있습니다. 임포트 할 사용자에게 기본 테이블 스페이스에 대한 할당량이 독점적으로 있으면 데이터 소스의 레이아웃에 관계없이 임포트 된 모든 오브젝트를 해당 기본 테이블 스페이스에 배치해야합니까?
Roy

비슷한 작업을하고 있지만 QA env가 프로덕션과 일치하기를 원하기 때문에 expdp / impdp를 사용하는 전체 DB 마이그레이션입니다. remap_tablespace를 사용하면 모든 스키마를 다른 단일 테이블 공간으로 다시 매핑하지만 스키마 당 한 번만 impmap 명령을 실행할 수 있고 remap_tablespace를 사용할 수 있다고 생각합니다. 이것은 일을 달성해야합니다.
Nicolas de Fontenay

0

아래 언급 된 단계를 따라야합니다.

  • 사용자 내보내기
  • 명령을 사용하여 가져 오기 수행
    imp system/manager file=export.dmp indexfile=newfile.sql
    데이터를 가져오고 모든 정의를에 저장합니다 newfile.sql.
  • 필요한 물건을 떨어 뜨립니다.
  • newfile.sql테이블 스페이스를 변경 한 후 스크립트를 실행하십시오 .
  • 필요한 개체에 대한 백업에서 가져옵니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.