Home / MAKALELER / Veri Tabanı / Bir Kullanıcıya Ait Tablo ve Index’leri Farklı Tablespace’e Taşıma

Bir Kullanıcıya Ait Tablo ve Index’leri Farklı Tablespace’e Taşıma

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>

About Yunus Emre Kilinc

Mersin Üniversitesi Bilgisayar Mühendisliği bölümünü bitirdikten sonra Ankara'da yaşamaya başladım. Şu anda Fatih Üniversitesinde İşletme yüksek Lisansı(MBA) na devam etmekteyim. 2010 yılında Oracle DBA eğitimi aldım. OCA 11gR2 sertifikasına sahibim. 2009 yılından beri Türk Telekom A.Ş de xDSL teknolojileri alanında çalışmaktayım. Oracle veritabanı yönetimi konularında kendimi geliştirmeye çalışmaktayım. İlgilendiğim ve kullandığım teknolojiler : Oracle SQL , PL/SQL Oracle 11g , Oracle 10g , UNIX (Sun Solaris), UNIX (HP-UX) ,OSI Model , IP ,DSL ,Unix Shell Scripting

İlginizi Çekebilir

SQL Server ile Veri Şifreleme

Bilgi teknolojilerinde verinin güvenliği çok kritik bir öneme sahiptir. Önemli verileri korumak için ekstra bir …

Bir Cevap Yazın