programing

Oracle 11g에서 테이블스페이스 간에 테이블을 이동하는 방법

lastcode 2023. 3. 23. 22:48
반응형

Oracle 11g에서 테이블스페이스 간에 테이블을 이동하는 방법

나는 달린다oracle 11g이동할 필요가 있다table (tbl1)하나에서tablespace (tblspc1)타인에게(tblspc2)가장 쉬운 방법은 무엇입니까?

이것을 시험해 보세요:-

ALTER TABLE <TABLE NAME to be moved> MOVE TABLESPACE <destination TABLESPACE NAME>

IVAN이 코멘트로 제시한 매우 좋은 제안이므로 제 답변에 추가하도록 하겠습니다.

참고: 모든 테이블의 인덱스가 비활성화됩니다.따라서 이 명령어 뒤에는 보통

alter index <owner>."<index_name>" rebuild;

사용하다sql부터sql:

이 출력을 파일로 spool합니다.

select 'alter index '||owner||'.'||index_name||' rebuild tablespace TO_TABLESPACE_NAME;' from all_indexes where owner='OWNERNAME';

spoolfile에는 다음과 같은 내용이 있습니다.

alter index OWNER.PK_INDEX rebuild tablespace CORRECT_TS_NAME;

테이블 이동:

첫 번째 실행:

SELECT 'ALTER TABLE <schema_name>.' || OBJECT_NAME ||' MOVE TABLESPACE '||' <tablespace_name>; '
FROM ALL_OBJECTS
WHERE OWNER = '<schema_name>'
AND OBJECT_TYPE = 'TABLE' <> '<TABLESPACE_NAME>';

-- 또는 코멘트에서 제안(직접 테스트하지 않음)

SELECT 'ALTER TABLE <SCHEMA>.' || TABLE_NAME ||' MOVE TABLESPACE '||' TABLESPACE_NAME>; ' 
FROM dba_tables 
WHERE OWNER = '<SCHEMA>' 
AND TABLESPACE_NAME <> '<TABLESPACE_NAME>

어디에<schema_name>는 사용자의 이름입니다.그리고.<tablespace_name>는, 행선지 테이블 스페이스입니다.

그 결과 다음과 같은 선이 표시됩니다.

테이블 스코트 변경부품 이동 테이블스페이스 사용자

스크립트 또는 Oracle SQL 개발자와 같은 응용 프로그램에 결과를 붙여넣고 실행합니다.

인덱스 이동:

첫 번째 실행:

SELECT 'ALTER INDEX <schema_name>.'||INDEX_NAME||' REBUILD TABLESPACE <tablespace_name>;' 
FROM ALL_INDEXES
WHERE OWNER = '<schema_name>'
AND TABLESPACE_NAME NOT LIKE '<tablespace_name>';

이 코드의 마지막 줄은 이미 올바른 테이블스페이스에 있는 인덱스를 필터링하기 때문에 많은 시간을 절약할 수 있습니다.

그 결과 다음과 같은 결과를 얻을 수 있습니다.

지수 변경 스코트PARTS_NO_PK 테이블스페이스 재구축 사용자

스크립트 또는 Oracle SQL 개발자와 같은 응용 프로그램에 결과를 붙여넣고 실행합니다.

마지막으로 LOB 이동:

첫 번째 실행:

SELECT 'ALTER TABLE <schema_name>.'||LOWER(TABLE_NAME)||' MOVE LOB('||LOWER(COLUMN_NAME)||') STORE AS (TABLESPACE <table_space>);'
FROM DBA_TAB_COLS
WHERE OWNER = '<schema_name>' AND DATA_TYPE like '%LOB%';

그러면 LOB 개체가 다른 테이블스페이스로 이동합니다.

그 결과 다음과 같은 결과를 얻을 수 있습니다.

ALTER TABLE SCORT.bin$6t926o3phjqjjaebaetqg==$0 LOB(캘린더) 스토어 AS(TABLESPACE 사용자);

스크립트 또는 Oracle SQL 개발자와 같은 응용 프로그램에 결과를 붙여넣고 실행합니다.

O, 그리고 한 가지 더 있습니다.

어떤 이유로 'DOMAIN' 유형의 인덱스를 이동할 수 없었습니다.회피책으로 인덱스를 삭제했습니다.사용자의 기본 테이블스페이스를 원하는 테이블스페이스로 변경했습니다.인덱스를 다시 만듭니다.더 나은 방법이 있을 법도 한데 내게는 효과가 있었다.

테이블스페이스(tbl1)를 테이블스페이스(tblspc2)로 이동하려면 이 작업을 수행합니다.

alter table tb11 move tablespace tblspc2;

여러 가지 대본을 써봤지만 모든 객체에 대해 효과가 있는 것은 아닙니다.클러스터된 개체를 테이블스페이스 에 이동할 수 없습니다.그러기 위해서는 expdp를 사용해야 합니다.따라서 모든 객체를 다른 테이블스페이스로 이동하기 위해서는 expdp를 사용하는 것이 가장 좋습니다.

다음은 명령어입니다.

nohup expdp \"/ as sysdba\" DIRECTORY=test_dir DUMPFILE=users.dmp LOGFILE=users.log TABLESPACES=USERS &

자세한 내용은 이 링크를 참조하십시오.

언급URL : https://stackoverflow.com/questions/18327671/how-to-move-table-from-one-tablespace-to-another-in-oracle-11g

반응형