Menu

19 Nisan 2011 Salı

Oracle Alert Log

Oracle'ın alert.log kronolojik mesajları ve günlük veritabanı işlemi kaynaklanan hataları kaydeder. Ayrıca, Trace files ve dump files incelemek icin vardir.

Alert log icinde asagidaki mesajlar vardir.
  • startup ve shutdown mesajlari
  • Operator konsole mesajlar
  • Tracle files hata nedenleri
  • Database uzerinde CREATE, ALTER ve DROP SQL ifadelerinin tablespce uzerinde kullanilmasi ve rollback segmentlerde.
  • ORA-00600 : Internal(dahili) hatalari
  • ORA-01578 errors (block corruption) 
  • ORA-00060 errors (deadlocks)  
Alert log  text formatindadir ve isteniler bir editor ile acilabilir. BACKGROUND_DUMP_DEST parametersi ile directory`si bulunabilir.
select value from v$parameter where name = 'background_dump_dest';
Eger background_dump_dest belirtilmemisse, oracle alert logu, 
$ORACLE_HOME/diag/RDBMS/dbname/ORACLE_SID/trace directory`i icine yazar.
 
 

18 Nisan 2011 Pazartesi

CETURK AZERBAYCAN, ORALCE KONFERANS

 




  Bugüne kadar Türkiye'de çok farklý konu ve teknoloji ile ilgili yaptýðý ücretsiz etkinliklerle biliþim sektörünün geliþmesine katkýda bulunan CETURK, Türkiye'deki biliþim topluluklarý arasýnda bir ilke daha imza atarak Azerbaycan'da   gerçekleþtireceði Oracle Konferansý ile  yurtdýþý etkinliklerine  baþlýyor. Azerbaycan Oracle Konferansý 7 Mayýs 2001 tarihinde Azerbaycan Teknik Üniversitesi'nde alanýnda uzman konuþmacýlarýn katýlýmýyla ücretsiz olarak gerçekleþecektir.

Konferansa Türkiye'den Talip Hakan Öztürk, Azerbaycan'dan Kamran Agayev, Ramin Orucov ve Teymur Hacýyev katýlacaktýr.

 

  Ayrýntýlý bilgi için týklayýnýz.

 
Etkinliðe kayýt için týklayýnýz.

15 Nisan 2011 Cuma

Windows 7 Yeni Disk yaratma

http://www.sevenforums.com/tutorials/2674-partition-volume-create-new.html

14 Nisan 2011 Perşembe

ORA-00205: error in identifying controlfile, check alert log for more info

SQL>  conn / as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.

Total System Global Area  839282688 bytes
Fixed Size                  2217992 bytes
Variable Size             494929912 bytes
Database Buffers          339738624 bytes
Redo Buffers                2396160 bytes
ORA-00205: error in identifying control file, check alert log for more info

Eger sizde benim gibi yukaridaki hatayi aldiysaniz. sorun ORACLE_SID `nin ASM olmamasidir.

Çözüm; Oracle SID'sini ASM'ye çevirmek..

sqlplus / as sysdba
SQL>shutdown immediate;
exit
2.export ORACLE_SID=+ASM
SQL> startup

yada

SQL> startup force
ORACLE instance started.

Total System Global Area  839282688 bytes
Fixed Size                  2217992 bytes
Variable Size             494929912 bytes
Database Buffers          339738624 bytes
Redo Buffers                2396160 bytes
Database mounted.
Database opened.
SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ WRITE
SQL>

Re: ORA-01102: cannot mount database in EXCLUSIVE mode

Faced the same issue just now... Here's what you do:
First at command prompt check:

ps -eaf | grep smon

You would definitely find 2 entries for the current database...

Export ORACLE_HOME,ORACLE_SID, login to SQL and type:

shutdown immediate

Then logout of sql and again grep for smon... Kill that particular process using kill -9

Then login to SQL and type:

startup

The database would surely startup now.. Try and let us know!

Oracle Initialization Parameters - Ve aciklamalari

  • O7_DICTIONARY_ACCESSIBILITY :  Objeler uzerindeki bir system yetkidir, default degeri false`dir.  Eger true yapilirisa, yetkiler verilen user, her schema`daki table`lar uzerinde sorgu yapabilir.
  • ACTIVE_INSTANCE_COUNT : Bu parameter yanlizca cluster sistemlerde icin kullanilir ve aktif instance sayisini verir.
  • ARCHIVE_LAG_TARGET : Stand by da maximum kaydedilebilir redos sayisi.
  • ASM_DISKGROUPS : ASM instance`de mount olunmus asm disk grublarini verir. Ve ALTER DISKGROUP ALL MOUNT statement`indeki tum degisiklikler bu parametereye yansitilir.
  • ASM_DISKSTRING : Bu parameter belirtilen ASM diskgrouplarin discovery olmasi, ve virgulle ayirarak onlari listemeye yarar, bir diskgroup iki defa discovery olunmaz.
  • ASM_POWER_LIMIT : Bu parametre disklerin defult rebalancing powerini verir. Default degeri 1`dir ve 11`e kadar cikabilir. 0 olursa rebalancing kapali demektir. Bu parametrenin degeri arttikca rebalancing islemi daha hizli bi sekilde tamamlanir, ama I/O cok yuksek olur.
  • ASM_PREFFERED_READ_FAILURE_GROUPS : İleride olası durumlar için tanımladığımız failure, yani başarısızlık gruplarını ifade eden parametredir. Amacı arttırılmış kopyalama ve daha fazla sağlamlık için kullanılacak disk'lerin gruplanmasıdır. Bu parametre yanliz Cluster sistemlerde kullanilir.
  • AUDIT_FILE_DEST : AUDIT_FILE_DEST parametresi audit kayıtlarının nerede tutulacağının set edildiği parametredir.
  • AUDIT_SYS_OPERATION : SYS userının auditlenip auditlenmemesi ile ilgili, eğer SYS userının sessionlarıda auditlenecekse  AUDIT_SYS_OPERATIONS parametresi TRUE olarak set edilmelidir.
  • AUDIT_SYSLOG_LEVEL : Bu parametre sadece Unix ortamlarda kullanılmaktadır. Bu parametre manuel olarak initSID.ora dosyasına eklenilerek set edilebilir. İki farklı değer alabilir.
  • AUDIT_TRIAL :  AUDIT_TRIAL`in acik veya kapali olmasi icin kullanilan parametredir.
    NONEAuditing disable anlamına  gelir.

    Audit_trail parametresini DB olarak set ettiğimizde belirlediğimiz audit kriterlerine uygun sessionlar geldikçe bu tabloda dolmaya başlayacaktır.

    select sessionid, userid, userhost, terminal, actionfrom sys.aud$

    SESSIONID                   USERID    USERHOST                                          TERMINAL                   ACTION#
    14708                                KAMIL      WORKGROUP\KHOME         KHOME                         101




  •  
     

Virtual Box Shared Folders

Host :  Windows 7, guest Oracle enterprise linux,

Asagidaki kod yardimi ile, windows ve linux arasinda dosyalari rahatlikla paylasabiliriz.

# mkdir /tmp/share
# sudo mount -t vboxsf VBox_shared /tmp/share/

13 Nisan 2011 Çarşamba

ORA-00845: MEMORY_TARGET not supported on this system

Yukaridaki hatayi aldigimizda, asagidaki degisiklileri yaparsak sorun cozulmus olur.
# umount tmpfs
# mount -t tmpfs shmfs -o size=1500m /dev/shm
# df -h /dev/shm
Filesystem            Size  Used Avail Use% Mounted on
shmfs                 1.5G  285M  1.2G  19% /dev/shm

Oracle 11gR2 Default Listener - Grid Infrastructure home

Yukaridaki hatayi aldigimizda yapmamiz gereken, grid ile beraber yuklenen listeneri silip yeniden eklemek

How to resolve Could not validate ASMSNMP password due to following error- "ORA-01031: insufficient privileges"

>Oracle 11g R2 grid

goto grid home /bin
[grid@node1 bin]$ orapwd file=/u01/app/11.2.0/grid/dbs/orapw+ASM password=oracle_4U

[grid@node1 dbs]$ scp orapw+ASM Node2:/u01/app/11.2.0/grid/dbs/

[grid@node1 dbs]$ scp orapw+ASM Node3:/u01/app/11.2.0/grid/dbs/

Login in to Oracle database as

export ORACLE_SID=+ASM1

export ORACLE_HOME=/u01/app/11.2.0/grid

[grid@node1 bin]$ sqlplus / as sysasm

SQL>create user asmsnmp identified by oracle_4U;

SQL> grant sysdba to asmsnmp;

12 Nisan 2011 Salı

CRS-4013: This command is not supported in a single-node configuration.

In 11gR2 RAC configuration, after planned shutdown I wanted to start the Grid infrastructure.  So I issued crsctl start crs command, which resulted in following error

# crsctl start crs
CRS-4013: This command is not supported in a single-node configuration.
CRS-4000: Command Start failed, or completed with errors.

Being a development cluster, initially I thought someone have messed up with the RAC configuration by switching OFF the RAC.  So to check the current configuration I issued following commands.
 
cd $GRID_HOME/rdbms/lib
ar -t libknlopt.a | grep -c kcsm.o
(return 0 if RAC is disabled or a number >0 if enabled)

This command returned value 1.  Which means RAC was ON.
There was nothing obvious in the log, which points to the cause of this error. Also CRS was running on other node.
Tried with few more things

# crsctl start resource -all
# /etc/init.d/ohasd start

But still could not start the CRS.
Finally deconfigured the CRS
 
# /oragrid/crs/install rootcrs.pl -deconfig -force

Then again configured it
 
# /oragrid/root.sh

Last approach worked, but I could not ascertain the root cause of this error.

PRCR-1001 : Resource ora.asm does not exist

> srvctl status asm
    PRCR-1001 : Resource ora.asm does not exist

Sizde Benim gibi yukaridaki hata ile karsilastiysaniz, asagidaki adimalari takip ederek sorun cozebiliriz;

> export ORACLE_SID=+ASM

> srvctl add asm -p $ORACLE_HOME/dbs/init${ORACLE_SID}.ora

> srvctl status asm
   ASM is not running.
 
> srvctl start asm
or
> sqlplus '/ as sysasm'
startup 
  
 Asagidaki parametreleri kullanarak ASM hakkinda daha detayli bilgiler gorebilirsiniz.
 
> crsctl status resource ora.asm
NAME=ora.asm
TYPE=ora.asm.type
TARGET=ONLINE
STATE=ONLINE on ertugrula 
 

11 Nisan 2011 Pazartesi

Oracle 11g R2 grid ve ASM kurulumu

Bu Makale Oracle 11gR2 Otomatik Depolama Yönetimi için çeşitli önemli geliştirmeler içeren bir yazı dizisidir.

Hikaye içinde ASM, biz veritabanı sürümü olarak VMWARE, Oracle'ın 11gR2 grid olarak Oracle Linux 5 kullanacağız.

 Gerekli Malzemelerimiz..
Oncelikle Grid infra. kurulumuna gecmeden once ASM`i yukleyelim..
Birde ASM kurulumu icin bize 3 tane paket lazim, Oracle download sitesindeki download tabından "Linux Drivers for Automatic Storage Management" seçmeniz gerekir. Herbir Linux versiyonu için ayrı ayrı ASMLIB RMP paketleri vardır.
Benim kullanacagim

  • oracleasmlib-2.0 - Oracle ASM kütüphanesi
  • oracleasm-support-2.0 - ASMLib yönetimi için gerekli araçlar
  • oracleasm - Oracle ASM kütüphanesi için kernel modülü
 ASM disklerin kurulum icin, root  kullanicisi ile asagidaki gibi kurabiliriz..

          # rpm -Uvh oracleasm-support-2.1.3-1.el4.x86_64.rpm
          # rpm -Uvh oracleasmlib-2.0.4-1.el4.x86_64.rpm
          # rpm -Uvh oracleasm-2.6.9-55.0.12.ELsmp-2.0.3-1.x86_64.rpm

 Daha sonra asm yapilandirilmasi icin, asagidaki komutu griyoruz ve gelen secenekleri, oracle, oinstall, y, y diyerek yapilandirmayi tamamliyoruz..

     # oracleasm configure –I
        Default user to own the driver interface oracle
        Default group to own the driver interface oinstall
        Start Oracle Automatic Storage Management Library driver on boot (y/n): y
        Fix permissions of Oracle ASM disks on boot? (y/n): y

 Aşağıdaki komut ile oracleasm kernel modülü yüklenir:
       # /usr/sbin/oracleasm init 

Paylaşımlı depolama alanındaki fiziksel disklerin formatlanma işleminden sonra ilgili fiziksel disklerde ASM disklerini aşağıdaki gibi oluşturuyoruz. 

Not : VMWare ile Disklerin yaratilmasini http://ertugrulaslan.blogspot.com/2011/04/vmware-ile-asm-disk-yaratmak.html, bu makalemde bulabilirsiniz.

               # oracleasm createdisk data1 /dev/sdb1
               # oracleasm createdisk data2 /dev/sdc1
              # oracleasm createdisk data3 /dev/sdd1

Yukardaki data1 den data3 ya kadar olan ASM diskleri veritabanı veri dosyalarını, redo log dosyalarını ve kontrol dosyalarını saklayacak.
              
Eğer bir diski ASM diski olarak işaretlemekten vazgeçerseniz aşağıdaki komutla bu işlemi tamamlayabilirsiniz.

              # /usr/sbin/oracleasm deletedisk //delete disk
          
 ASM disklerini olusturdukdan sonra, asagidaki gibi, scan edebilir ve listeleyebiliriz.
             #/usr/sbin/oracleasm scandisks    // Scan etmek icin
            #/usr/sbin/oracleasm listdisks    // Listelemek icin etmek icin 

Buraya kadar, ASM disklerin kurulumu ve yapilandirilmasi tamamlandi, bundan sonra grid infras. kurulumuna gecebiliriz..

Oncelikle bize gerekli olan paketleri yuklememiz gerekiyor.. Bu paketleri, CD icinde bulabilirsiniz..

cd /media/Enter... /Server/
rpm -Uvh binutils-2.*
rpm -Uvh compat-libstdc++-33*
rpm -Uvh compat-libstdc++-33*.i386.rpm
rpm -Uvh elfutils-libelf*
rpm -Uvh gcc-4.*
rpm -Uvh gcc-c++-4.*
rpm -Uvh glibc-2.*
rpm -Uvh glibc-common-2.*
rpm -Uvh glibc-devel-2.*
rpm -Uvh glibc-headers-2.*
rpm -Uvh ksh*
rpm -Uvh libaio-0.*
rpm -Uvh libaio-devel-0.*
rpm -Uvh libgomp-4.*
rpm -Uvh libgcc-4.*
rpm -Uvh libstdc++-4.*
rpm -Uvh libstdc++-devel-4.*
rpm -Uvh make-3.*
rpm -Uvh sysstat-7.*
rpm -Uvh unixODBC-2.*
rpm -Uvh unixODBC-devel-2.*
rpm -Uvh numactl-devel-2*
 
- Daha sonra asagidaki Oracle Grid ve Database Server icin gerekli linux ayarlamalarini yapiyoruz.
  
# vi /etc/sysctl.conf
fs.suid_dumpable = 1
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
 
/etc/security/limits.conf    /// icine 
oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  1024
oracle              hard    nofile  65536
oracle              soft    stack   10240 

10 Nisan 2011 Pazar

Oracle 11g Clusterware ile Kullanilabilen Araclar

 Asagida Oracle 11g Clusterware  RAC ile Kullanabilecegimiz araclari ve onlarin ne ise yaradiklari ve nasil kullanilabildiklerini orneklerle gostermeye calisacam..
  • Oracle Universal Installer (OUI) –Oracle grid mimarisi yazılımını kurmaya yarayan grafiksel arayüzlü sihirbaz(Oracle Clusterware and Oracle ASM den oluşmaktadır)
  • Cluster Verification Utility (CVU) – Kümeleme ortamını doğrulamak için kullanılan komut satırı aracıdır. Kurulum öncesi olduğu kadar kurulum sonrasında kümeleme ortamının kontrol edilmesinde kullanılmaktadır.
  • Oracle Enterprise Manager(OEM) –  Tekli instance veya Oracle RAC ortamının yönetilmesini sağlayan web tabanlı grafiksel arayüzlü araçtır.
  • Server Control (SRVCTL) - Oracle Cluster Registry (OCR) içinde belirtilen kaynakları yönetmek maksadıyla kullanılan komut satırı aracıdır.
  • Cluster Ready Services Control (CRSCTL)- Oracle Clusterware bünyesindeki servisleri yönetmek için kullanılan komut satırı aracıdır. Bu servisler Cluster Synchronization Services (CSS), Cluster-Ready Services (CRS), and Event Manager (EVM) dir.
  • Database Configuration Assistant (DBCA) Oracle veritabanı kurmak ve yapılandırmak için kullanılan grafiksel arayüzlü araçtır.
  • Oracle Automatic Storage Management Configuration Assistant (ASMCA) Oracle ASM instanceları, disk gruplarını ve volume ları kurmak ve yapılandırmak için kullanılır. Hem grafiksel arayüzlü hemde komut satırından kullanılabilir.
  • Oracle Automatic Storage Management Command Line utility (ASMCMD)— Oracle ASM instanceları ve Oracle ASM disk grupları yönetmek, disk grupları için dosya erişim kontrolü yapmak ve Oracle ASM disk grupları içinde dizin ve dosyalarının yönetimini yapmak için kullanılan komut satırı aracıdır.
  • Listener Control (LSNRCTL)—Listener yönetiminde kullanılan komut satırı aracıdır.

9 Nisan 2011 Cumartesi

java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1 ORA-12705: invalid or unknown NLS parameter value specified

java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-12705: invalid or unknown NLS parameter value specified
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java :112)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java :278)
        at oracle.jdbc.driver.T4CTTIoauthenticate.receiveOauth(T4CTTIoauthenticate.java:790)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:362)
        at oracle.jdbc.driver.PhysicalConnection .(PhysicalConnection.java:420)
Error en la conexion

Eger Oracle XE database`e baglanirkenyukaridaki hatayi aliyorsuk, sorun, WIndows`un dil ve region ayarlarindandir.

Cozum :
> Control Panel-> Region and Language - > Buradan formati, English(United State ) yapip bilgisayir restart verenden sonra duzelecektir..

7 Nisan 2011 Perşembe

ORA-15027: active use of diskgroup “DATA” precludes its dismount

ASM diskleri silerken bu hatayialirsak yapmamiz gerekenler, diskgroup force command ile dismount ettikden sonra grubu ve icindekileri silebiliriz.

                   SQL> drop diskgroup data including contents;
                         drop diskgroup data including contents
                          *
                         ERROR at line 1:
                         ORA-15039: diskgroup not dropped
                         ORA-15027: active use of diskgroup "DATA" precludes its dismount

asm_clientlere bakiyoruz,

                        SQL> select * from v$asm_client;
                                  no rows selected

kapali gorunuyor, simdi asagidaki adimlari uygularsak sorun cozulecektir.

                        SQL> alter diskgroup data dismount force;
                        SQL> drop diskgroup data force including contents;
                        Diskgroup dropped. 


bash: ./runInstaller: Permission denied

[oracle@ertugrula grid]$ ./runInstaller
bash: ./runInstaller: Permission denied

Eger sizde benim gibi yukaridaki hata ile karsilastiysaniz yapmamiz gereken, permissionlar vermekte asagida oldugu gibi

[oracle@ertugrula grid]$ chmod u+x runInstaller
[oracle@ertugrula grid]$ chmod u+x ./install/.oui
[oracle@ertugrula grid]$ chmod u+x ./install/unzip

Bu kadar :)

5 Nisan 2011 Salı

How to connect to asmcmd

[oracle@ertugrula ~] asmcmd
Connected to an idle instance.
ASMCMD>;

Ozaman   

[oracle@ertugrula ~] export ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid
[oracle@ertugrula ~] export PATH=/u01/app/oracle/product/11.2.0/grid/bin:$PATH

And now change the ORACLE_SID and run asmcmd again
   
[oracle@ertugrula ~] export ORACLE_SID=+ASM

[oracle@ertugrula ~] asmcmd -p

ASMCMD [+] >

1 Nisan 2011 Cuma

Oracle`i Sistemden Elle silmek

Windows

Asagidaki adimlari kullanarak oracle`i windows isletim sisteminden silebiliriz.
  • Uninstall Oracle Universal Installer (OUI).
  • Run regedit.exe ve sil HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE key. Ve bunun icinde Oracle ile ilgili ne varsa butun urunleri silelim 
  • Delete HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Ora*
  • Restart Windows.
  • Delete "C:\Oracle" klasoru, veya sizin ORACLE_BASE.
  • Delete "C:\Program Files\Oracle
  • Temizleyin "c:\temp"
  • Temizleyin cop kutusunu.

UNIX

Uninstalling all products from UNIX is a lot more consistent. If you do need to resort to a manual uninstall you should do something like:
  • Uninstall all Oracle components using the Oracle Universal Installer (OUI).
  • Stop any outstanding processes using the appropriate utilities:
    # oemctl stop oms user/password
    # agentctl stop
    # lsnrctl stop
    Alternatively you can kill them using the kill -9 pid command as the root user.
  • Delete the files and directories below the $ORACLE_HOME:
    # cd $ORACLE_HOME
    # rm -Rf *
  • With the exception of the product directory, delete directories below the $ORACLE_BASE.
    # cd $ORACLE_BASE
    # rm -Rf admin doc jre o*
  • Delete the /etc/oratab file. If using 9iAS delete the /etc/emtab file also.
    # rm /etc/oratab /etc/emtab

28 Mart 2011 Pazartesi

Automatic Storage Management - ASM Nedir

Ismindende anlasilacagi gibi ASM otomatik depolama yonetimidir. Peki ASM disk`ler ile daha once kullandigimiz diskler arasinda ne gibi farklar var onlara bir bakalim.
  1. Datafile isimlendirmesini bizim icin yerine getirmesi.
  2. Logical Volume(Mantiksal kume) yonetimini saglamasi
  3. DBA`nin sistem yoneticisi gibi calismasi daha aza indirgemesi
  4. I/O islemleri sirasinda performans kayiplarinin en aza indirgenmesi
  5. File sistem raw device ve Cluster File sisteme gereksinim hissettirmemesi.
  6. Fiziksel diskler uzerinde yuk dengelemesi
  7. Parcalanma giderilmesi
  8. Bakim kolayligi
  9. Çift veya üçlü aynalar Software RAID-1 veri yedekleme
ASM diskler RAC (Real Application Cluster) ortaminda mukemmle bir uyum saglar, ancak RAC olmayan ortamlardada rahatlikla kullanilabilir.
Asagida ASM ile ilgili konular karsimiza cikacaktir.
  • ASM instance
  • ASM disk yapilandirma
  • Veritabanindan ASM erisim
  • ASM yonetimi
  • Her ASM disk max 4petabyte(pb) olabilir.
  • Her ASM örneğinin depolama 40 exabytes kadar yönetebilirsiniz.
  • Her disk grubu 1 milyon dosya icerebilir.
 
Maximum dosya boyutlari turune gore degisir.
  •    External-redundancy disk group: ASM'nin hiçbir mirroring yapmadığı tiptir. Bu tipte yaratılan disk'e yalnızca yazma gerçekleştirilir ve bir kopyası diğer disk'ler üzerinde bulundurulmaz
  •    Normal-redundancy disk group: 42PB maximum file size (ASM'nin 2 yönlü mirroring yaptığı konfigürasyondur. Bu durumda veri tutarlılığı artar ancak disk alanından taviz verilir.)
  •    High-redundancy disk group: 15PB maximum file size(ASM'nin 3 yönlü mirroring yaptığı konfigürasyondur. Bu durumda veri tutarlılığı artar ancak disk alanından taviz verilir. Daha fazla veri sağlamlığı tesis edilmektedir.)
ASM surucusu bir ASM instance`dir.  Her node basina yanlizca bir ASM instance olusturulur.


ASM sayesinde, ASM icinde bulunana disklerin ne durumda oldugunu, disklerin ne kadar doldugunu dert etmemize gerek yok.
Yaşanabilecek risklerden bir tanesi de farklı tablespace'ler içerisinde bulunacak aynı isimlendirmeye sahip dosyaların taşınması sırasında birbirlerini ezmeleri de ortadan kalkacaktır.

ASM`in bir instance oldugundan bahsetmistik, ve ASM instance`ler klasik instance yapisina cok benzer. Varsayılan olarak 256M kadar SGA alanına sahip olacaktır ve bir ASM instance'ının data dictionary'si yoktur. Yalnızca SYSDBA, SYSOPER ve en önemlisi SYSASM kullanıcılarına sahiptir. 
Asagida ASM instance icinde bulunan bilesenlerden bahsedelim.
  1. Memory SGA
  • Shared Pool
  • Large Pool
  • ASM Cache
  • Free Memory
  2. Process
  • RBAL
  • ARBn
  • LMON
  • GMON
  • Onnn
  • MARK
  • PZ9n
Yukaridada goruldugu gibi ASM instance`ler klasik instancelerden biraz farklidir. Ve klasik instancelerde olan, Buffer cache, log buffer vs sahip degildir.
Cunku ASM sadece sahip oldugu diskleri yoneten bir instance`dir.


Shared Pool: Metada bilgisini içerir.
Large Pool: Paralel operasyonlar için kullanılmaktadır.
ASM Cache: Neyin okunması gerektiğini veya nereye yazılmasını gerektiğini bilir ve rebalance işlemlerinde kullanılır.
Free Memory: Tahsis edilmemiş diğer memory alanı.

Bir ASM instance'ı için otomatik kaynak yönetimi (automatic memory magement) varsayılan olarak aktif haldedir ve bu SGA bileşenlerini, ona tanımlanan yer ölçüsünde yönetir.

Diğer konu ise ASM instance'ının sahip olduğu arka plan görevleri. ASM instance'ının birden çok arka plan görevi olabilir ancak ben olmazsa olmaz olan görevlerden bahsetmek istiyorum;

RBAL: Adından da anlaşılacağı üzere "Rebalance" işlemidir ve ASM disk üniteleri arasındaki verinin dengelenmesi görevini üstlenir.
ARBn: Bir veya birden çok destek görevden oluşan ARBn'in amacı rebalance aktivitesine destek vermektir.
GMON: Disk seviyesindeki aktivitelerin yönetilmesinden sorumludur.
MARK: ASM tahsis ünitelerinin (allocation unit) işaretlenmesinden sorumludur. Allocation unit ile ilgili daha sonra bilgi vereceğim.
Onnn: ASM instance'ına gelecek bağlantıların bir havuzda toplanmasını ve yönetimi sağlayan görevdir. Instance ilk açıldığı zaman ortaya çıkar ve sonra gerektiği zaman yeniden çalışır ve durur.
PZ9n: Bir veya birden fazla paralel göreve sahip olan bu görevin amacı GV$ görüntüsünden cluster sistemler için veri çekmek.

ASM instance'ının bir takım parametreleri bulunmaktadır ve bunları Oracle instance'ı kullanmaktadır;

1) INSTANCE_TYPE
2) ASM_POWER_LIMIT
3) ASM_DISKSTRING
4) ASM_DISKGROUPS
5) ASM_PREFERRED_READ_FAILURE_GROUPS
6) DIAGNOSTIC_DEST
7) LARGE_POOL_SIZE
8) REMOTE_LOGIN_PASSWORD_FILE

INSTANCE_TYPE: Bu parametre bir ASM instance'ı için olmazsa olmazdır ve mutlaka tanımlanması gerekmektedir, zorunlu alandır. ASM instance'ları için "ASM" olarak tanımlanmalıdır. Örnek olarak veritabanı instance'ları için bu tip RDBMS olarak tanımlanmaktadır.


SQL> show parameter instance_type; --> Oracle instance

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_type                        string      RDBMS


SQL> show parameter instance_type; --> ASM instance

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_type                        string       asm

ASM_POWER_LIMIT: RBAL arka plan görevi tarafından sürdürülen rebalance işleminin ne kadar hızlı olacağına karar veren parametredir. Varsayılan olarak 1'dir. En yüksek değeri 11 olabilir ve en hızlı 11 değeri verildiği zaman çalışır. Az önce bahsettiğim gibi yalnızca INSTANCE_TYPE parametresinin tanımlandığı durumlarda 1 olarak kullanılmaktadır.

SQL> show parameter asm_power_limit

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
asm_power_limit                      integer     1

ASM_DISKSTRING: Bu değerin null olması kimi zaman bir ASM instance'ı için yeterli olmaktadır ancak işletim sistemi seviyesinde tanımlanmış disk'lerin dizin adlarını yazdığımız zamansa ASM'nin disk ünitelerinin mount sürelerini uzatabiliriz. Birçok koşulda null olması yeterlidir.

ASM_DISKGROUPS: Bir ASM instance'ının sahip olduğu disk gruplarını göstermektedir. Bu parametrenin de bir varsayılan değeri yoktur ve 11g ile gelen "Oracle Restart" özelliğinde ASM instance'ının sahip olduğu bütün disk gruplar otomatik olarak mount edilir. Bilmiyorum dikkat ettiniz mi çok fazla otomatik kullanıyoruz ve Oracle 11gR2 ile birlikte hayatımız gerçekten otomatik ve kolay hale gelmeye başladı :)

ASM_PREFFERED_READ_FAILURE_GROUPS: İleride olası durumlar için tanımladığımız failure, yani başarısızlık gruplarını ifade eden parametredir. Amacı arttırılmış kopyalama ve daha fazla sağlamlık için kullanılacak disk'lerin gruplanmasıdır.

DIAGNOSTIC_DEST: 11g ile hayatımıza giren bu parametre aslında bir nevi DUMP_DEST olarak düşünülebilir.

ASM hakkinda bilgiye sahip olmamiz icin, oracle`in bize sundugu bir takim view`lar bulunmaktadir.

SQL> SELECT NAME FROM V$FIXED_TABLE WHERE NAME LIKE 'V$ASM%';

NAME
------------------------------
V$ASM_TEMPLATE
V$ASM_ALIAS
V$ASM_FILE
V$ASM_VOLUME
V$ASM_FILESYSTEM
V$ASM_ACFSVOLUMES
V$ASM_ACFSSNAPSHOTS
V$ASM_VOLUME_STAT
V$ASM_CLIENT
V$ASM_DISKGROUP
V$ASM_DISKGROUP_STAT

NAME
------------------------------
V$ASM_DISK
V$ASM_DISK_STAT
V$ASM_DISK_IOSTAT
V$ASM_OPERATION
V$ASM_ATTRIBUTE
V$ASM_USER
V$ASM_USERGROUP
V$ASM_USERGROUP_MEMBER

19 rows selected.

- Bir ASM instance`inin sahibi SYSMAN`dir. ve SYSMAN 11g ile birlikte gelmektedir. ASM instance'ını yönetmek için kullanılan bu sistem hakkı, tam yetkili kullanıcı olan SYSASM'ye devredilmiştir. 10g'de ise SYSDBA herşeyin sahibiydi, buna ASM instance da dahil. Tabii SYSASM sistem yetkisini SYS'ye tanıyarak, ASM instance'ını yönettiredebiliriz ancak 10 için değil. 11g'de SYS kullanıcısı otomatik olarak SYSASM yetkisi ile yaratılmaktadır.

# sqlplus / as sysasm

SQL> startup;
SQL> shutdown abort;

Yukarıdaki komutlarla ASM instance'ını açıp, kapatabiliyoruz. Diğer shutdown seçenekleri de geçerlidir ancak ASM instance'ına hiçbir veritabanı instance'ının bağlı olmaması gerekmektedir aksi halde;

ORA-15097: cannot shutdown ASM instance with connected client

hatasını alırsınız. Yeri gelmişken sıralamadan bahsedelim.

Açarken
1) ASM Instance (MOUNT)
2) Veritabanı Instance (OPEN)

Kaparken
1) Veritabanı Instance (Instance shutdown, veritabanı dismount + closed)
2) ASM Instance (Instance shutdown)

TARTUP komutunu bir +ASM instance'ına verdiğiniz zaman bir kontrol dosyasını mount etmek ve veritabanını açık konuma getirmek (datafile ve redolog'ları kullanılabilir hale getirmek) yerine ASM_DISKGROUPS parametresi içerisinde tanımlanmış disk gruplarını mount etmeye çalışmaktadır. Bu disk grupları içerisindeki bütün disk'lerle olan bağlantı sağlanacak ve disk grupları mount edilecektir. Yine hatırlayacağınız üzere ASM_DISKGROUPS parametresi tanımlanmadan da +ASM hayatını sürdürebiliyordu. Daha sonradan ilgili disk gruplarını mount edebilmek için "ALTER DISKGROUP ... MOUNT" komutunu koşabilirsiniz. NOMOUNT modda ise hiçbir disk grubu mount edilmeyecektir ve yalnızca +ASM açılacaktır (SGA + Arka plan görevleri devreye girecek). RESTRICT özelliği ile +ASM'yi açarsak hiçbir client'ın bu disk'lere erişemeyeceğini belirtebilirim. Genelde bakım süreçlerinde ve disk gruplarına kimsenin erişmesini istemediğimiz zaman bu opsiyon ile +ASM'yi açabilirsiniz. Buradaki veritabanı instance'ı ile farklılık şudur, bir veritabanı instance'ını RESTRICT ile açtığınız zaman veritabanı açılmışken veritabanını bu moddan çıkartabilirsiniz ancak bir ASM instance'ına ait restrict edilmiş disk gruplarını önce DISMOUNT etmek ardından da MOUNT etmeniz ve yeniden kullanıma açmanız gerekir.

SRVCTL hizmeti ile de (Oracle yazılımını kurduğumuz zaman gelen hizmetlerden bir tanesidir) ASM instance'ını açıp kapatabiliriz.

# srvctl start asm -o mount
# srvctl stop asm -f

# srvctl status asm
ASM is running on vals1

Bunun dışında ASMCMD kullanılarakta ASM instance kapatılıp açılabilir.

# asmcmd

ASMCMD> startup [--nomount | --restrict]
ASMCMD> shutdown [--abort | --immediate]

ASMCMD'nin en büyük özelliği unix komutlarını kabul etmesidir. Örneğin ls (list). ASMCMD'nin içerisine girerek, nerede, neyin olduğunu ve bu datafile'ların hangi adlarla kaydedildiğini görebilirsiniz. Örnek olarak /CONTROLFILE dizininin altında ASM kontrol dosyasını bulunduracaktır.

Sırada bir disk grubunun hangi redundancy tiplerine sahip olabileceğini inceleyebiliriz. Bu arada bir disk grubunu SAN'a ait mantıksal alanlara benzetebilirsiniz.

4 Mart 2011 Cuma

double`da virgulden sonraki sayilari yuvarlama

Asagidaki metodu yazip, toplamdan cikan double degeri gonderdigimizde virgulden sonra yanliz 2 rakam gosterecektir.

public double round(double value) {
        int decimalPlace = 2;
        BigDecimal bd = new BigDecimal(value);
        bd = bd.setScale(decimalPlace, BigDecimal.ROUND_UP);
        return bd.doubleValue();
    }

25 Şubat 2011 Cuma

Java DB

connect 'jdbc:derby://localhost:1527/testDB;create=true;user=APP;password=APP';

16 Şubat 2011 Çarşamba

Groovy ile Java Objectlerini XML cevirme

Person.java

public class Person {

    private String name;
    private String surname;
    private Contact[] contacts;

    public Person(String name, String surname, Contact[] contacts) {
        this.name = name;
        this.surname = surname;
        this.contacts = contacts;
    }
..

}

Contact.java

public class Contact {

    private String address;
    private String city;

    public Contact(String address, String city) {
        this.address = address;
        this.city = city;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
}

Test.groovy

def writer = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(writer)

Contact[] cts = new Contact[1];
cts[0] = new Contact("Resid Beh","Baku");
Person per = new Person("Ertugrul", "Aslan",cts)
Contact[] cts2 = new Contact[2];
cts2[0] = new Contact("Nizami","Gence");
cts2[1] = new Contact("Merkez","Sumgayit");
Person per2 = new Person("Hakan", "Dogan",cts2)

java.util.List prs = new java.util.ArrayList()
prs.add(per)
prs.add(per2)

def ob = prs

xml.truck(id:'TestData'){
    persons(){
        ob.eachWithIndex(){
            obj, i ->
            person(){
                name(ob.get(i).getName())
                surname(ob.get(i).getSurname())
                contacts(){
                    ob.get(i).getContacts().eachWithIndex(){
                        objx, x ->
                        contact(){
                            address(objx.getAddress())
                            city(objx.getCity())
                        }
                    }
                }
            }
        }
    }
}

println writer.toString()

//def target = "c:/test.xml"
//File file= new File(target)
//PrintWriter pw = new PrintWriter(file)
//pw.write("\n")
//pw.write(writer.toString())
//pw.flush()
//pw.close()

22 Aralık 2010 Çarşamba

JSF 2 Tutorial Dokuman

http://www.coreservlets.com/JSF-Tutorial/jsf2/


http://www.mkyong.com/tutorials/jsf-2-0-tutorials/

6 Aralık 2010 Pazartesi

Sinav Dokumanlari

http://examlab.tk/scjp6.html

http://scjptest.com/

http://osborne.onlineexpert.com/elearning/

http://emrahkocaman.blogspot.com/

http://www.javaprepare.com/quests/test.html

http://www.dumpsquestions.com/

25 Kasım 2010 Perşembe

Apache Digester Example

package dgstudent;

import java.util.ArrayList;
import java.util.List;

public class Academy {

    private List students;
    private List teachers;
    private String name;

    public Academy() {
        students = new ArrayList();
        teachers = new ArrayList();
    }

    public void addStudent(Student student) {
        students.add(student);
    }

    public void addTeacher(Teacher teacher) {
        teachers.add(teacher);
    }

    public List getStudents() {
        return students;
    }

    public void setStudents(List students) {
        this.students = students;
    }

    public List getTeachers() {
        return teachers;
    }

    public void setTeachers(List teachers) {
        this.teachers = teachers;
    }

    public String getName() {
        return name;
    }

    public void setName(String newName) {
        name = newName;
    }
}



package dgstudent;

public class Course {

    private String id;
    private String name;

    public Course() {
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


package dgstudent;

import java.util.ArrayList;
import java.util.List;

public class Student {

    private List courses;
    private String name;
    private String division;

    public Student() {
        courses = new ArrayList();
    }

    public void addCourse(Course course) {
        courses.add(course);
    }

    public String getName() {
        return name;
    }

    public void setName(String newName) {
        name = newName;
    }

    public String getDivision() {
        return division;
    }

    public void setDivision(String newDivision) {
        division = newDivision;
    }

    public List getCourses() {
        return courses;
    }

    public void setCourses(List courses) {
        this.courses = courses;
    }
}



package dgstudent;

import java.util.ArrayList;
import java.util.List;

public class Teacher {

    private String name;
    private List certifications;

    public Teacher() {
        certifications = new ArrayList();
    }

    public void addCertification(String certification) {
        certifications.add(certification);
    }

    public String getName() {
        return name;
    }

    public void setName(String newName) {
        name = newName;
    }

    public List getCertifications() {
        return certifications;
    }

    public void setCertifications(List certifications) {
        this.certifications = certifications;
    }
}

package dgstudent;

import java.net.URL;
import java.util.List;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;

public class DigestXMLJavaAcademy {

    public void digest() {
        try {
            //Create Digester using rules defined in academyRules.xml
            URL rules = DigestXMLJavaAcademy.class.getResource("./academy-rules.xml");
            Digester digester = DigesterLoader.createDigester(rules);
            //Parse academy.xml using the Digester to get an instance of Academy
            Academy a = (Academy) digester.parse(DigestXMLJavaAcademy.class.getResourceAsStream("./academy.xml"));

            List vStudents = a.getStudents();
            List vTeachers = a.getTeachers();
           
            for(Student s : vStudents){
                System.out.println(s.getCourses().get(0).getName());
            }


        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        DigestXMLJavaAcademy xmlDigest = new DigestXMLJavaAcademy();
        xmlDigest.digest();
    }
}








25 Ekim 2010 Pazartesi

Oracle BI linkler

http://www.gtech.com.tr/demo.aspx

http://www.iszekam.net/

18 Ekim 2010 Pazartesi

Apex 11gr2 Baslatmak

http://oraclue.com/2009/02/17/apex-in-11g-database/

http://iniu.net/content/apex-installation-and-configuration-oracle-database-11g

http://www.gokhanatil.com/2009/01/oracle-10g-veritabanina-apex-31-kurulumu/

4 Ekim 2010 Pazartesi

rman connection authorization


 Logged on to the box with a local user that is a member of both the
local Administrators group and the local ora_dba group.

Connection to db with sqlplus, using local credentials, is quite happy:


C:\TEMP>sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Jun 13 12:23:12 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

But connecting to rman requires me to spell it out ...


C:\TEMP>rman target / nocatalog


Recovery Manager: Release 10.2.0.1.0 - Production on Tue Jun 13

12:23:26 2006

Copyright (c) 1982, 2005, Oracle. All rights reserved.


RMAN-00571: ========================

RMAN-00569: ==== ERROR MESSAGE STACK FOLLOWS ====
RMAN-00571: ======================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04005: error from target database:
ORA-01031: insufficient privileges

C:\Documents and Settings\1oraadmin>rman target sys/*********

Recovery Manager: Release 10.2.0.1.0 - Production on Tue Jun 13
12:50:38 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: EPSREP (DBID=2061389341)
RMAN> quit
Recovery Manager complete.

So, what am I overlooking? I've never before had a problem with "rman

target / nocatalog"

Where did you get NOCATALOG?


just: rman target / will get you in.

--
Daniel A. Morgan
University of Washington
damorgan@xxxxxxxxxxxxxxxx
(replace x with u to respond)
Puget Sound Oracle Users Group
www.psoug.org

Well, this just gets more curious ..


Microsoft Windows [Version 5.2.3790]

(C) Copyright 1985-2003 Microsoft Corp.

C:\Documents and Settings\1oraadmin>sqlplus "/ as sysdba"


SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jun 15 08:21:33 2006


Copyright (c) 1982, 2005, Oracle. All rights reserved.



Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> exit


=== so, things are correctly set up for connecting with local sysdba

credentials

Disconnected from Oracle Database 10g Enterprise Edition Release

10.2.0.1.0 - Pr
oduction
With the Partitioning, OLAP and Data Mining options

C:\Documents and Settings\1oraadmin>rman target /


Recovery Manager: Release 10.2.0.1.0 - Production on Thu Jun 15

08:23:41 2006

Copyright (c) 1982, 2005, Oracle. All rights reserved.


RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04005: error from target database:
ORA-01031: insufficient privileges

C:\Documents and Settings\1oraadmin>


but rman doesn't like it.


For the record, Oracle support finally came up with a solution, but it

raises still more questions. The box had two Oracle homes on it, one
for a single 10g datbase and one for the 10g oem agent. In the PATH
environment variable, the agent home preceeded the db home. Flipping
that -- putting the db home first -- solved the problem and allowed
'c:\rman / target' to connect as it is supposed to. Of course, that
raises the question of why path ordering should matter in this
particular issue ....

Must be something in that home that is different... maybe it couldn't

find the correct $ORACLE_HOME/dbs/passwd... ?

28 Eylül 2010 Salı

Transactions


Transaction’ın kelime anlamı işlem, iş görmedir. Yani veri bloğuna yapılan işlemdir diyebiliriz. Bir grup DML deyiminin session tarafından execute edilmesidir.
Update, Delete, Insert,  Merge, Select For Update, Lock Table deyimlerinden biri ile başlar. Commit ya da rollback ile biter.
‘A’ (Atomicity): Bir tansactionın ya tamamen olması ya da  hiçbir işlemin yapılmamasıdır. Örneğin bankamatikten bir işlem yapan bir kişinin elektrilerin kesilmesi, cihazın bozulması vb durumlar ile yarıda kesilmiş bir işlem karşısında yaptığı işlemlerin hepsi rollback edilerek başlangıç durumuna geri döndürülmesi olayıdır.
                            Sağlıklı bir transaction
                                                Yarıda kesilen bir transaction

‘C’ (Concurency): Veri tabanı tutarlı veri sağlar.
‘I’ (Isolation) : Veritabanına birden fazla kullanıcı erişebilir. Birinin yaptığı işlemi diğerinin yaptığı işlem etkilemez.

 Yukarıdaki örnekte A kişisi Mehmet’in salary bilgisini 500, b kişisi ise Ahmet’in salary bilgisini 300 olarak update işlemi yapıyor. Ama select ettiklerinde sadece kendi değişikliklerini görebiliyorlar çünkü henüz ikisi de commit işlemi yapıp transactionı bitirmediler.


Commit yaptıklarında yani transactionı bitirdiklerinde ise her iki değişikliği de görebilirler.
‘D’ (Durability): Commit edilen işlemlerin veritabanına işlendiğinden emin olunmasıdır.
Transaction Kontrol Deyimleri
       COMMIT : Unique system change number (SCN) atanır. Log writer process (LGWR), SGA’s redo log bufferları redo log file’lara yazar. Oracle rowlarda tutulan kilitleri serbest bırakır. Transactionı bitirir.
       ROLLBACK : Yapılanları geri alır. Rowlarda tutulan kilitleri serbest bırakır. Transactionı bitirir.
       SAVEPOINT : Transaction içinde bir point (noktayı) işaretlemeni sağlar. Bir den çok point de işaretlenebilir.
       ROLLBACK TO : Herhangi bir durumda istenildiğinde işaretlenen pointlere geri dönülmesi sağlar.
       SET TRANSACTION : Transactionın isolation levelının vb belirlenmesini sağlar.
-          Isolation Level
-          Specifying UNDO Segment
Farklı Atomicity’ler
Statement-Level Atomicity : Oracle, Sybase and SQL Server’s ların aksi şekilde hareket eder. 
  
   1: create table t2 ( cnt int );
   2: insert into t2 values ( 0 );
   3: commit;
   1: create table t ( x int check ( x>0 ) );

   1: create trigger t_trigger
   2: before insert or delete on t for each row
   3: begin
   4:    if ( inserting ) then
   5:         update t2 set cnt = cnt +1;
   6:    else
   7:         update t2 set cnt = cnt -1;
   8:    end if;
   9:    dbms_output.put_line( 'I fired and updated '  ||
  10:                                    sql%rowcount || ' rows' );
  11: end;
   1: insert into t values (1);
   2: insert into t values(-1);
   3: select * from t2;


Yukarıdaki gibi check constraint’li bir t tablosu, içinde 0 değeri olan bir t2 tablosu ve insert ve deleteden önce tetiklenecek bir trigger yaratalım. T tablosuna aşağıdaki gibi insert işlemlerini yapmaya çalıştığımızda ilk insertin yapıldığı ikincinin ise yapılmadığı görülmektedir. Yani ilk işlem başarı ile gerçekleşmiş ama oracle tarafından commit işlemi yapılmış kullanıcıya bırakılmıştır, ikincisinde ise işlem başarısız olmuştur.

Başarılı olan işlemler için commit ya da rollback yapmaz. Kullanıcıya bırakır.
Procedure-Level Atomicity : Kullanıcı bir kod bloğunu çalıştırır. Oracle çevresine savepoint yerleştirir. 

   1: create or replace procedure p
   2: as
   3:  
   4: begin
   5:  
   6:         insert into t values ( 1 );
   7:  
   8:         insert into t values (-1 );
   9:  
  10: end;
  11:  
bir p procedure2u yaratalım ve çalıştıralım.

   1: select * from t;
   2: select * from t2;

sorgusu yaptığımızda görüldüğü gibi iki insertü de yapmamıştır. Çünkü ikinci insert hata verdiği için ardışık işlem kesintiye uğramış ve bu yüzden oracle procedure’un başına koyduğu savepointe geri dönmüştür. 

   1: begin
   2:  
   3:     savepoint sp;
   4:  
   5:     p;
   6:  
   7: exception
   8:  
   9:     when others then
  10:         null;
  11:  
  12:         rollback to sp;
  13:  
  14: end;
  15:  

   1: begin
   2:  p; 
   3: exception 
   4: when others then null; 
   5: end; 
   6: / 
   7:  
   8: I fired and updated 1 rows 
   9: I fired and updated 1 rows 
  10:  
  11: PL/SQL procedure successfully completed.
  12:  
  13: select * from t;
  14:  
  15: X
  16: ----------
  17: 1
  18:  
  19: select * from t2;
  20:  
  21: CNT
  22: ----------
  23: 1
  24:  
 
1. insert işlemi gerçekleşir, ikinci de hata oluştuğu için exception bloğuna düşer.
Immediate Constraints :
Sql deyimi bittikten sonra integrity constraints kontrolü yapılır. Aşağıdaki örnekte t tablosu yaratılmış ve 1, 2 değerleri insert edilmiş. Aşapıdaki update işlemi çalıştırıldığında eğer her satırda constraints kontrolüü olsaydı ikinci satırda hata alınırdı ama sql deyimi bittikten sonra kontrol yapıldığı için işlem gerçeklenmekte.


   1: create table t  ( x int unique );
   2:  
   3: insert into t values ( 1 );
   4:  
   5: insert into t values ( 2 );
   6:  
   7: update t set x = x+1;
   8:  
 
Kötü Transactionlar
-          Loop içinde cmmit işlemi yapmak.
-          Autocommit özelliğinin açık olması (default ). 

   1: INSERT INTO T SELECT OBJECT_NAME FROM ALL_OBJECTS;
   2:  
   3: COMMIT; 
   4:  
   5: FOR x in (SELECT * FROM ALL_OBJECTS )
   6:  
   7: LOOP
   8:  
   9:      INSERT INTO T VALUES ( x.object_name);
  10:  
  11:      COMMIT; 
  12:  
  13: END LOOP; 
  14:  
 
Distributed Transactions
Uzak sunucuda da değişiklik yapılıyorsa ya ikisinde de yapar ya da hiçbirinde yapmaz(Atomicity). 2PC protokolünü kullanır.
DDL’ler kendi içinde commit yapar, commit yapılamadığından DDL de yapılamaz.
DDL yapılmasının tek yolu DBMS.JOB ya da Oracle 10g, the scheduler packageile gelen DBMS_SCHEDULER kullanılarak uzaktan bir iş tanımlanır ve bu işlem ile commit yapılabilir.

Autonomous Transactions
Sadece loglama işlemlerinde kullanımalıdır.Transaction içinde transaction yaratarak, commit ve rollback değişikliklerini parent transactiondan bağımsız gerçekleştirir.


Yazan : Bahar Gezici
http://www.bahargezici.com/post/2010/07/28/Turkcell-Staj-e28093-Transactions.aspx