10 Mayıs 2011

Oracle Database 11g Release 2 versiyonuna Upgrade Pathleri

Merhaba,

Oracle 11g R2 ye upgrade edeceğimiz databaseler için daha eski versiyonların bir kısmında farklı path ler izlemek gerekebilmektedir.

Örneğin; şu anki database versiyonumuz 8.1.6 olsun. İzlememiz gereken adımlar şunlar olmalıdır.

8.1.6 versiyonunu 8.1.7.4 ye upgrade etmemiz gerekmektedir. (Oracle8i Database Migration, Release 3 (8.1.7)). Daha sonra,

8.1.7.4 versiyonumuzu 10.2.0.4 e upgrade edebiliyor oluruz ki buda 11g R2 ye geçmeden önceki son step olacaktır. (Oracle Database Upgrade Guide 10g Release 2 (10.2)) Ve son olarak;

10.2.0.4 versiyonumuzu Oracle Database 11g Release 2 versiyonuna upgrade ediyoruz.


Yukarıdaki grafikte upgrade için önerilen Oracle versiyonlarını ve yükseltmemiz gereken versiyonları görebilmektesiniz.

29 Nisan 2011

Oracle Restart ve srvctl komutları

Merhaba,

Daha önceki konumuzda Oracle Restart komutları üzerine konuşmuştuk. Bu konudada Oracle Restart (ohasd) servisinin nasıl çalıştığını ve daha sonra bir database ve asm disk grubunu nasıl register edebileceğimiz üzerine biraz konuşalım.

Aşağıdaki komutla beraber "orcl" veritabanımıza hangi servislerin kayıtlı olduğunu, parametre dosyamızın yerini, ORACLE_HOME path imizi ve veritabanımızın primary/standby olup olmadığını anlayabiliriz.


Aşağıdaki örnekte ise orcl instance ına ait lgwr background process sini elimle kill ediyorum ve herhangi bir müdehaleye gerek kalmadan process i tekrar yarattığını görebiliyorum.


Eğer Oracle Restart komutlarına register etmediğim bir servis olsa idi veritabanım hang olacak ve veritabanıma startup komutunu göndermek zorunda kalacaktım.

Son olarak bir veritabanı nasıl otomatik restart komutlarından enable/disable edilir bir bakalım.

 
 
Bu tarz senaryoları çok daha detaylı şekilde Oracle 11g RAC and Grid Infrastructure Administration Accelerated Release 2 Eğitimi konuları içerisinde bulabilirsiniz.

Oracle 11g R2 Standalone Server ve Oracle Restart komutları

Merhaba,

11g R2 ile beraber Oracle Real Application Cluster (RAC) yapısında kullandığımız "srvctl" komutu ile beraber gelen merkezi yönetim komutlarını standalone server üzerindede kullanılabilir hale getirdiğini görüyoruz.

11g R2 kurulumunda eğer Oracle Grid Infrastructure for Standalone Server seçeneğini seçip kurulumu yapar isek OHASD (Oracle High Availability Service Deamon) yani Oracle Restart komutlarını aktif hale getirmiş oluyoruz (root.sh bunu yapmak üzere konfigure edilmiş).

"srvctl" komutu ile beraber hangi servisleri yönetebiliriz sorusunun cevabını hemen verelim ....
Database instances
Oracle Net listener
Database services
Automatic Storage Management (ASM) instance
ASM disk groups
Oracle Notification Services (ONS/eONS)

Evet ... Yukarıda adı geçen herbir servis yada herhangi bir yada birkaçını Oracle Restart'a register edip server'ın tutarsız yada istenmeyen bir durumda kapanması ve açılması durumunda yada herhangi bir background processin hang olması durumunda register olan bütün servislerin otomatik olarak başlatılmasını sağlamış oluruz.

Yeni yarattığınız bazı servisler otomatik olarak ohasd servislerine eklenirler. Örnek:

Create a database with OUI or DBCA
Create an ASM instance with OUI, DBCA, or ASMCA
Create a disk group (any method)
Add a listener with NETCA
Create a database service with SRVCTL
Ama aşağıdaki servisleri sizin register ediyor olamanız gerekir. Örnek:
Create a database service by modifying SERVICE_NAMES initialization parameter
Create a database service with DBMS_SERVICE.CREATE SERVICE                
Create a database with SQL statement    
Genel olarak servisleri kontrol etmek için kullandığımız komut
srvctl status database -d burak
 Servisleri başlatmak/durdurmak için kullandığımız komutlar ise:


$ srvctl start database –d burak –o open
$ srvctl start listener –l listenername
$ srvctl start service –d burak –s "service1,service2"
$ srvctl start diskgroup –g "DATA,FRA"
$ srvctl start asm
$ srvctl start eons -v
$ srvctl start ons

$ srvctl stop database –d burak –o immediate
$ srvctl stop listener –l listenername -f
$ srvctl stop service –d burak –s "service1,service2"
$ srvctl stop diskgroup –g "DATA,FRA" -f
$ srvctl stop asm –o immediate -f
$ srvctl stop eons -v
$ srvctl stop ons 

29 Mart 2011

oracleegitimi.com yayında ....

Arkadaşlar merhaba,

Eğitimlerimin yoğunluğundan dolayı arada sıradada olsa yazmaya çalışıyorum. Buarada Bilginç IT Academy eğitmenlerinin yazılarını yayınlayacağı forum tadında bir siteyi hayata geçirdik ve ortalama 1 ay kadar bir süredir karşılaşılan hatalar, başınıza gelebilecek önemli işler, tuning ile ilgili bilgiler ve/veya genel bilgiler olmak üzere aklımıza ne gelirse, hangi sorunlarla karşılaşırsak, o an ne ile uğraşıyorsak onunla ilgili bir şeyler yazıp yayınladığımız bir forum olmasını ve ziyaret edenlerin birşeyler öğrenip gideceği bir blog olmasını temenni ederek yola çıktık. Evet hadi geçelim bizim siteye bir göz atalım .... :)

oracleegitimi.com

1 Mart 2011

DML Statement Auditlenmesi ve DBMS_FGA

Bu yazımda Insert, Update, Delete ve bunlara ek olarak Select cümlecikleri için specific audit yaratmak üzerine bilgiler paylaşıyor olacağım.

Öncelikle bu işi yaparken hangi objeleri, hangi kolonları ve hangi kriterleri sağlayan statementların audit lenmesi gerektiğini tasarlamamız gerekir. Örneğin;

begin
dbms_fga.add_policy (
object_schema => 'burak',
object_name => 'deneme',
policy_name =>  'audit_deneme_maas',
audit_condition =>  'department=90',
audit_column =>  'maas',
enable =>  TRUE,
statement_types=>  'select' );
end;

Yukarıdaki blogumuzda yarattığımız policy ile "Burak" schema sındaki "Deneme" tablosuna gelen, koşulunda "maas" kolonu ve "department=90" koşullarının geçtiği "Select" cümleleri için audit aktif hale getirmiş olduk.

Hangi sorgular audite takılır, hangiler takılmaz? ....

SELECT column1,column2 FROM burak.deneme; ---- Policy çalışmaz.
SELECT maas FROM burak.deneme; ---- Policy çalışır.
SELECT column2,maas FROM burak.deneme WHERE department = 90; --- Policy çalışır.
SELECT count(*) FROM burak.deneme WHERE department = 90 AND salary > &maas_gir; --- Policy çalışır.
SELECT maas FROM hr.employees; --- Policy çalışır.
SELECT column3 FROM hr.employees WHERE department = 90; --- Policy çalışmaz.
"Policy çalışmaz" olarak not düştüğümüz örnekler audit devreye girmeyecek olan statementlardır.

Auditlenen statementlar ise aşağıdaki tablodan sorgulanabilir.

SELECT to_char(timestamp, 'YYMMYYHH24MI') AS timestamp, db_user, policy_name, sql_bind, sql_text
FROM dba_fga_audit_trail;
 
Bu tarz senaryoları çok daha detaylı şekilde Oracle Database 11g Administration Workshop I Release 2 Eğitimi ve Oracle Database 11g Security DBA Release 2 Eğitimi konuları içerisinde bulabilirsiniz.

28 Şubat 2011

CREATE DATABASE komutu ile database yaratmak

Öncelikle Windows ortamlarda
oracle> set ORACLE_SID=deneme komutu ile,
Linux ortamlarda ise
oracle> export ORACLE_SID=deneme komutu ile instance ismimizi belirtiriz.

Kontrol edelim,
Windows için --> oracle> echo %ORACLE_SID%
Linux için --> oracle> echo $ORACLE_HOME

Daha sonra yapılacak işlem ise bir servis üzerinden (servislerle ilgili yazımda anlatmıştım) idle olan database bağlantısını gerçekleştirmek.

Bu arada D:\app\oracle\product\11.2.0\dbhome_1\database\initdeneme.ora dosyasını yaratıp içerisine sadece DB_NAME=deneme yazıp kaydedelim. Bu dizin Linux için u01/app/oracle/product/11.2.0/dbhome_1/dbs/initdeneme.ora olmalıdır.


oracle> sqlplus /nolog
SQL> conn sys/oracle@deneme as sysdba

SQL> create database deneme
LOGFILE GROUP 1 ('D:\app\oracle\oradata\deneme\redo01.log') SIZE 50M,
GROUP 2 ('D:\app\oracle\oradata\deneme\redo02.log') SIZE 50M,
GROUP 3 ('D:\app\oracle\oradata\deneme\redo03.log') SIZE 50M
character set WE8ISO8859P1
national character set utf8
datafile 'D:\app\oracle\oradata\deneme\system01.dbf' size 100M autoextend on next 10M maxsize unlimited extent management local
sysaux datafile 'D:\app\oracle\oradata\deneme\sysaux.dbf' size 100M autoextend on next 10M maxsize unlimited
undo tablespace undotbs1 datafile 'D:\app\oracle\oradata\deneme\undotbs1.dbf' size 100M
default temporary tablespace temp tempfile 'D:\app\oracle\oradata\deneme\temp01.dbf' size 100M;

Sample schema ları daha sonradan kurmak istersek USERS Tablespace ide hazırda bulunsun.

SQL> CREATE TABLESPACE users DATAFILE 'D:\app\oracle\oradata\deneme\users01.dbf' SIZE 25M AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;

Evet, geriye kalan

SQL> alter database mount;
SQL> alter database open;
SQL> select instance_name,version,status,database_status from v$instance;

INSTANCE_NAME VERSION STATUS DATABASE_STATUS
---------------- ----------------- ------------ -----------------
deneme 11.2.0.1.0 STARTED ACTIVE


Hayırlı olsun ....

23 Şubat 2011

SQL92_SECURITY parametresi

SQL92_SECURITY, Oracle initialization parametrelerinden biridir.
Default değeri "FALSE" dir. Static bir parametredir yani değişmesi durumunda database restart gerekmektedir. Eğer "TRUE" ya getirir isek; kullanıcılar bir tabloya UPDATE veya DELETE yaparken set veya where koşullarında geçen alanlara SELECT çekme hakkınada sahip olması gerekliliğini aramaktadır. Örneğin;

update table_name
set column_name1=yeni_deger
where column_name2=kosul;


Yukarıdaki statementi çalıştıran kimse aşağıdaki select ide çalıştırabiliyor olmalı koşulunu arar.

select column_name1,column_name2 from table_name;

DBA_TAB_PRIVS ve ROLE_TAB_PRIVS view larından bu haklara sahip olmayan kullanıcılar belirlenebilir.

17 Şubat 2011

Geri Dönüş

Merhaba,

2008 yılında açtığım bloğumu pek fazla kullanmadığımı (hiç kullanmadığımı demek daha doğru olacaktır) farkettim ve bugün itibari ile işinize yarayabileceğini düşündüğüm ufak tefek bilgileri sizinle paylaşmaya çalışacağım. Sizlerinde paylaşmak istedikleri yazılar olursa bunlarıda değerlendirmeyi düşünüyorum.

Mail adresim:   burak.uysal@yahoo.com


görüşmek üzere ....

tkprof – trcsess trace komutları

Bu yazım boyunca trcsess ve tkprof komutlarının nasıl kullanılacağını anlatıyor olacağım. Öncelikle bir komut satırı açarak trace ettiğimiz session ve/veya servisler ile ilgili trace file ların bulunduğu dosya altına gidiyoruz. Bu dosya Oracle 11g R1 ve sonrası için aşağıdaki uzantılarda bulunabilir.

Linux --> $ORACLE_BASE/diag/rdbms/sid/sid/trace/
Windows --> $ORACLE_BASE\diag\rdbms\sid\sid\trace

trcsess komutunun parametreleri aşağıdaki gibidir:

trcsess [output=output_file_name] [session=session_id] [clientid=client_identifier] [service=service_name] [action=action_name] [module=module_name] []

Daha sonra trcsess komutuna input dosyarını vermelisiniz. Örneğin;

oracle> trcsess output=tracedosyam.trc $ORACLE_BASE/diag/rdbms/orcl/orcl/trace/*.trc

Input dosyalarını verirken belirli kısıtlamalar yapabiliriz. Örneğin;

oracle> trcsess output=tracedosyam.trc service=service_name module=module_name $ORACLE_BASE/diag/rdbms/orcl/orcl/trace/*.trc

Bu kısıtlamalar trcsess komutunun oluşturacağı output dosyasının büyüklüğünü ve sizin aradığınız verileri bulmanızda zorlanmamanızıda sağlayacaktır.

trcsess komutunun output dosyasına bir örnek:

*** [ Unix process pid: 1907 ]
*** 2011-02-02 05:19:19.19
*** 2011-02-02 05:19:19.19
*** 2011-02-02 05:19:19.19
*** 2011-02-02 05:19:19.19

====================
PARSING IN CURSOR #4 len=23 dep=0 uid=82 oct=3 lid=82 tim=1256987632548698 hv=4584569525 ad='34b8f852' sqlid='f34brkbt8brk5'
select * from mytable
END OF STMT
PARSE #4:c=45698,e=52459,p=35,cr=403,cu=0,mis=1,r=0,dep=0,og=1,tim=1254589632547895
EXEC #4:c=0,e=16,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=1478596541235896
FETCH #4:c=1000,e=581,p=6,cr=6,cu=0,mis=0,r=1,dep=0,og=1,tim=1124589632545896
FETCH #4:c=0,e=45,p=0,cr=1,cu=0,mis=0,r=15,dep=0,og=1,tim=1785421358965412

FETCH #4:c=0,e=49,p=0,cr=1,cu=0,mis=0,r=1,dep=0,og=1,tim=1456785412563987
STAT #4 id=1 cnt=107 pid=0 pos=1 obj=70285 op='TABLE ACCESS FULL MYTABLE (cr=15 pr=6 pw=6 time=0 us cost=3 size=7276 card=107)'
*** [ Unix process pid: 1908 ]
*** 2011-02-02 05:29:29.29
*** 2011-02-02 05:29:29.29
*** 2011-02-02 05:29:29.29
*** 2011-02-02 05:29:29.29


Bu dosyayı formatlamak için kullandığımız komut ise tkprof

tkprof inputfile outputfile [waits=yes|no] [sort=option] [print=n] [aggregate=yes|no] [insert=sqlscritfile] [sys=yes|no] [width=n] [table=schema.table] [explain=user/password] [record=statementfile]

Örneğin;

oracle> tkprof inputfile= tracedosyam.trc outputfile= selecttrace.trc sys=no table=schema.mytable


...
select max(column_name)
from mytable
where column_name=’Literal’


call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- -------
Parse 1 0.01 0.01 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 2 0.21 0.20 307 311 0 1
------- ------ -------- ---------- ---------- ---------- ---------- -------
total 4 0.22 0.11 307 311 0 1

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 31

Rows Row Source Operation
------- ---------------------------------------------------
1 SORT AGGREGATE (cr=307 pr=311 pw=0 time=52845 us)
77 TABLE ACCESS FULL MYTABLE (cr=307 pr=311 pw=0 time=11524 us)