Tôi chạy oracle 11g
và cần di chuyển table (tbl1)
từ một tablespace (tblspc1)
sang một số khác (tblspc2)
. Cách dễ nhất để làm điều đó là gì?Cách di chuyển bảng từ một vùng bảng này sang bảng khác trong oracle 11g
Trả lời
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;
[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) –
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
@Ivan: - Thanx Ivan. Nice điểm. Thêm này trong câu trả lời là tốt !! +1 :) –
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;
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;
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
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.
Bạn có thể đăng ít nhất những gì bạn đã thử cho đến nay không ?. –