2011-09-29 5 views
1

이 질문의 간단한 버전은 다음과 같습니다. 최대 크기 제한 인 4GB에 도달 한 Oracle 10g XE 데이터베이스의 모든 데이터를 내보낼 수 있습니까?전체 Oracle 10g XE 데이터베이스를 내보낼 수 없습니까?

배경 : My (Windows) Oracle 10g XE 데이터베이스의 최대 허용 데이터베이스 크기가 4GB에 도달했습니다. 이 문제를 해결하기 위해 의도 한 해결책은 최대 크기 제한이 더 큰 Oracle 11g XE로 업그레이드하는 것이었고 어쨌든 우리의 생산 환경을 더 잘 반영했습니다. 물론 전형적인 오라클 패션에서는 업그레이드 옵션을 제공하지 않습니다 (적어도 XE에서 찾을 수있는 것은 아닙니다). 그래서 Oracle 11g XE 설치 가이드의 "10.2 XE와 11.2 XE 간의 데이터 가져 오기 및 내보내기"섹션의 지침을 따르기로 결정했습니다. 한동안 SQLPlus와 싸운 후에, 사용자에게 다음을 입력하도록 지시하는 단계 3d에 도달했습니다 (SQLPlus 대신 명령 줄을 지정하지는 않지만 명령 줄을 의미 함).

expdp system/system_password full=Y EXCLUDE=SCHEMA:\"LIKE \'APEX_%\'\",SCHEMA:\"LIKE \'FLOWS_%\'\" directory=DUMP_DIR dumpfile=DB10G.dmp logfile=expdpDB10G.log 

는 그 다음 출력 결과 명령 : 나는 USERS 테이블 스페이스에서 데이터의 꽤 삭제 한

Export: Release 10.2.0.1.0 - Production on Thursday, 29 September, 2011 10:19:11 


Copyright (c) 2003, 2005, Oracle. All rights reserved. 

Connected to: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production 
ORA-31626: job does not exist 
ORA-31633: unable to create master table "SYSTEM.SYS_EXPORT_FULL_06" 
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95 
ORA-06512: at "SYS.KUPV$FT", line 863 
ORA-12952: The request exceeds the maximum allowed database size of 4 GB 

, 그러나 때문에 데이터의 물리적 위치의 크기를 조정할 수 없습니다입니다. 그리고 내가하는 일과 관계없이 나는 항상 같은 결과물을 얻습니다. 나는 아무 효과없이 관리 웹 응용 프로그램에서 "컴팩트 스토리지"를 실행하려했습니다.

제 질문은 무엇입니까? 오라클은 XE 데이터베이스가 채워지면 사람들을 완전히 벗어날 정도로 무능합니다.

답변

4

USERS 테이블 스페이스 크기를 줄이고 문제를 극복하기 위해 SYSTEM 테이블 스페이스 크기를 늘릴 수 있도록 데이터를 병합하는 데 도움이되는 것처럼 데이터를 내보내는 데 필요한 지점까지 도달 할 수 있습니다.

USERS 테이블 공간에서 데이터를 제거했지만 크기를 조정할 수 없다고 언급했습니다. ,

ALTER TABLE <table_name> MOVE <tablespace_name>; 

테이블 스페이스 이름이 표는 현재에 살고있는 같은 테이블 스페이스가 될 수 있습니다 당신이 가장 높은 블록보다 테이블 크기가 작은 줄일 수 없기 때문에, 각 테이블에 대해 다음 명령을 실행하여 테이블 데이터를 reorganiza 여전히 데이터를 재구성하고 데이터를 병합합니다.

모든 사용자 테이블에 살고있는 테이블에 당신이 명령의 텍스트를 줄 것이다이 문 :

select 'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' MOVE '||TABLESPACE_NAME||';' From dba_tables where tablespace_name='USERS'; 

인덱스도 다시 작성해야합니다 (ALTER INDEX 재 구축) 이동 명령으로이를 무효화 이는 행 단위로 재배치하는 대신 테이블 데이터 (블록)의 물리적 구성을 변경하기 때문입니다.

데이터가 병합 된 후 USERS 테이블 공간의 크기를 조정하여 데이터 크기를 반영 할 수 있습니다.

고통이 있습니까? 예. 오라클 사용자에게 친숙합니까? 그들은 당신을 그렇게 생각하지만 그렇게 생각하지는 않을 것입니다. 특히 당신이하고 싶은 일의 종류를하지 못하게하는 이상한 구석에있을 때 그럴 것입니다.

1

위에서 볼 수 있듯이 SYSTEM 테이블 스페이스에 사용 가능한 공간이 필요하며 SYSTEM + USERS의 합계가 4GB에 도달하기 때문에 Oracle XE에서 할당을 거부합니다.

유사한 아키텍처에 Oracle 10gR2 Standard Edition 인스턴스를 설치하고 Oracle XE를 종료하고 기존 USERS 데이터 파일을 복사하십시오. 표준판에서 "ALTER TABLESPACE"명령을 사용하면 USERS 테이블 공간을 기존 데이터 파일에 링크 한 다음 데이터를 내보낼 수 있어야합니다.

+0

그렇다면 데이터를 잃지 않고 10g에서 11g로 XE 인스턴스를 업그레이드 할 수있는 라이센스가없는 Oracle 10g Standard Edition의 새로운 인스턴스를 설치해야합니까? 진심으로? –

+0

10g XE가 현재 가득 찼기 때문에 불행히도 예. 아마도 11g XE를 사용하여 비슷한 작업을 수행 할 수 있지만 권장하지는 않습니다. 호환성 문제를 피하기 위해 동일한 아키텍처의 동일한 Oracle 버전을 사용해야합니다. –

+0

11g XE는 SYSTEM 테이블 스페이스에 제한이 없으므로이 문제가 더 이상 발생하지 않아야합니다. "리소스 제한은 이제 릴리스 11.2와 동일하지만 최대 11GB의 사용자 데이터를 저장할 수 있습니다 ** 릴리스 10.2의 4GB와 달리 Express Edition 시스템 데이터 ** 제외). " http://download.oracle.com/docs/cd/E17781_01/admin.112/e18585/toc.htm#BJFEIJGJ –

관련 문제