25 Şubat 2013 Pazartesi

                                               Transportable Tablespace
Bu yöntem ile bir platformdan diğer platforma tablespace kolayca taşıyabiliriz.Bu işlemi yaparken export import utility kullanırız. Bunun ile tablespace metadata kopyalarız.Bu yöntem diğerlerine göre daha hızlıdır. Çünkü Oracle sadece tablespace metadatası ile ilgili bir işlem yapmaktadır.Gerekli olan datafile manually olarak migrate ederiz.10g den önceki versiyonlarda bu özelliği kullanabilmek için aynı platformlara sahip olmak gerekirdi. Fakat 10g den sonra bu işlem farklı platformlar arasında da gerçekleştirilmeye başlandı.Burada transportable tablespace işlemini linux bir makinadan windows bir makinaya gerçekleştireceğiz.

1)İlk olarak elimizde bulunan platformların transport işlemi için uygun olup olmadığı ve transport işlemini gerçekleştirebileceksek datafile convert işleminin gerekip gerekmediğini kontrol etmeliyiz.Convert işlemine karar vermek için platformların endian formatlarına bakarız. Endian formatları farklı ise convert işlemi gerekicek aynı ise böyle bir işleme gerek duyulmayacaktır.
Source makina
SQL> column platform_name format a30
SQL> SELECT A.platform_id, A.platform_name, B.endian_format
  2  FROM   v$database A, v$transportable_platform B
  3  WHERE  B.platform_id (+) = A.platform_id;
 

PLATFORM_ID      PLATFORM_NAME                  ENDIAN_FORMAT
-----------                    ------------------------------                  --------------
     13                           Linux x86 64-bit                              Little

Target Platform
SQL> column platform_name format a30;
SQL> SELECT A.platform_id, A.platform_name, B.endian_format
  2  FROM   v$database A, v$transportable_platform B
  3  WHERE  B.platform_id (+) = A.platform_id;

PLATFORM_ID     PLATFORM_NAME                  ENDIAN_FORMAT
-----------                 ------------------------------                       --------------
         12                Microsoft Windows x86 64-bit                    Little

2)Sadece application datalarının olduğu tablespace transport edebiliriz.System,undo ve temporary tablespace transport edemeyiz.Transport edeceğimiz tablespaces destination database içerisinde  olmamalıdır.Böyle bir tablespace varsa ya varolan tablespace rename edilmelidir yada transport edilen tablespace remap edilir.Bir anda birden fazla tablespace transport edebiliriz.Transport edilecek tablespace self-contained olmalıdır.Yani transport edilecek tablespace içerisindeki objeler  taşınmayacak tablespace içerisinde bulanan diğer objelere reference ve depend olmamalıdır.Örneğin transport edilecek tablespace içerisinde diğer tablespace bulunan bir tablo için index varsa oracle bu işleme engel olacaktır.Tablespace self-contained olup olmadığını aşağıdaki procedure ile kontrol ederiz.
SQL>  BEGIN
  2  SYS.dbms_tts.transport_set_check
  3  ('FGA', incl_constraints=>TRUE, full_check=>FALSE);
  4  end;
  5  /
PL/SQL procedure successfully completed.

SQL> SELECT * FROM SYS.transport_set_violations;

no rows selected

NOT:Eğer transport edilecek tablespace herhangi bir dependency varsa aşağıdaki gibi çıktılar alacaktık.
    SQL> SELECT * FROM SYS.transport_set_violations;
    VIOLATIONS
    --------------------------------------------------------------------------------
    Index MY_SCHEMA.MY_INDEX in tablespace IND1 points to table MY_SCHEMA.MY_TABLE
    in tablespace TAB2

    
SQL> SELECT * FROM SYS.transport_set_violations;

    VIOLATIONS
    --------------------------------------------------------------------------------
    Constraint MY_CHILD_TABLE_FK1 between table MY_SCHEMA.MY_PARENT_TABLE in tablespace TAB2 and table MY_SCHEMA.MY_CHILD_TABLE in tablespace TAB1

  3)Transport edilecek tablespace bulunan table içerisindeki datanın type kontrol ederiz.Çünkü transportable tablespace özelliği bazı data type ları için desteklenmez.(raw, long raw, bfile,user defined data type)Aşağıdaki sorgu ile bir schema içerisinde bulunan data type ve miktarını görebiliriz.
SQL> SELECT   B.data_type, COUNT(*)
  2  FROM     dba_tables A, dba_tab_columns B
  3  WHERE    A.owner = 'YASIN'
  4  AND      B.owner = A.owner
  5  AND      B.table_name = A.table_name
  6  GROUP BY B.data_type
  7  ORDER BY B.data_type;

DATA_TYPE                COUNT(*)
------------------------------ ----------
NUMBER                            3
VARCHAR2                        1

Aşağıdaki sorgu ile transport edilecek tablespace içerisinde problem oluşturacak data type görebiliriz.
SQL> SELECT B.owner, B.table_name
  2  FROM   dba_xml_tables A, all_all_tables B
  3  WHERE  B.owner = A.owner
  4  AND    B.table_name = A.table_name
  5  AND    B.tablespace_name IN ('FGA');

no rows selected

4)Transport edeceğimiz tablespace bulunduğu schema target database de  olması gerekir. Eğer yoksa create ederiz.Target database içerisinde transport edeceğimiz tablespace ile aynı ada sahip bir tablespace varsa ya varolan tablespace ismi değiştirilir yada import işlemi gerçekleştirilirken remap işlemi gerçekleştirilir.Aşağıdaki sorguları çalıştırarak gerekli check işlemini gerçekleştirebiliriz.
SQL> SELECT   owner, COUNT(*)
  2  FROM     dba_segments
  3  WHERE    tablespace_name IN ('FGA')
  4  GROUP BY owner;

OWNER          COUNT(*)
------------------------------ ----------
YASIN           4


Aşağıdaki sorguyu target database de çalıştırarak gerekli olan schemanın olup olmadığı kontrol edilir.
SQL> SELECT username
  2  FROM   dba_users
  3  WHERE  username = 'YASIN';

no rows selected


Target database yasin adında bir user create ederiz.
SQL>create user yasin identified by 123
SQL>grant connect,resource,create table to yasin;


5)Transport edeceğimiz tablespace metadata export etmeden önce tablespace read only moda alırız.Tablespace read only moda oldıktan sonra metadata export ederiz.
SQL> alter tablespace FGA read only;
Tablespace altered.


[oracle@localhost tmp]$ expdp dumpfile=expfga.dmp  transport_tablespaces=fga directory=expdr logfile=expfga.log
Export: Release 11.2.0.3.0 - Production on Thu Feb 21 15:22:26 2013
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
Username: sys as sysdba
Password:
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYS"."SYS_EXPORT_TRANSPORTABLE_01":  sys/******** AS SYSDBA dumpfile=expfga.dmp transport_tablespaces=fga directory=expdr  logfile=expfga.log
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/INDEX/INDEX
Processing object type TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT
Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/AUDIT_OBJ
Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/FGA_POLICY
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Master table "SYS"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_TRANSPORTABLE_01 is:
  /tmp/expfga.dmp
******************************************************************************
Datafiles required for transportable tablespace FGA:
  /u01/app/oracle/oradata/company/audit.dbf
Job "SYS"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at 15:23:10


6)Platformların endian formatları aynı olduğundan herhangi bir convert işlemi gerçekleştirmeden Oluşan dumpfile ve  transport edeceğimiz tablespace içerisinde bulunan datafile target database taşırız.Taşıma işleminden sonra import işlemini gerçekleştiririz.
C:\>impdp dumpfile=expfga.dmp transport_datafiles='C:\app\Administrator\oradata\
testdb\audit.dbf' directory=impdr logfile=impfga.log
Import: Release 11.2.0.3.0 - Production on Thu Feb 21 17:19:34 2013
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
Username: sys as sysdba
Password:

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit
Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYS"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
Starting "SYS"."SYS_IMPORT_TRANSPORTABLE_01":  sys/******** AS SYSDBA dumpfile=e
xpfga.dmp transport_datafiles='C:\app\Administrator\oradata\testdb\audit.dbf' di
rectory=impdr logfile=impfga.log
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/INDEX/INDEX
Processing object type TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT
Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/AUDIT_OBJ
Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/FGA_POLICY
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "SYS"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at 17:19:43

7)İmport işlemi bittikten sonra transport edilen tablespace read only modda olacaktır. Bu tablespace read write moda alırız.
SQL>alter tablespace fga read write;


Hiç yorum yok: