Azerbaycan ORACLE Konferansında Buluşalım!…

Merhaba Arkadaşlar,

Azerbaycan Teknik Üniversitesinde düzenleyeceğimiz ORACLE Konferansına davetlisiniz. Konferansa katılamayanlar için video görüntüleri ceturk.com da yayınlanacak. Konferans hakkında ayrıntılı bilgi ve kayıt  için  http://www.ceturk.com/ceturk-azerbaycan-oracle-konferansi

Reklamlar

Oracle Veritabanı Adının Değiştirilmesi

Çok nadir olsa da bazen veritabanımızın adını değiştirmemiz gerekebilir. Bu yazımda Oracle veritabanı adının nasıl değiştirileceğini adım adım numaralandırarak sizlere anlatacağım. Varolan veritabanımızın adı “MYDB” değiştirmek istediğimiz veritabanı adımız “TALIPDB” olsun.

1- İşletim sistemi üzerinde mevcut control file ların yedeği alınır.

$ mv talip_ctl_1.ora talip_ctl_1.ora.old

$ mv talip_ctl_2.ora talip_ctl_2.ora.old

$ mv talip_ctl_3.ora talip_ctl_3.ora.old

2- Sqlplus a “sys” kullanıcısıyla bağlanılır ve controlfile ın trace i alınır

SQL> Alter database backup controlfile to trace; 

3- “udump” altında oluşturulan trace script file olarak kaydedilir.

$ mv mydb_ora_24273.trc controlfile_script.sql

4- Oluşturulan script “vi” ile açılarak aşağıdaki gibi editlenir.

A- Aşağıdaki satıra kadar olan bütün satırlar silinir.

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE “MYDB” RESETLOGS NOARCHIVELOG

B- Yukarıdaki satırda REUSE ifadesi yerine aşağıdaki gibi SET ifadesi yazılır ve DB nin yeni adı yazılır.

CREATE CONTROLFILE SET DATABASE “TALIPDB” RESETLOGS NOARCHIVELOG

C- Scriptin en alt kısmında bulunan aşağıdaki ifade silinir ve kaydedilir.

RECOVER DATABASE USING BACKUP CONTROLFILE;

Scriptin son hali aşağıdaki script gibi olacaktır.

STARTUP NOMOUNT

CREATE CONTROLFILE SET DATABASE "TALIPDB" RESETLOGS  NOARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 '/oracle/ora11g/oradata/redo01.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 2 '/oracle/ora11g/ oradata/redo02.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 3 '/oracle/ora11g/ oradata/redo03.log'  SIZE 50M BLOCKSIZE 512,

DATAFILE

  '/oracle/ora11g/oradata/system01.dbf',

  '/oracle/ora11g/oradata/sysaux01.dbf',

  '/oracle/ora11g/oradata/undotbs01.dbf',

  '/oracle/ora11g/oradata/users01.dbf',

  '/oracle/ora11g/oradata/example01.dbf',

  '/oracle/ora11g/oradata/myts01.dbf'

CHARACTER SET WE8ISO8859P9

;

ALTER DATABASE OPEN RESETLOGS;

ALTER TABLESPACE TEMP ADD TEMPFILE '/oracle/ora11g/oradata/temp01.dbf'

     SIZE 441450496  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M; 

5- Veritabanı kapatılır.

SQL> shutdown immediate; 

6- $ORACLE_HOME/dbs dizini altında bulunan init<SID>.ora dosyası yedeklenir ve vi ile açılıp db_name, instance_name parametreleri yeni db adıyla değiştirilip kaydedilir.

7- Sqlplus da daha önce oluşturduğumuz ve düzenlediğimiz control file script çalıştırılır.

SQL> @/oracle/controlfile_script.sql 

8- Veritabanımız açıldığında yeni adıyla hizmet verecektir. Emin olmak için aşağıdaki select ile yeni adımızı öğrenebiliriz.

SQL> SELECT NAME FROM V$DATABASE;

Talip Hakan ÖZTÜRK

Oracle WRAP Utility

Oracle WRAP UTility

Merhaba Arkadaşlar,

Bu yazımda sizelere “WRAP” aracının ne olduğunu? PL/SQL kodlarımızı bu araç ile nasıl gizleyebileceğimizi anlatacağım. Oracle, yazdığı paketlerin (internal packages olarak bilinir) içeriğini wrap ile gizlemektedir. Mesela DBMS ile başlayan DBMS_JOB, DBMS_SCHEDULE, v.s paketlerin body kısmını görmek istediğimizde aşağıdaki gibi gizlenmiş olarak görmekteyiz.

CREATE OR REPLACE PACKAGE BODY SYS.dbms_job wrapped
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
21a3 b16
lo1iuGKabyEptQ7AYEgtdK75BmEwg5Wr3l4FYKAPamS0YVj3PRYchH0hld1fVjvwrMuAW69P
IRpr66AU9anSde7G/s0SEqGnRq1lMtPIv5oS+LkLjWMsdviZ/8mTU+AsGapF4qqdz3JR4PZt
fzqcP2JOVo84jcefz+RAsEnvMxsTLRYBAxaBTlykY2wPpW6+XqZvj/lmCFhU18E/3TEWpRQb
5qZckusO2rpG787GwuV+s2zCeeXxFg4vs4uaQo05AYljfhxjOKSSbLg3TUk/VlckCE6PhXK/
...
/

Bizde Oracle kurulumu ile gelen “WRAP” aracını kullanarak yazdığımız procedure, function veya paketleri gizleyebiliriz. Oracle 10g R2 ile birlikte DBMS_DDL paketi yardımı ile de dinamik kod gizleme işlemi yapabiliriz. WRAP komutu işletim sistemi üzerinde çalışan bir araçtır. Kullanım prototipi aşağıdaki gibidir.

wrap iname=input_file  oname=output_file

Burada iname, bizim içeriğini gizleyeceğimiz PL/SQL kod bloğudur. Oname ise gizlenmiş kod bloğunun kaydedileceği dosya adıdır. Oname belirtmeyebiliriz. Bu durumda source kodun bulunduğu dosya adı(input_file) “.plb” uzantısıyla kaydedilir. Aşağıdaki gibi bir prosedürümüz olsun. Ve “WRAP” aracını kullanarak içeriğini gizleyelim.

CREATE OR REPLACE PROCEDURE talip_test AS
BEGIN
  DBMS_OUTPUT.PUT_LINE('Test proseduru');
END;
/

Yukarıdaki prosedürü talip_test.sql adıyla işletim sistemi üzerine kayıt edelim. “WRAP” ile içeriğini aşağıdaki gibi gizleyelim.

$ wrap iname= talip_test.sql
PL/SQL Wrapper: Release 11.2.0.1.0- Production on Thu Mar 10 13:50:13 2011
Copyright (c) 1993, 2009, Oracle.  All rights reserved.
Processing talip_test.sql to talip_test.plb

talip_test.plb isimli gizlenmiş kod bloğumuz oluştu. Bir editör ile baktığımızda içeriği aşağıdaki gibidir.

CREATE OR REPLACE PROCEDURE talip_test wrapped
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
4d 89
BnIWMXkTu2kwu8RXi1DM+jgMrZUwg5nnm7+fMr2ywFwWoUf6VuOWoWLRzLh0i8DAMv7Shglp
uFKbskr+KLK957KzHQYwLK4k6rKBL8jlrFHkBneJJVEJMi720eokH/Y5pqcyH4I=
/

Gizlenmiş yukarıdaki kodu veritabanına direk deploy edebiliriz. Deploy ettikten sonrada problemsiz kodumuzu aşağıdaki gibi çalıştırabiliriz.

SQL>exec talip_test;

Talip Hakan ÖZTÜRK

Oracle DBA için Linux Komutları

Merhaba Arkadaşlar bu yazımda bir Oracle DBA in bilmesi gereken Linux komutlarını sizlerle paylaşacağım. Aklıma gelen komutları ilerleyen zamanlarda da bu makaleye ekliyor olacağım.

mounting disk:
——————————
1- önce diski mount edeceğimiz klasör oluşturulur.
mkdir /media/newdisk
mkdir /DATA

FAT32 olarak mount etmek için :
mount -t vfat -o umask=ooo /dev/hdb1 /media/newdisk

NTFS olarak mount etmek için:
mount -t ntfs -o umask=0222 /dev/hdb1 /media/newdisk

CDROM u mount etmek için:
mount -t iso9660 -r /dev/cdrom /media/cdrom

OCFS2 olarak mount etmek için:
mount -t ocfs2 -o noatime,_netdev,datavolume,nointr /dev/emcpowera1 /DATA

EXT3 olarak mount etmek için:
mount -t ext3 /dev/sdb1 /software

unmounting disk:
————————–
umount -l /dev/sdb1
umount /DATA

Partitioning
—————
fdisk /dev/sdb

Formatting
————

EXT3 olarak formatlamak için:

mkfs -t ext3 /dev/sdb1

OCFS2 olarak formatlamak için:

mkfs.ocfs2 -b 4K -C 128K -N 5 -L /DATA /dev/emcpowera1

FILE SYSTEM CHECK
———————————————
fsck.ocfs2 -n /dev/sdf2
fsck.ocfs2 -y /dev/sdf2 –>repair
List drives
————–
df -h

tmpfs artırma
—————————————————-
mount -t tmpfs shmfs -o size=3g /dev/shm

Getting user id
———————–
id username
id oracle

Bir klasörde bir kullanıcıyı owner yapmak
——————————————-
chown -R oracle:dba /oracle

Bir klasörün veya dosyanın yetkisi değiştirmek
——————————————–
chmod 775 file_name

Bir rpm in yüklü olup olmadığını kontrol etmek için
————————————————–
rpm -qa | grep “package name”

Rpm yüklemek için
——————
rpm -ivh package

Rpm update etmek için
———————–
rpm -Uvh package

Rpm silmek için
——————
rpm -e package

Oracle kurulumu için gereken rpmleri listelemek,versiyon ve yüklü olup olmadığı bilgisini bulmak için
—————————————————————————————————————-

rpm -q binutils compat-db compat-libstdc++-33 libgcc glibc glibc-devel glibc-headers gcc gcc-c++ libgcc libstdc++ cpp make libaio ksh elfutils-libelf make sysstat libaio libaio-devel setarch libXp unixODBC –qf “%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n”|sort

Kurulum tarihe göre rpmler
———————
rpm -qa –last | more

CPIO dosyasının extract edilmesi
———————————-
cat cpio_file | cpio -idmv

Dosya taşımalarında kopyalamayı validate etmek için MD5 oluşturma
————————————————————-
md5sum file > file.md5

Taşınan dosyanın MD5 dosyası ile kontrol edilmesi
————————————————-
md5sum -c file.md5

sunucular arası dosya transferi
———————————
scp 192.168.2.1:oracle/tlp.pw /oracle #karşıdan dosya indirme
scp /oracle/full.dmp ora10g@192.168.3.5:/export #dosya kopyalama

Dosyada arama
———————-
grep -ins 192.168.2.1(Text) -A2 -B1 list1.log

Process sayısı bulma
————————
ps -ef |grep TALIPDB|wc

Tarih değiştirme
———————————–
date -s “30 MAR 2010 12:32:00”

SEMAPHORE
——————–
ipcs -s
ipcrm

OS process i trace etmek için
—————————-
strace -p pid

Tar zip dosyasının içeriğini listelemek için
—————————————
tar -tf java_patch.tar

Tar zip dosyasına bir kkasör veya dosya eklemek için
———————————————–
tar -rf java_patch.tar jre

Tar zip dosyası oluşturmak için

—————————–
tar -cf java_patch.tar jdk

Bir kullanıcının ID bilgisini değiştirmek
—————————————–
usermod -u UID user

process öldürmeden dosya içeriğini boşaltmak için
———————————————-
echo “”>talipdb_ora_7001.trc

kelimenin path olarak nerede geçtiğini bulmak için
———————————————–
which exp

klasöre kısayol oluşturmak için
——————————————
ln -s path kısayol_adı

SELinux statüsünü görme
——————————-
sestatus

Yuklenilecek rpm paket versiyonunu öğrenmek için
———————————————–
echo ocfs2-`uname -r`

i/o istatisklerini izlemek için
——————————-
iostat 3

RAC sunucular arası tarih kontolu:
—————————————
ssh taliprac1 date; ssh taliprac2 date; date

sudoers komut ekleme. root şifresine ihtiyaç duymadan bir kullanıcın komut çalıştırabilmesi
——————————————————————————————–
/etc/SUDOERS
ora10g localhost=NOPASSWD:/bin/mount,/bin/umount
ora10g talipdb=NOPASSWD:/bin/mount,/bin/umount

Broadcast mesaj
——————-
wall mesaj

Son login bilgileri
——————-
last | more

O anki dizininin size bilgisi
———————–
du . -sh

o anki dizinin içindeki tüm dosyaların size bilgisini sıralı olarak
————————————————————–
du * -sh | sort -n

bir dosya içeriğini mail gonderme
———————————–
mail -s “deneme” talip_hakan_ozturk@hotmail.com < sqlnet.log(gönderilecek dosya)

dosya içinde word kelimesi geçenler
———————————-
grep -ins word *

process_name olan processleri toplu kill etmek için process kill script oluşturmak
——————————————————————————–
ps -ef |grep “process_name” |awk ‘{print ” kill -9 ” $2}’>/tmp/kill.sh

process_name processleri 2 saniye aralıklarla izlemek
—————————————————–
watch -n 2 “ps -ef | grep process_name | grep -v ps”

bir dosya içeriğindeki değişiklikleri anlık izlemek
—————————————————-
tail -f /var/log/messages

Oracle Database 11g R2 Kurulumu

ORACLE DATABASE 11G R2 KURULUMU
Oracle Enterprise Linux 5 Kurulumu makalesiyle OEL 5 kurulumunu adım adım birlikte öğrenmiştik. Sonraki makalemizde sunucumuzu Oracle DB 11gR2 kurulumuna hazırlamak için set etmemiz gereken parametreleri öğrendik. Artık Oracle DB 11gR2 kurulumuna geçip veritabanımızı oluşturma vakti geldi. Bu makalemizde Oracle DB 11gR2 kurulumunu yine adım adım numaralandırarak sizlere anlatacağım. Aksi belirtilmedikçe aşağıdaki işlemleri oluşturduğumuz oracle kullanıcısı ile yapacağız.
1. http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-linuxsoft-085393.html adresinden Linux 32 bit için indirdiğimiz iki adet zip dosyasını sunucu üzerinde owner ı oracle kullanıcısı olan bir dizine WinSCP programı ile kopyalayalım. Ve Linux a oracle kullanıcısı ile login olduktan sonra dosyaları aynı dizinde unzip ile extract ediyoruz.
$ unzip linux_11gR2_database_1of2.zip
$ unzip linux_11gR2_database_2of2.zip
2. Unzip yaptığımız installation klasöründe oluşan database klasörüne gidiyoruz. Ve runInstaller ile setup işlemimizi başlatıyoruz.
$ cd /installation/database/
$ ./runInstaller
3. Email adresinizi ve security update leri indirebilmek için oracle support şifrenizi isteyen ilk ekran sizi karşılayacaktır. Burayı boş geçiyoruz. Sonradan da bu bilgileri girebiliriz.

4. Boş bıraktığımız için bir uyarı penceresi gelecektir. YES diyerek devam ediyoruz.

5. Next ile devam ettiğimizde 3 seçenek karşımıza çıkacaktır. Birincisi RDBMS software kurulumunu ve veritabanını oluşturur. İkincisi sadece RDBMS software i kurar (Sonradan DBCA ile veritbanını oluşturmamız gerekir). Üçüncüsü varolan veritabanını upgrade etmek içindir. Biz birinci seçeneği işaretleyip devam ediyoruz. Upgrade ve DBCA yı sonraki makalelerimizde ayrıca inceleyeceğiz.

6. Kurulumun hangi class üzerinde olacağını soran aşağıdaki ekranda, Server Class seçeneğini işaretliyoruz. Şayet kendi desktop pc nize veya laptop a kurulum yapacaksanız birinci seçeneği seçmelisiniz. Aradaki farklılık sadece konfigürasyon farklılığıdır. Server Class da daha gelişmiş konfigürasyon seçenekleri mevcuttur.

7. Kurulumun Single Instance olduğunu belirtiyoruz ve devam ediyoruz. (İleride RAC kurulumunuda yapacağız)

8. 2 seçenek karşımıza çıkıyor. Typical install basit konfigürasyon seçeneklerini bize sunar. Biz Advanced install seçeneğini seçip ilerleyeceğiz.

9. 8. Adımda Typical install seçecek olursak aşağıdaki gibi bir ekran bizi karşılar.
Oracle base dizini seçilir (Önceki makalemizde bu dizini oluşturmuştuk).
Software location seçilir. (Oracle home dizini olarak bilinir)
Storage tipi olarak “File System” seçiyoruz.
Veritabanı dosyalarının bulunacağı “database file location” dizinini belirtiyoruz
Database edition olarak “Enterprise Edition” seçiyoruz
OSDBA Group olarak önceki makalemizde oluşturduğumuz dba grubunu seçiyoruz.
Global Database Name olarak veritabanımızın adını giriyoruz.
Son olarak bir yönetim şifresi giriyoruz

10. 8. Adımda Advanced install seçeneğini işaretlersek (bizim tercihimiz) ürün dilini seçeceğimiz aşağıdaki ekran gelir. Burada değişiklik yapmadan English ile devam ediyoruz.

11. Enterprise Edition ı seçiyoruz. Sağ alt köşede bulunan “Select Options” ile ek özellikleride seçebiliriz. Next ile devam ediyoruz.

12. Oracle base ve software location (oracle home dizini) klasörlerimizi seçiyoruz.

13. Oracle home dizininin boş olmadığını belirten aşağıdaki gibi bir uyarı verebilir. Bu önceki makalemizde oluşturduğumuz bash_profile dosyasından dolayıdır. YES diyerek devam edebiliriz.

14. Oracle inventory bilgilerinin tutulduğu klasör dizinini seçiyoruz. Grup olarak daha önceki makalede oluşturduğumuz oinstall grubu seçiyoruz.

15. Veritabanının ne amaçla kullanılacağını seçiyoruz. OLTP veritabanı için ilk seçeneği veri ambari için ikinci seçeneği işaretlemeliyiz. Biz OLTP oluşturacağımız için ilk seçenekle devam ediyoruz.

16. Veritabanı adını ve SID i giriyoruz. DB adı ve SID aynı isim olabileceği gibi farklıda olabilir.

17. Automatic Memory management ı enable edip etmeyeceğimizi belirtiyoruz.

18. İkinci tabda kullanacağınız karakter seti seçmelisiniz. Ben karakter set olarak Turkish WEISO8859P9 seçeceğini seçiyorum.

19. Veritabanı yönetimi için Database control (Enterprise manager olarakta bilinir) ün yükleneceği belirtiliyor. Email notifikasyonu için istenirse SMTP sunucusu burada belirtilebildiği gibi kurulum sonrasında da set edilebilir.

20. File system kullanacağımızı ve veritabanı dosyalarımızın bulunacağı dizini belirtiyoruz. ASM (Automatic Storage management) opsiyonunu daha detaylı başka bir makalede inceleyeceğiz.

21. Automated backup kullanıp kullanmayacağımızı belirtiyoruz. Kullanacak isek FRA (Flash Recovery Area) dizinini belirtiyoruz. Kurulum sonrasıda konfigürasyon yapabiliriz. Ben enable etmeden devam ediyorum.

22. SYS,SYSTEM,SYSMAN ve DBSNMP kullanıcıları için şifre belirliyoruz. Her kullanıcı için ayrı şifre girebileceğimiz gibi hepsinde ortak aynı şifreyi de verebiliriz.

23. İşletim sistemi seviyesinde daha önceki makalede oluşturduğumuz dba grubunu seçiyoruz. OSDBA ve OSOPER için aynı grubu seçiyorum. (Aynıda olabilir,farklıda. Ben aynı seçiyorum)

24. Kurulum öncesi tüm konfigürasyonları ve önceki makalede set ettiğimiz parametreleri check ediyor. Bir parametreyi bile eksik yazdığımızda bu aşamada Fail hatası verecektir. Fail verdiğinde ekranın aşağısındaki açıklama kısmında Expected Value (Beklenen değer) ve Actual Value (Şimdiki değer-Bizim girdiğimiz) değerlerini inceleyip gerekli düzeltmeyi yapıp tekrar üst tarafta bulunan “Fix&Check Again” butonu ile tekrar kontrol yapmasını sağlayabiliriz. Fail olan parametrenin gerçekten önemsiz olduğunu düşünüyorsak “Ignore All” kutucuğunu işaretleyip Finish diyebiliriz.(Çok dikkatli olmalıyız. En ufak eksik parametre sonradan kurulumun yarıda kesilmesine sebep olabilir)

25. Ve nihayetinde kurulum başlıyor.


26. 5. Adımda Software kurulumunun ardından veritabanını oluştur seçeneğini işaretlemiştik (1. seçenek). Kurulum tamamlandığında aşağıdaki gibi veritabanını oluşturan DBCA (Database Configuration Assistant) otomatik başlayacaktır.(DBCA yı ayrıca detaylı inceleyeceğiz)

27. Kurulum tamamlandığında aşağıdaki gibi bir uyarı penceresi gelecektir. “Root” kullanıcısı ile iki script sırasıyla çalıştırılmalıdır. Scriptler çalıştırılmadan bu pencereye OK denilmemelidir.
Ayrı bir console açılır ve root kullanıcısı ile login olduktan sonra scriptleri aşağıdaki gibi çalıştırabiliriz.

Birinci script(oraInventory yetkileri düzenlenir)
$/u01/app/oraInventory/orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.
Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.
İkinci script (ortam değişkenleri set edilir. Bize dizin sorduğunda ENTER ile devam edebiliriz.)
$/u01/app/oracle/product/11.2.0/db_1/root.sh
Running Oracle 11g root.sh script…
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/11.2.0/db_1
Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin …
Copying oraenv to /usr/local/bin …
Copying coraenv to /usr/local/bin …
Creating /etc/oratab file…
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
Finished product-specific root actions.
28. Scriptleri çalıştırdıktan ve yukarıdaki çıktıları elde ettikden sonra uyarı penceresine OK diyebiliriz. Son olarak aşağıdaki ekran gelecektir. Close ile çıkabiliriz.

29. Oracle DB 11gR2 kurulumumuz tamamlanmıştır. Şimdi console da sqlplus ile veritabanımıza bağlanabiliriz.

İlgili Makaleler:
Oracle Database 11G R2 Kurulumu için Enterprise Linux Üzerinde Yapılması Gerekenler
Oracle Enterprise Linux 5 Kurulumu

Talip Hakan ÖZTÜRK