joomla templates Data Warehouse Türkiye

Thu09012011

Last update07:32:32 PM GMT

Çarşamba, 25 Mayıs 2011 19:17

DBMS_STATS Paketi Nedir ve Kullanımı / ANALYZE Komutu

Yazan&Gönderen Ogan Ozdogan
DBMS_STATS

DBMS_STATS paketi 9i ile birlikte aramıza katılan ve Oracle veritabanının kurulumu ile gelen bir "built-in" pakettir. Bu paketin amacı Cost Based Optimizer (CBO) için gerekli istatistikleri, objeler üzerinde toplamaktır. DBMS_STATS paketini ya da ANALYZE ifadesini kullanarak istatistikleri toplamanız mümkündür ancak Oracle 9i ile birlikte DBMS_STATS paketinin kullanılması tavsiye edilmektedir. Bu konuyla ilgili bir OTN forumuna cevap yazmıştım. Buradan görebilirsiniz.
Çarşamba, 25 Mayıs 2011 19:05

SQL Nedir, Parse Call ve Plan / Optimizer

Yazan&Gönderen Ogan Ozdogan

SQL

SQL hakkında 2008 yılından kalma bir yazı yazmıştım. Buradan ulaşabilirsiniz. Bu yazımda biraz SQL'in ne olduğundan, hangi amaçlara hizmet ettiğinden bahsedeceğim ve ardından optimizer ile olan ilişkisinden, SQL planından ve SQL çalışma mantığından bahsedeceğim.

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. Burdan ulaşabilirsiniz

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

[]$ 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

[]$ 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)

[]$ 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

[]$ 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,

Salı, 05 Nisan 2011 23:02

Oracle İnitial Parametreleri

Yazan&Gönderen Kamil TURKYILMAZ

Oracle da database’ ini startup ile açmaya kalktığımız da instance ilk iş olarak parametre dosyasını okumaya çalışacaktır. Dolayısıyla temel initial parametrelerinden bahsederken bizim için çok kritik file’ lerimizden biri olan spfileSID.ora dosyasından da kısaca bahsedeceğiz.

Parametre dosyaları Linux’ da;  $ORACLE_HOME/dbs,  Windos’da $ORACLE_HOME/database  altında bulunur. Database create edilmesiyle birlikte spfileSID.ora dosyamızda oluşur.  Bunun yanısıra parametre değişikliğini database içirisinden Alter system veya Alter database ile yapmak istemediğimiz veya yapamadığımız durumlarda ise kullandığımız birde pfileSID.ora dosyamız olacaktır.

Salı, 05 Nisan 2011 20:29

Global Temporary Table Oluşturmak

Yazan&Gönderen Kamil TURKYILMAZ

Oracle’ da tablo create ederken eğer tablonun tipinibelirtmez iseniz default olarak ilişkisel ve kalıcıolarak tablonuzu oluşturacaktır. Create table komutunuziçerisinde global temporary ifadesini kullanırsanıztemporary segmentlerde tutacağınız geçici bir tablocreate etmiş olursunuz. Temporary tabloları normal tablolardan çok farklı olarak düşünmemek gerekir, bildiğimiz yöntem (create table ile ) ile create etmişolduğunu tablolar üzerinde neler yapabiliyorsanız burada da yapabilirsiniz. Temporary olmasından kaynaklıolarak, temporary olarak create edilmiş bir tablo tümsessionlar tarafından görülebilir ve sadece o sessioniçerisinde varlığını idame ettirir, session sonlandığındatemporary table’ da otomatik olarak drop olacaktır.

Sayfa 1 / 10