31 Mart 2009 Salı

INSTALL ENTERPRISE LINUX 4 UPDATE 5 ON VMWARE SERVER

VMware Server üzerine Oracle Enterprise Linux 4 update 5
sistemini kurmayı adım adım anlatalım:
VMware Server ile Oracle Enterprise Linux 4 update 5
üzerine 2 node'lu Oracle Rac ortamı kurarken yaptığım
çalışmanın bir kısmını burada sizlerle paylaşıyorum.

1-'New Virtual Machine' ikonu tıklanıp Wizard ile kurulum
aşamalarını tek tek geçiyoruz;















2-Karşımıza çıkan bu ilk ekranda eğer ‘Custom’ ı seçersek
oluşturacağımız sanal makineye kendi ihtiyaçlarımıza göre
ek sürücüler seçebilir veya spesifik konfigürasyon özellikleri katabiliriz;
















3-Linux seçeneğinden ‘Red Hat Enterpirse Linux 4’ sürümü seçildi
ve kuracağımız linux sürümü Enterprise Linux 4 update 5
(Redhat’ın Oracle için hazırladığı versiyonu) olacağından
bu kategoriden seçim yapıldı.















4-Sanal linux makinesi ‘EL4_10gRAC1’ şeklinde kısaltılmış
olarak adlandırıldı.















5-Kuracağımız sanal linux makinelerin herkes tarafından
rahat erişilebilir olması için sonraki adımdaki
‘Make this virtual machine private’ seçeneği işaretlenmedi.















6-Startup/Shutdown ayarlarını değiştirmeden bu kısım geçildi,
sanal linux makinesinin varolan sistemin kullanıcısı bazlı
açılıp kapanması gerektiğinden default seçeneği değiştirilmedi.















7-Default olarak seçili tek olan işlemci sayısı (Number of processors ‘One’) değiştirilmedi.















8-VMware Server uygulamasını kurduğum sistemim ‘Windows XP Version 2002 Servise Pack 3’ ve sistemimin belleği 2 GB boyutunda olduğundan kuracağım sanal linux makinelerim için 1GB boyutunda bellek alanı oluşturabilirim, Sanal linux makinelerinde Oracle Database ve Oracle Clusterware uygulamalarının bellek ihtiyaçları için de rahat çalışma ortamı imkanı açısından 1GB bellek alanı uygun olacaktır.















9-Network bağlantı tiplerinden ethernet üzerinden direk bağlanmayı tercih etmeliyiz. Default’ta ‘Use bridged networking’ seçili olarak karşımıza çıktı.















10-Giriş-Çıkış(I/O) adapter tiplerinden ‘LSI Logic’ default olarak seçili iken sonraki adıma geçildi.















11-‘Create a new virtual disk’ default seçeneği ile sanal linux makinelerimizin sanal disklerini oluşturulur.















12-Sanal disk tiplerinden SCSI defalut seçeneği ayrıca önerilen seçenek olduğundan değiştirmeden sonraki adıma geçildi.















13-Sanal makinemizin disk kapasitesi için kendi lokal pc’mizden 20 gb kadar feragat etmemiz gerekiyor. Çünkü sanal makinemizde linux kurulumu için, Oracle database, Oracle clusterware ve bunların kendi çalışma alanları için 20gb yeterli olur. ‘Allocate all disk space now’ seçeneğinin işaretli olmaması ve ‘Split disk into 2 GB files’ seçeneğinin ise işaretli olması gerekiyor.















14-Sanal diskimize ‘localdisk.vmdk’ adını verdik ve bunu birinci sanal makinemizin bulunduğu dizinde (F:\My Virtual Machines\RAC\rac10g\rac1\) oluşturduk.















15-‘Edit virtual machine settings’ linkini tıklayıp sanal makinemiz EL4_10gRAC1’ in ayarlarını düzenleyelim, Ortak diskleri ve ilave network kartını ekleyelim.













16-Karşımıza gelen aşağıdaki ekranda ‘Add…’ butonuna tıkladığımızda ‘Add Hardware Wizard’ penceresi açılacaktır.













17-‘Ethernet Adapter’ seçeneği ile ileri butonunu tıkladığımızda ilave network kartını sistemin network kartıyla birbirine bağlayarak (private interconnect) konfigüre ettik.















18-Burada network tiplerinden ‘Host-only:’ seçeneği ile donanımımızın Ethernet kartını kullandık.















19-Add Hardware Wizard ile aşağıdaki Tablo 1: ‘deki gibi SCSI disklerini oluşturalım.

Bölümler Boyut Sanal disk tipi
Database files 3Gb SCSI 1: 0
Database files 3Gb SCSI 1: 1
Database files 3Gb SCSI 1: 2
Oracle Cluster Registry 300Mb SCSI 1: 3
Voting Disk 300Mb SCSI 1: 4

Tablo 1: SCSI Partition (Bölümlenmiş) Diskler

20-Yeni disk oluşturmak için Hard Disk’ i seçip ileri butonunu tıkladık.















21-‘Create a new virtual disk’ default seçeneği ile yeni bir disk oluşturacağız.















22-Sanal disk tiplerinden önerilen SCSI tipini seçip ileri butonunu tıkladık.















23-Her bir disk alanını ayırmak için 19. adımda gösterilen Tablo 1:’deki gibi diskleri oluşturduk. Aşağıda görüldüğü gibi ’Allocate all disk space now’ seçeneğini seçip ‘Split disk into 2 GB files’ seçeneğini kaldırdık. Disk boyutunu 3GB olarak belirledik.















24-Diskleri ‘datadisk1.vmdk’, ’datadisk2.vmdk’, ’datadisk3.vmdk’ ,’ocrdisk. vmdk’ ve ‘votingdisk.vmdk’ şeklinde isimlendirdik. F:\My Virtual Machines\RAC\rac10g\share\ dizinine ‘datadisk1.vmdk’ diskini ‘Son’ butonuna tıklayarak oluşturduk.















25-Oluşturduğumuz yeni disk seçili iken ‘Avanced…’ butonuna tıklayıp diski düzenleriz.













26-Karşımıza çıkan bu ‘Advanced’ ekranında 19. adımda belirtilen Tablo 1:’deki sanal disk tiplerine göre seçim yaptık ve ‘Mode’ kısmında ise Independent(bağımsız disk) ve Persistent(sürekli disk) seçeneklerini seçtik.

















27-Bundan sonraki diskleri oluşturmak için 20. adımdan 26. adıma kadarki aşamaları 20. adımdaki Tablo 1:’de belirtildiği gibi yaptım.
28-Bu aşamada oluşturduğumuz diskleri, VMware Konfigürasyon dosyasını (F:\My Virtual Machines\RAC\rac10g\rac1\Red Hat Enterprise Linux 4.vmx) notepad ile açarak ekledim fakat bu arada ayarların kaydedilmesi için Virtual Machine Settings ekranını kapattım. Kuracağımız Linux sistemleri tarafından disklerin ortak olarak kullanılması için aşağıda mavi renkle belirtilen kısımları ekledim;

config.version = “8”
virtualHW.version = “4”
scsi0.present = “TRUE”
scsi0.virtualDev = “lsilogic”
memsize = “1024”
scsi0:0.present = “TRUE”
scsi0:0.fileName = “localdisk.vmdk”
ide1:0.present = “TRUE”
ide1:0.fileName = “E:”
ide1:0.deviceType = “cdrom-raw”
floppy0.present = “FALSE”
Ethernet0.present = “TRUE”
displayName = “EL4_10gRAC1”
guestOS = “rhel4”
priority.grabbed = “normal”
priority.ungrabbed = “normal”
disk.locking=”FALSE”
diskLib.dataCacheMaxSize=”0”
diskLib.dataCacheMaxReadAheadSize=”0”
diskLib.dataCacheMinReadAheadSize=”0”
diskLib.dataCachePageSize=”0”
scsi1.sharedBus=”virtual”
ide1:0.autodetect = “FALSE”
Ethernet1.present = “TRUE”
Ethernet1.connectionType = “hostonly”
scsi1.present = “TRUE”
scsi1:0.present = “TRUE”
scsi1:0.fileName = “D:\My Virtual Machines\RAC\rac10g\share\datadisk1.vmdk”
scsi1:0.mode = “independent-persistent”
scsi1:0.deviceType=”disk”
scsi1.virtualDev = “lsilogic”
scsi1:1.present = “TRUE”
scsi1:1.fileName = “D:\My Virtual Machines\RAC\rac10g\share\datadisk2.vmdk”
scsi1:1.mode = “independent-persistent”
scsi1:1.deviceType=”disk”
scsi1:2.present = “TRUE”
scsi1:2.fileName = “D:\My Virtual Machines\RAC\rac10g\share\datadisk3.vmdk”
scsi1:2.mode = “independent-persistent”
scsi1:2.deviceType=”disk”
scsi1:3.present = “TRUE”
scsi1:3.fileName = “D:\My Virtual Machines\RAC\rac10g\share\ocrdisk.vmdk”
scsi1:3.mode = “independent-persistent”
scsi1:3.deviceType=”disk”
scsi1:4.present = “TRUE”
scsi1:4.fileName = “D:\My Virtual Machines\RAC\rac10g\share\votingdisk.vmdk”
scsi1:4.mode = “independent-persistent”
scsi1:4.deviceType=”disk”
scsi0:0.redo = “”
scsi1:0.redo = “”
scsi1:1.redo = “”
scsi1:2.redo = “”
scsi1:3.redo = “”
scsi1:4.redo = “”
ide1:0.startConnected = “TRUE”
ethernet0.addressType = “generated”
ethernet1.addressType = “generated”
uuid.location = “56 4d 1e e8 75 ea 01 bd-54 29 71 28 ab 78 9e 31”
uuid.bios = “56 4d 1e e8 75 ea 01 bd-54 29 71 28 ab 78 9e 31”
checkpoint.vmState = “”
ethernet0.generatedAddress = “00:0c:29:78:9e:31”
ethernet0.generatedAddressOffset = “0”
ethernet1.generatedAddress = “00:0c:29:78:9e:3b”
ethernet1.generatedAddressOffset = “10”
tools.syncTime = “TRUE”














Şuana kadar sanal linux makinemizin konfigürasyonlarını başarılı bir şekilde tamamlamış olduk. Şimdi ise sıra Enterprise Linux sistemini kurmaya geldi! İleriki aşamalarda kurduğumuz bu ‘EL4_10gRAC1’ birinci linux sistemimizi kolonlayıp ‘EL4_10gRAC2’ Linux sistemimizi kuracağız.

Artık birinci sanal makinemize Linux işletim sistemini kurabiliriz. Bunun için öncelikle http://edelivery.oracle.com/linux web adresinden (Oracle’ın ürünlerinin sergilendiği resmi web sitesi, download edebilmek için öncelikle www.oracle.com ‘dan üye olmak gerekiyor.) Enterprise Linux 4 update 5 ‘i indirdik ve winrar ile 4 tane ’.iso’ uzantılı image dosyalarını açtık;

Enterprise-R4-U5-I386-disc1.iso
Enterprise-R4-U5-I386-disc2.iso
Enterprise-R4-U5-I386-disc3.iso
Enterprise-R4-U5-I386-disc4.iso


29-Kuruluma başlamak için Vmware Server Console’dan ‘Edit virtual machine settings’ linkini tıkladık ve CD-ROM sürücüyü seçtik. ’Connection’ kısmından ‘Use ISO image’ bölümünü işaretledik.













30-‘Browse...’ ile linux image dosyalarından 1. Diski (Enterprise-R4-U5-I386-disc1.iso) bulunduğu dizinden seçtik.















31-‘Start this virtual machine’ butonuna basarak Linux kurulumuna başladık.
















32-Grafik mod’da kurulum için Enter’a bastık.
















33-Kurulum CD’lerini test etmesine gerek duymadan ‘Skip’ butonuna tıkladık.
















34-‘Welcome to Enterprise Linux’ açılış ekranından sonraki adıma geçtik.
















35-Dil seçiminde İngilizceyi seçtik ve sonraki adıma geçtik.
















36-Disk bölümleme bölümünde ‘Manually partition with Disk Druid’ seçeneği ile diski manuel olarak bölümlemeyi seçtik ve karşımıza çıkan ‘Warning’ ekranında ‘Yes’ butonuna tıkladık.
















37-Lokal diskimizi (/dev/sda) aşağıdaki Tablo 5. 1’deki gibi disk alan tiplerine göre bölümledik.

Disk alanı tipi Size

/swap 2048 Mb
/tmp 1024 Mb
/ 4096 Mb
/u01 13312 Mb

Tablo 2: Oracle Enterprise Linux Disk Alanı Tipleri ve Boyutları

Lokal diski bölümlemek için /dev/sda üzerinde iken boş yeri seçip ‘Edit’ ile disk bölümlerini ekledik. Tüm disk bölümlerini Tablo 2:’deki gibi ayırdık. Bu aşamada diğer diskleri (/dev/sdb , /dev/sdc…vb.) bölümlemedik. ’Next’ ile sonraki aşamaya geçtik.















38-Varsayılan boot loader konfigürasyonunu geçip ’Next’ ile sonraki aşamaya geçtik.















39-Network konfigürasyonunu aşağıdaki Tablo 3:’deki şekilde yapık.

Hostname Network device Network type IP address
rac1.oracle.com eth0 Public 192.0.60.166
eth1 Private 10.10.10.50

Tablo 3: ‘rac1’ Sanal Makinesi Network Konfigürasyonu

Burada public IP adresini kendi domain’imdeki bilgisayarımın IP adresi 192.0.60.53’e göre 192.0.60.166 olarak belirledim. Kendi domain IP adresinize göre bunu belirleyebilirsiniz. Birinci sanal Linux makinemizin hostname’i olarak ‘rac1.oracle.com’ adını belirledim tabi siz istediğiniz şekilde adlandırabilirsiniz.
‘Network Devices’ kısmında ‘eth0’ ve ‘eth1’ network aygıtlarını tıklayarak aktif ettim.

‘eth0’ köprülü network bağlantısı aygıtıdır,’eth1’ ise sadece host makinemizle olan bağlantı aygıtıdır.
‘eth0’ seçili iken ‘Edit’ butonunu tıkladığımızda karşımıza gelen ‘Edit interface eth0’ ekranında ‘Configure using DHCP’ yi seçmedik, ’Activate on boot’ u seçtik.
Burada;
IP Adresi 192.0.60.166 olarak,
Netmask adresi de 255.255.0.0 olarak belirledik.
‘Edit interface eth1’ ekranında ise;
IP Adresi 10.10.10.50 olarak,
Netmask adresi de 255.255.0.0 olarak belirledik.
Hostname’i; ‘rac1.oracle.com’ olarak,
Gateway Adresi; 192.0.192.192 olarak,
Primary DNS Adresini de; 192.168.206.1 olarak belirledik ve ’Next’ ile sonraki aşamaya geçtik.
















40-Firewall ve SELinux’ü disable ettik ve ’Next’ ile sonraki aşamaya geçtik.
















41-Ek dil desteği olarak da ‘English(USA)’ yı seçip ’Next’ ile sonraki aşamaya geçtik.
















42-Sistemimizin yerel ayarları için ‘Europe/Istanbul’ bölgemizi seçtik ve ’Next’ ile sonraki aşamaya geçtik.
















43-Sistemimizdeki en yetkili kullanıcı Root’un şifresini belirledik ve ’Next’ ile sonraki aşamaya geçtik.
















44-Bazı ek paketleri kurmak için ‘Customize Software packages to be installed’ i seçtik.
















45-Tüm default seçili paketleri de alarak aşağıdaki grupları da ekledik;
– Legacy Software Development
– Graphical Internet
– Development Tools
– System Tools.
















46-Kurulum esnasında diğer CD’ler de istendiğinde Vmware Server Console penceresinin en altında yer alan CD-ROM ikonundan ‘Edit’ seçeneğini tıkladığımızda karşımıza gelen ekrandan aşağıda da görüldüğü gibi diğer istenilen CD’leri seçtik ve kuruluma devam ettik.
















47-Kurulum bittikten sonra sistemi restart etmemiz istenecektir ve ‘Reboot’ butonuna basıp sistemi resetledik.
















48-Restart’tan sonra karşımıza Welcome ekranı geldi, ’Next’ ile sonraki aşamaya geçtik.
















49-Lisans Sözleşmesini de okuduktan sonra ’Next’ ile sonraki aşamaya geçtik.
















50-Tarih ve Zaman ayarlarını güncelleyip ’Next’ ile sonraki aşamaya geçtik.
















51-Ekran çözünürlüğünü de ayarladıktan sonra ’Next’ ile sonraki aşamaya geçtik.
















52-Sistem kullanıcısı oluşturabiliriz fakat buna ihtiyaç duymadık, burayı atladık.
















53-Ek paket ya da uygulamalara ihtiyacımız yok bu aşamadan sonra, bu kısmı da atladık.
















54-Nihayetinde ‘Next’ butonunu tıklayıp kurulumu bitirdik.
















55-Username’e root girdik ve ardından şifresini de girerek işletim sistemimizi açtık.
















56-Bu noktada sanal makinemizi bir süre için durdurduk (‘suspend’ butonuna tıkladık). Sanal makinemizin otomatikman kendi Windows XP sistemimizin CD’lerini görebilmesi için ‘Virtual Machine Settings’ penceresinden ‘Use physical drive’ ve ‘Auto detect’ kısımlarını seçtik ve ardından sanal makinemizi resetledik.













57-Şimdi sıra Vmware tools paketini sanal makinemize kurmaya geldi. Bunun amacı host makinemizle sanal makinemiz arasındaki zamanı senkronize etmek. ’Vmware Server Console’ penceresindeki ‘VM’ menüsünden ‘Install Vmware Tools…’ seçeneğini tıkladık.











58-Vmware Tools paketini kurmayı onayladım ve ‘Install’ butonuna tıkladım.







59-Sanal makinemizin masaüstüne ‘Vmware Tools’ cd ikonu gelecektir, bunu çift tıklayıp açtığımızda göreceğimiz ‘VmwareTools-1.0.6.91891.i386.rpm’ paketini kurduk.














60-Root kullanıcısı ile terminal pencereyi açtık ve ‘/usr/bin/vmware-config-tools.pl’ dosyasını çalıştırarak Vmware Tools paketinin konfigürasyonunu yaptık. Kendi istediğimiz ekran çözünürlüğünü seçtik. Ben genellikle ‘1280x1024’ çözünürlüğünü kullandığımdan 7 ‘yazıp enter ile seçimimi yaptım.
















61-Vmware Tools ayarları her sanal makinemizi açtığımızda(login olduğumuzda) başlatılacaktır.’Application’ menüsünden ‘Preferences’,’More Preferences’ ve ‘Launch Sessions’ penceresini açtık. Bu penceredeki ‘Startup Programs’ tabından ‘Add’ butonu ile /usr/bin/vmware-toolbox dizinini ekledik.













62-Sanal makinemizden Logo ut olup tekrar root ile sistemimizi açtık ve ‘Vmware Tools Properties’ penceresinin açılıp ‘Time synchronization between the virtual machine and the host operating system’ tikinin işaretli olup olmadığının kontrolünü yaptık, işaretli olması gerekiyor. Bu seçeneğin işaretli olması ‘Virtual Machine configuration file’ ın ‘tools.syncTime = “TRUE” satırını eklemesi demektir.

SELECT SQL ON JAVA CODE

package orhan;

//import javax.swing.*;
//import java.awt.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;


public class mainClass {

static String userid = "ORHAN", password = "PASSWORD";
static String url = "jdbc:odbc:DB_CONN";
static Connection con = null;

public static void main(String[] args) throws Exception {
Connection con = getOracleJDBCConnection();
if (con != null) {
System.out.println("Connected.");
Statement stmt = con.createStatement();
ResultSet rset = stmt.executeQuery("select * from orhan.tablespace_size_daily");
while (rset.next()) {
System.out.printf("%20s %20s %15s %15s %15s %10s \n" ,rset.getString(1), rset.getString(2),rset.getString(3),rset.getString(4),rset.getString(5), rset.getString(6));
}
rset.close();
stmt.close();
con.close();

} else {
System.out.println("Not Connection");
}
}

public static Connection getOracleJDBCConnection() {

try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
}

try {
con = DriverManager.getConnection(url, userid, password);
} catch (SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
}

return con;
}
}

my simple job

DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'ORHAN.SIZE_TABLESPACES;'
,next_date => to_date('24.02.2009 00:00:00','dd/mm/yyyy hh24:mi:ss')
,interval => 'TRUNC(SYSDATE+1)'
,no_parse => FALSE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
/

SPOOL TO HTML

-------------------------------------------
#!/usr/bin/ksh
. $HOME/.profile

sqlplus -s /nolog << EOF > /dev/null
connect user/password@db

SET NEWPAGE 0
SET SPACE 0
SET PAGESIZE 0
SET ECHO OFF
SET TERMOUT OFF
SET FEEDBACK OFF
SET TRIMSPOOL ON
SET HEADING ON
set feed off markup html on spool on

SPOOL /tmp/orhan/a.html

select tarih||chr(9)||plan||chr(9)||procedure||chr(9)||end_date||chr(9)||job_order from tablo where status='COMPLETED'
and tarih between to_date('29.03.2009','DD.MM.YYYY HH24:MI:SS') and to_date('30.03.2009','DD.MM.YYYY HH24:MI:SS') and procedure like 'PLAN_A%'
group by tarih,plan,procedure,end_date,job_order order by plan;

SPOOL OFF
set markup html off spool off
EXIT SQL.SQLCODE;
EOF
------------------------------------------

SPOOL TO EXCEL

Aşağıdaki spool.sh dosyası içeriğinde görüldüğü gibi
sorgu sonucu belirli bi formatta excel dosyasına(a.xls)
aktarılır.

--------------------------------------------------
#!/usr/bin/ksh
. $HOME/.profile

sqlplus -s /nolog << EOF > /dev/null
connect user/password@db


SET LINESIZE 1024;
SET HEADING OFF;
SET PAGESIZE 0;
SET FEEDBACK OFF;
SET TRIMSPOOL ON;
alter session set nls_date_format='DD.MM.YYYY';
SPOOL /tmp/orhan/a.xls

select tarih||chr(9)||plan||chr(9)||procedure||chr(9)||end_date||chr(9)||job_order from tablo where status='COMPLETED'
and tarih between to_date('29.03.2009','DD.MM.YYYY HH24:MI:SS') and to_date('30.03.2009','DD.MM.YYYY HH24:MI:SS') and procedure like 'PLAN_A%'
group by tarih,plan,procedure,end_date,job_order order by plan;

SPOOL OFF
set markup html off spool off
EXIT SQL.SQLCODE;
EOF
------------------------------------------------

SQL TO OUTPUT

aşağıdaki plsql bloğunda; utl_file.fopen ile excel dosyasını açar,
utl_file.get_line ile okunan veri alınır ve dbms_output.put_line
ile de çıktı sonucu ekrana yazılır.

DECLARE
vInHandle utl_file.file_type;
vNewLine VARCHAR2(250);
BEGIN
vInHandle := utl_file.fopen('ORHAN_DIR', 'a.xls', 'R');
LOOP
BEGIN
utl_file.get_line(vInHandle, vNewLine);
dbms_output.put_line(vNewLine);
EXCEPTION
WHEN OTHERS THEN
EXIT;
END;
END LOOP;
utl_file.fclose(vInHandle);
END fopen;
/

-------------------------------------------
directory name : ORHAN_DIR
file name: a.xls


İlk ve Son satırları ekrana çıkartmak için ise;
----------------------------------------
DECLARE
v_read_file UTL_FILE.file_type;
l_text VARCHAR2(1000);
BEGIN
v_read_file :=
UTL_FILE.fopen ('ORHAN_DIR', 'deneme.txt', 'r', '1000');
UTL_FILE.get_line(v_read_file, l_text, 1000);
DBMS_OUTPUT.put_line('İlk Satır: ' || l_text);
begin
loop
UTL_FILE.get_line(v_read_file, l_text, 1000);
end loop;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;
DBMS_OUTPUT.put_line('Son Satır: ' || l_text);
UTL_FILE.fclose(v_read_file);
END;
-------------------------------------------------

30 Mart 2009 Pazartesi

BETWEEN TWO DATES (END_DATE AND START_DATE)

select
TO_CHAR(start_date,'DD.MM.YYYY HH24:MI:SS') start_date,
TO_CHAR(end_date,'DD.MM.YYYY HH24:MI:SS') end_date,
trunc(86400*(end_date-start_date))-
60*(trunc((86400*(end_date-start_date))/60)) seconds,
trunc((86400*(end_date-start_date))/60)-
60*(trunc(((86400*(end_date-start_date))/60)/60)) minutes,
trunc(((86400*(end_date-start_date))/60)/60)-
24*(trunc((((86400*(end_date-start_date))/60)/60)/24)) hours,
trunc((((86400*(end_date-start_date))/60)/60)/24) days,
trunc(((((86400*(end_date-start_date))/60)/60)/24)/7) weeks
from tablo

27 Mart 2009 Cuma

main_spool.sh

spool kullanımına bir örnek >>>>
unixte /tmp/orhan/ dizininde 'main_spool.sh' adındaki dosyanın
içeriği de aşağıdaki gibidir.
------------------------------------
#!/usr/bin/ksh
. $HOME/.profile

sqlplus -s /nolog << EOF > /dev/null
connect user/password@orcl

SET LINESIZE 1024;
SET HEADING OFF;
SET PAGESIZE 0;
SET FEEDBACK OFF;
SET TRIMSPOOL ON;

SPOOL /tmp/orhan/tmp_sonuc.txt

select a.a||','||a.b||','||a.c
from tablo a
where a.a="orhan";

SPOOL OFF
EXIT SQL.SQLCODE;
EOF
-----------------------------------

bu main_spool.sh dosyasını unix komut satırında
çalıştırdığımızda ilgili sql sorgusu sonucunu,
kolonları birbirinden ',' ile ayırarak 'tmp_sonuc.txt'
dosyasına aktaracaktır.

last_ddl_created_time

select a.owner,a.object_name,a.object_type,a.created,a.last_ddl_time,a.status,
b.osuser,b.machine,b.terminal,b.program from DBA_OBJECTS a, v$session b where (a.owner=b.username) and b.osuser='oeripek'
and a.last_ddl_time between to_date('25.03.2009 00:00:00','dd.mm.yyyy HH24:MI:SS') and to_date('25.03.2009 23:59:59','dd.mm.yyyy HH24:MI:SS')
order by a.last_ddl_time desc

12 Mart 2009 Perşembe

RENAME PARTITION AND SUBPARTITION TABLE

select 'alter table '||table_owner||'.'||table_name||' rename partition '||partition_name||' to '||'PART_'||substr(partition_name,-8)||';'
from dba_tab_partitions
where table_name in ('TABLO1','TABLO2')



select 'alter table '||table_owner||'.'||table_name||' rename subpartition '||subpartition_name||' to '||'SPART_'||substr(partition_name,-8)||'_'||trim(to_char(subpartition_position,'000'))||';'
from dba_tab_subpartitions
where table_name in ('TABLO1','TABLO2')

COUNT AND SIZE TABLES

CREATE OR REPLACE PROCEDURE ORHAN.proc_count_and_size_tables
IS
-- ORHAN.count_and_size_tables ve ORHAN.count_and_size_tables_hist tablosuna DWH user'larının
--tüm tabloların count'unu ve toplam tablo büyüklüğünü girer,
-- created by ORHAN ERİPEK. 26.02.2009

s_name varchar2 (2000);
s_type varchar2 (2000);
s_owner varchar2 (2000);
v_select_count varchar2 (2000);
v_select_size varchar2 (2000);
v_update_main varchar2 (2000);
v_insert varchar2 (2000);
v_update_hist varchar2 (2000);
s_count number;
s_size number;

CURSOR cur
IS
SELECT owner,
segment_type,
segment_name,
ROUND (SUM (bytes) / (1024 * 1024)) segment_size_mb
FROM sys.dba_segments
WHERE UPPER (segment_type) LIKE '%TABLE%'
OR UPPER (segment_type) LIKE '%INDEX%'
AND owner IN
(‘USER1’,’USER2’)
GROUP BY owner, segment_type, segment_name
ORDER BY segment_size_mb DESC;
BEGIN
EXECUTE IMMEDIATE 'truncate table ORHAN.count_and_size_tables';

COMMIT;

v_insert :=
'INSERT /*+ APPEND NOLOGGING */ALL
INTO ORHAN.count_and_size_tables(owner,segment_name)
INTO ORHAN.count_and_size_tables_hist(owner,segment_name)
SELECT owner,segment_name
FROM sys.dba_segments WHERE UPPER (segment_type) LIKE ''%TABLE%'' OR UPPER (segment_type) LIKE ''%INDEX%''
AND owner IN (''USER1'',''USER2'')
GROUP BY owner,segment_name
ORDER BY segment_name';

--DBMS_OUTPUT.put_line (v_insert);

EXECUTE IMMEDIATE v_insert;

COMMIT;

OPEN cur;

LOOP
FETCH cur INTO s_owner, s_type, s_name, s_size;

EXIT WHEN cur%NOTFOUND;

--v_select_count := 'select count(*) from ' || s_name || '';

--DBMS_OUTPUT.put_line (v_select_count);

-- EXECUTE IMMEDIATE v_select_count INTO s_count;

--DBMS_OUTPUT.put_line (s_count);


v_update_main :=
'update ORHAN.count_and_size_tables set log_date=sysdate,segment_type='
|| ''''
|| s_type
|| ''''
|| ',segment_size_mb='
|| s_size
|| ' where owner='''
|| s_owner
|| ''' and segment_name='''
|| s_name
|| '''';

--DBMS_OUTPUT.put_line (v_update_main);

EXECUTE IMMEDIATE v_update_main;

COMMIT;

v_update_hist :=
'update ORHAN.count_and_size_tables_hist set log_date=sysdate,segment_type='
|| ''''
|| s_type
|| ''''
|| ',segment_size_mb='
|| s_size
|| ' where owner='''
|| s_owner
|| ''' and segment_name='''
|| s_name
|| '''';

--DBMS_OUTPUT.put_line (v_update_hist);

EXECUTE IMMEDIATE v_update_hist;

COMMIT;

END LOOP;

CLOSE cur;
END;
/

tablespace kullanım durumu

CREATE OR REPLACE PROCEDURE ORHAN.PROC_TABLESPACE_SIZE
IS
-- tablespace alanlarının kullanım durumları,dolu ve boş alanlar,yüzdeleri
-- Orhan Eripek 16.01.2009

v_dyntask VARCHAR2 (2000);
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE ORHAN.TABLESPACE_SIZE_DAILY';

COMMIT;
v_dyntask :=
'INSERT /*+ APPEND NOLOGGING */ALL
INTO ORHAN.TABLESPACE_SIZE_DAILY
(log_as_date, tablespace_name, BYTES_SIZE, BYTES_FREE, BYTES_USED,PERCENT_USED)
INTO ORHAN.TABLESPACE_SIZE_HIST
(log_as_date, tablespace_name,BYTES_SIZE, BYTES_FREE, BYTES_USED,PERCENT_USED)
SELECT log_as_date, tablespace_name, BYTES_SIZE, BYTES_FREE, BYTES_USED,PERCENT_USED
FROM (SELECT systarih AS log_as_date, tablespace_name, BYTES_SIZE, BYTES_FREE, BYTES_USED,PERCENT_USED
FROM (SELECT SYSDATE AS systarih, a.tablespace_name,
a.BYTES AS BYTES_SIZE, b.BYTES AS BYTES_FREE,(a.BYTES-b.BYTES) AS BYTES_USED,
ROUND (((a.BYTES - b.BYTES) / a.BYTES) * 100, 2 ) as PERCENT_USED
FROM (SELECT tablespace_name, SUM (BYTES) BYTES
FROM SYS.dba_data_files
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM (BYTES) BYTES,
MAX (BYTES) max_free_area
FROM SYS.dba_free_space
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
ORDER BY ((a.BYTES - b.BYTES) / a.BYTES) DESC))';
DBMS_OUTPUT.put_line (v_dyntask);

EXECUTE IMMEDIATE v_dyntask;

COMMIT;
END;
/

expdp - impdp

$expdp orhan/password dumpfile=tablo_10_03_2009.dmp directory=orhan_dir content=all

ile orhan user'inin tüm objelerinin dampını alır,

$expdp orhan/password dumpfile=tablo_10_03_2009.dmp directory=orhan_dir exclude=table

ile tablo haricindeki tüm objelerin dampını alır,

$expdp orhan/password dumpfile=tablo_10_03_2009.dmp directory=orhan_dir include=view,procedure,package,function,triger

sadece 'include' da belirtilen objeleri alır,

$expdp orhan/password dumpfile=tablo_10_03_2009.dmp directory=orhan_dir query=deneme:'"where rownum <=100"'

'deneme' tablosunun 100 satırının dumpını alır,

$impdp orhan/password dumpfile=tablo_10_03_2009.dmp directory=orhan_dir
yada
$impdp orhan/password dumpfile=tablo_10_03_2009.dmp directory=orhan_dir include=view,triger

şeklinde import edilebilir.