tablo ve indexleri farklı tablespace’e taşıma
Bir şemanın altındaki tabloları ve indexleri başka tablespace ‘e taşımak istiyoruz.
Örnek olarak scott user’ına ait tablo ve indexleri başka tablespace’e akatarmayı deneyelim.
Scott kullanıcısına ait tablo ve indexlerin bulunduğu tablespace’leri listeliyoruz.
column table_owner format a15
column segment_name format a15
column segment_type format a15
column tablespace_name format a15
SQL> SELECT owner,
2 segment_name,
3 segment_type,
4 tablespace_name
5 FROM dba_segments
6 WHERE OWNER = ‘SCOTT’ AND segment_type IN (‘TABLE’, ‘INDEX’);
OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME
——————– ————— ————— —————
SCOTT BONUS TABLE USERS
SCOTT DEPT TABLE USERS
SCOTT EMP TABLE USERS
SCOTT SALGRADE TABLE USERS
SCOTT PK_DEPT INDEX USERS
SCOTT PK_EMP INDEX USERS
6 rows selected.
SQL>
Tablo ve indexleri taşımak istediğimiz tablespace’i oluşturuyoruz.
CREATE SMALLFILE TABLESPACE “TS_SCOTT” DATAFILE ‘+DATA/test/datafile/dbf_scott’
SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED
NOLOGGING
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
Ardından segmentlerimizi taşıyacağımız pl/sql procedure’ünü kodluyoruz.
CREATE OR REPLACE PROCEDURE change_segment_tablespace
IS
CURSOR vCrs
IS
SELECT owner,segment_name,segment_type,
DECODE (segment_type, ‘TABLE’, ‘MOVE’, ‘REBUILD’) operation,
CASE
WHEN owner = ‘SCOTT’ AND segment_type = ‘TABLE’
THEN ‘TS_SCOTT’
WHEN owner = ‘SCOTT’ AND segment_type = ‘INDEX’
THEN ‘TS_SCOTT’
END
tablespace_name
FROM dba_segments
WHERE OWNER = ‘SCOTT’ AND segment_type IN (‘TABLE’, ‘INDEX’);
BEGIN
FOR crs IN vCrs
LOOP
BEGIN
EXECUTE IMMEDIATE
‘alter ‘
|| crs.segment_type
|| ‘ ‘
|| crs.owner
|| ‘.’
|| crs.segment_name
|| ‘ ‘
|| crs.operation
|| ‘ tablespace ‘
|| crs.tablespace_name;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (
crs.owner
|| ‘ ‘
|| crs.segment_name
|| ‘ ‘
|| crs.segment_type
|| ‘ ‘
|| SQLERRM);
END;
END LOOP;
END;
Procedure’ü yazdıktan sonra derleyip execute ediyoruz.
SQL> exec change_segment_tablespace;
PL/SQL procedure successfully completed.
SQL>
Daha sonra tekrar Scott kullanıcısına ait tablo ve indexlerin tablespace’leri listeliyoruz.
Tabloların ve indexlerin başarılı bir şekilde yeni tablespacelerine taşındığını görüyoruz.
SQL> SELECT owner,
2 segment_name,
3 segment_type,
4 tablespace_name
5 FROM dba_segments
6 WHERE OWNER = ‘SCOTT’ AND segment_type IN (‘TABLE’, ‘INDEX’);
OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME
——————— ————— —————– ———————-
SCOTT BONUS TABLE TS_SCOTT
SCOTT DEPT TABLE TS_SCOTT
SCOTT EMP TABLE TS_SCOTT
SCOTT SALGRADE TABLE TS_SCOTT
SCOTT PK_D INDEX TS_SCOTT
SCOTT PK_EMP INDEX TS_SCOTT
6 rows selected.
SQL>
Yunus Emre Kilinc
Latest posts by Yunus Emre Kilinc (see all)
- External Table - Ara 9, 2013
- Crontab - Ara 8, 2013
- Unix üzerinde çalışan Oracle 11g Nasıl Kaldırılır - Ara 8, 2013