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,