2013-08-20 54 views

Trả lời

36

Hãy thử điều này: -

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

Rất đẹp gợi ý từ IVAN trong ý kiến ​​nên nghĩ thêm trong câu trả lời của tôi

Note: điều này sẽ làm mất hiệu lực chỉ số tất cả của bảng. Vì vậy, lệnh này thường được theo sau bởi

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

[Từ tài liệu] (http://docs.oracle.com/cd/E11882_01/server.112/e25494/tables006.htm#i1106606); và [thêm tại đây] (http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_3001.htm#i2081902) –

+6

Lưu ý: điều này sẽ làm mất hiệu lực tất cả các chỉ mục của bảng. Vì vậy, lệnh này thường được theo sau bởi "thay đổi chỉ mục xây dựng lại". – ibre5041

+1

@Ivan: - Thanx Ivan. Nice điểm. Thêm này trong câu trả lời là tốt !! +1 :) –

2

Hãy thử di chuyển bảng (tbl1) của bạn vào vùng bảng (tblspc2).

alter table tb11 move tablespace tblspc2; 
10

Sử dụng sql từ sql: sản lượng

ống này vào một tập tin:

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

spoolfile sẽ có một cái gì đó như thế này:

alter index OWNER.PK_INDEX rebuild tablespace CORRECT_TS_NAME; 
+0

Bạn phải sử dụng "..." xung quanh index_name hoặc người khác bạn sẽ nhận được lỗi "ORA-01418: chỉ mục được chỉ định không tồn tại". Vì vậy, lệnh nên là: chọn 'thay đổi chỉ mục' || chủ sở hữu || '."'|| index_name ||'" xây dựng lại vùng bảng TO_TABLESPACE_NAME; ' từ all_indexes, nơi chủ sở hữu = 'OWNERNAME'; – Jan

7

bảng Moving:

Lần chạy đầu tiên:

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

Trường hợp <schema_name> là tên của người dùng. Và <tablespace_name> là vùng bảng đích.

Kết quả là bạn nhận được các dòng như sau:

ALTER TABLE SCOT.PARTS MOVE TABLESPACE USERS;

Dán kết quả vào tập lệnh hoặc trong nhà phát triển sql oracle như ứng dụng và chạy nó.

chỉ số Moving:

Đầu tiên chạy:

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>'; 

Dòng cuối cùng trong mã này có thể giúp bạn tiết kiệm rất nhiều thời gian bởi vì nó lọc ra các chỉ số đó đã có trong tablespace đúng.

Kết quả là bạn sẽ nhận được một cái gì đó như:

ALTER INDEX SCOT.PARTS_NO_PK xây dựng lại NGƯỜI SỬ DỤNG TABLESPACE;

Dán kết quả vào tập lệnh hoặc trong nhà phát triển sql oracle như ứng dụng và chạy nó.

Cuối cùng nhưng không kém, LOB di chuyển:

Đầu tiên chạy:

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%'; 

này di chuyển LOB đối tượng để các tablespace khác.

Kết quả là bạn sẽ nhận được một cái gì đó như:

ALTER TABLE SCOT.bin $ 6t926o3phqjgqkjabaetqg == $ 0 MOVE LOB (dương lịch) CỬA HÀNG AS (NGƯỜI SỬ DỤNG TABLESPACE);

Dán kết quả vào tập lệnh hoặc trong nhà phát triển sql oracle như ứng dụng và chạy nó.

O và còn một điều nữa:

Vì một lý do nào đó tôi không thể di chuyển chỉ mục loại 'DOMAIN'. Là một công việc xung quanh tôi đã giảm chỉ mục. đã thay đổi không gian bảng mặc định của người dùng thành không gian bảng mong muốn. và sau đó tạo lại chỉ mục. Có một cách tốt hơn nhưng nó hiệu quả với tôi.

+3

SELECT 'ALTER TABLE .' || TABLE_NAME || ' MOVE TABLESPACE '||' ' FROM dba_tables WHERE OWNER =' 'VÀ TABLESPACE_NAME <>' '; các bảng của bộ lọc đã có trong không gian bảng mong muốn – Barun

+0

Truy vấn đầu tiên trong câu trả lời phải được thay thế bằng truy vấn của Barun. – 3per

Các vấn đề liên quan