24 Mart 2011 Perşembe

Transportable Tablespace Yöntemi ile Taşınamayan Nesneler İle İlgili Bir Test


Bu aralar yaklaşık 19 tb büyüklüğündeki bir production database’ imizi farklı bir sunucu üzerine migration yapacağımız için kullanacağımız muhtemel yöntemleri ve bu yöntemlerin artılarını ve eksiklerini test etmekle uğraşıyorum. Transportable tablespace bu yöntemlerin en başında geliyor aslında, burdaki en büyük problemlerimizden biride database içerisindeki materialized views’ lerin durumu, zira transportable tablespace bu nesneleri taşımıyor. Bununla ilgili bugün yapmış olduğum bir testi sizlerle paylaşmak istedim.
Transportable tablespace yöntemi ile ilgili olarak daha önce ayrıntılı bir yazı yazmıştım zaten dolayısıyla burda yöntem ile ilgili detaya girmeyeceğim. (http://www.kamilturkyilmaz.com/2010/10/22/transportable-tablespace-yontemi-ile-database-tasimak/)
Testi yaptığım her iki database’ inde Endian formatları aynı olduğundan dolayı rman tarafında herhangi bir convert işlemi yapmayacağım.

SELECT a.platform_name, endian_format
FROM v$transportable_platform b, v$database a
WHERE b.platform_name = a.platform_name

PLATFORM_NAME                                             ENDIAN_FORMAT
—————————————————————  ————–
Linux x86 64-bit                                                    Little
1 row selected

Bu testi yaparken kapsamı biraz daha genişletip public synonym, dblink’ lerin de bu yöntemle taşınamadığını göstermek istedim. Şimdi ilk database’ imizde bu nobjeleri oluşturalım sonrasında taşıyıp sonucuna bakalım.

– public sysnonym’ mizi oluşturalım

create public synonym tester FOR kamil.test
Synonym created

– dblinkimizi oluşturalım

create database link test
connect to KAMIL
identified by xxxxxxx
using ‘alfa’
External database created

– materialized view’ imizi oluşturalım

CREATE MATERIALIZED VIEW kamil.session_log NOCACHE
LOGGING
NOCOMPRESS
NOPARALLEL
REFRESH COMPLETE
START WITH TO_DATE(’10-Mar-2011 15:50:37′,’dd-mon-yyyy hh24:mi:ss’)
NEXT SYSDATE + 360/1440
AS
select * from v$session
Snapshot created
– MV create ettikden sonra oluşan tabloya bir bakalım
select count(*) from kamil.session_log
COUNT(*)
———-
460
1 row selected

Buraya kadar herşey normal, devam ediyoruz,

–  bu test için oluşturmuş olduğumuz tbs_mvtest tablespace’ inin diğer tablespace’ ler ile bir ilişkisi olup olmadığını kontrol edelim.

begin
DBMS_TTS.TRANSPORT_SET_CHECK(‘TBS_MVTEST’,TRUE);
end;
PL/SQL procedure successfully completed
– sonucu select ediyoruz
SELECT * FROM TRANSPORT_SET_VIOLATIONS
0 rows selected

– hiçbir bağımlılığı yok, read only moda alıp meta datanın backupını alalım

alter tablespace TBS_MVTEST read only
Tablespace altered

– expdp için directory create ediyoruz

CREATE DIRECTORY expdp AS ‘/oradata/export/expdp’
Directory created

– exportu alacak user için gerekli yetkilendirmeyi yapalım

GRANT READ,WRITE ON DIRECTORY expdp TO system
Grant succeeded

– çok gerekli değil ama yinede kontrol amaçlı directory’ e bakalım

SELECT * FROM dba_directories where directory_name = ‘EXPDP’
OWNER     DIRECTORY_NAME  DIRECTORY_PATH
SYS           EXPDP                /oradata/export/expdp                                             1 row selected

– expdp ile transportable exportumuzu alalım.

expdp  system/oracle  DIRECTORY=expdp  TRANSPORT_TABLESPACES=TBS_MVTEST TRANSPORT_FULL_CHECK=y DUMPFILE=tbs_mvtest.dmp logfile=tbs_mvtest.log
[oracle@testdb1 expdp]$ expdp system/oracle DIRECTORY=expdp  TRANSPORT_TABLESPACES=TBS_MVTEST TRANSPORT_FULL_CHECK=y DUMPFILE=tbs_mvtest.dmp logfile=tbs_mvtest.log
Export: Release 11.2.0.1.0 – Production on Thu Mar 10 16:33:55 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting “SYSTEM”.”SYS_EXPORT_TRANSPORTABLE_01″:  “********” DIRECTORY=expdp TRANSPORT_TABLESPACES=TBS_MVTEST TRANSPORT_FULL_CHECK=y DUMPFILE=tbs_mvtest.dmp logfile=tbs_mvtest.log
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/COMMENT
Processing object type TRANSPORTABLE_EXPORT/MATERIALIZED_VIEW
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Master table “SYSTEM”.”SYS_EXPORT_TRANSPORTABLE_01″ successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is:
/oradata/export/expdp/tbs_mvtest.dmp
******************************************************************************
Datafiles required for transportable tablespace TBS_MVTEST:
/oradata/SET/TBS_MVTEST_01.dbf
Job “SYSTEM”.”SYS_EXPORT_TRANSPORTABLE_01″ successfully completed at 16:35:04

[oracle@testdb1 expdp]$ ls -lrt
Test için bu database’ imizdeki tüm dataları oluşturduk ve exportunu aldık, buradaki işimiz TBS_MVTEST tablespace’ ine ait dbf ile alınan exportun dmp file’ ini testin ikinci aşamasını yapacağımız sunucuya taşıdıkdan sonra burayla işimiz kalmıyor.

– Yeni ortamda expdp dizininioluşturalım

CREATE OR REPLACE DIRECTORY expdp AS ‘/oradata/export/expdp’ ;

– yetkilerini verelim

GRANT READ,WRITE ON DIRECTORY expdp TO system;

– dbf’ i ait olduğu dizine OS komutları ile taşıdığımızdan dolayı artık meta datayı import edebiliriz

impdp system/oracle TRANSPORT_DATAFILES=’/oradata/export/expdp/TBS_MVTEST_01.dbf’ DIRECTORY=expdp DUMPFILE=tbs_mvtest.dmp LOGFILE=imp_tbs_mvtest.log

– hata aldık, çünkü burada test nesnelerimi oluşturduğumuz KAMIL schemasını create etmeyi unuttuk.(hata aldığım noktaları özellikle belirtmek istiyorum ki aslında bu kısımların hepsinden daha önemli olduğunu düşünüyorum)

[oracle@testdb2 expdp]$ impdp system/oracle TRANSPORT_DATAFILES=’/oradata/export/expdp/TBS_MVTEST_01.dbf’ DIRECTORY=expdp DUMPFILE=tbs_mvtest.dmp LOGFILE=imp_tbs_mvtest.log
Import: Release 11.2.0.1.0 – Production on Thu Mar 10 16:49:57 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table “SYSTEM”.”SYS_IMPORT_TRANSPORTABLE_01″ successfully loaded/unloaded
Starting “SYSTEM”.”SYS_IMPORT_TRANSPORTABLE_01″:  system/******** TRANSPORT_DATAFILES=/oradata/export/expdp/TBS_MVTEST_01.dbf DIRECTORY=expdp DUMPFILE=tbs_mvtest.dmp LOGFILE=imp_tbs_mvtest.log
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
ORA-39123: Data Pump transportable tablespace job aborted
ORA-29342: user KAMIL does not exist in the database
Job “SYSTEM”.”SYS_IMPORT_TRANSPORTABLE_01″ stopped due to fatal error at 16:50:02

– userı create edip importu tekrar deniyoruz
create user KAMIL identified by oracle
User created

– user ile ilgili bir yetki problemine takılmamak için dba yetkisi veriyorum
grant dba to kamil
Grant succeeded

– import ediyoruz

[oracle@testdb2 expdp]$ impdp system/oracle TRANSPORT_DATAFILES=’/oradata/export/expdp/TBS_MVTEST_01.dbf’ DIRECTORY=expdp DUMPFILE=tbs_mvtest.dmp LOGFILE=imp_tbs_mvtest.log
Import: Release 11.2.0.1.0 – Production on Thu Mar 10 16:52:03 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table “SYSTEM”.”SYS_IMPORT_TRANSPORTABLE_01″ successfully loaded/unloaded
Starting “SYSTEM”.”SYS_IMPORT_TRANSPORTABLE_01″:  system/******** TRANSPORT_DATAFILES=/oradata/export/expdp/TBS_MVTEST_01.dbf DIRECTORY=expdp DUMPFILE=tbs_mvtest.dmp LOGFILE=imp_tbs_mvtest.log
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/COMMENT
Processing object type TRANSPORTABLE_EXPORT/MATERIALIZED_VIEW
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job “SYSTEM”.”SYS_IMPORT_TRANSPORTABLE_01″ successfully completed at 16:52:16

Aslında tüm işimiz bitti, şimdi kontrol edebiliriz.

select owner,segment_name, tablespace_name from dba_segments
where owner = ‘KAMIL’
OWNER               SEGMENT_NAME                           TABLESPACE_NAME
KAMIL                  SESSION_LOG                                    TBS_MVTEST
1 rows selected

Yukarıdaki script ile MV’ ye ait tablo geldi ancak hemen belirteyimki refresh statüleri update olmadığından yani onlar tablo ile taşınmadığından güncellenmeyecek, dolayısıyla buna artık MV demek yanlış olacaktır.

– synonym’ e bakalım, oda yok.

select * from dba_synonyms
where synonym_name = ‘TESTER’
0 rows selected

– dblink control ediyorum, maalesef oda yok J

SELECT
‘create ‘||DECODE(U.NAME,’PUBLIC’,'public ‘)||’database link ‘||CHR(10)
||DECODE(U.NAME,’PUBLIC’,Null, U.NAME||’.')|| L.NAME||chr(10)
||’connect to ‘ || L.USERID || ‘ identified by ”’
||L.PASSWORD||”’ using ”’ || L.host || ””
||chr(10)||’;’ TEXT
FROM sys.link$ L,
sys.user$ U
WHERE L.OWNER# = U.USER#
and u.name = ‘KAMIL’
0 rows selected

Tabi ben burda zaten transportable tablespace’ in olumsuz yönlerini belirtmek istediğim için seçerek bunları gösterdim. Zira kafanızda bu yöntem zaten hiç birşeyi taşımıyormuş gibi algı oluşturmak istemem.
Testin yöntem ile ilgili bazı soru işaretlerini umarım silmenize yardımcı olmuştur.
Bir başka yazıda görüşmek dileğiyle,

Hiç yorum yok: