30.06.2008

PLSQL önemli özellikler -4


7-DBMS_SESSION.SET_SQL_TRACE

Bu paket sayesin yazılan kodları takip edebiliriz böylece sistem olan maliyetimizi hesap etmemiz cok daha kolay olacaktır. Butün sql leride takip etmemizi sağlar, current session takibinide sağlar.
DBMS_SESSION.SET_SQL_TRACE(sql_trace BOOLEAN);


CREATE OR REPLACE PROCEDURE core_process IS
BEGIN
IF USER = 'PLSQL_USER' THEN
DBMS_SESSION.SET_SQL_TRACE(TRUE);
DBMS_OUTPUT.PUT_LINE('Tracing açıldı...');
END IF;

DBMS_SESSION.SET_SQL_TRACE(FALSE);
DBMS_OUTPUT.PUT_LINE('Trace kapatıldı.');
END;
/

8-UTL_FILE/DBMS_OUTPUT

Bu paketler sayesinde oracledaki bir sorgumuzun neticesini bir operating sistem dosyasına kaydedebiliriz. dbms_output sayesinde ise plsql paketimizdeki bir bilgiyi cıktı olarak buffer alan sayesinde dısarı yazdırmamız mümkündür.

UTL_FILE paketini kullanmak için ilk önce bir directory yaratmamız gerekir.


CREATE OR REPLACE DIRECTORY 'TEMP_DIR' AS '/usr/users/oracle';
GRANT READ, WRITE ON DIRECTORY TEMP_DIR TO plsql_user;

DBMS_output öreneği olarakda

begin
dbms_output.put_line('merhaba');
end;
/


merhaba

çıktısını verir.

9-DBMS_METADATA

Get_ddl proceduru yaygın olarak kullanılır.


CREATE TABLE temp
(temp VARCHAR2(10) NOT NULL);


SET LONG 1000000
SELECT dbms_metadata.get_ddl('TABLE', table_name)
FROM user_tables
WHERE table_name = 'TEMP';
DBMS_METADATA.GET_DDL('TABLE',TABLE_NAME)
--------------------------------------------------------------------------
CREATE TABLE "PLSQL_USER"."TEMP"
( "TEMP" VARCHAR2(10) NOT NULL ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "SYSTEM"



CREATE OR REPLACE PROCEDURE abc AS
BEGIN
NULL;
END abc;
/


SET LONG 1000000
SELECT dbms_metadata.get_ddl(object_type, object_name)
FROM user_objects
WHERE object_name = 'ABC';
DBMS_METADATA.GET_DDL('PROCEDURE',OBJECT_NAME)
--------------------------------------------------------------
CREATE OR REPLACE PROCEDURE "PLSQL_USER"."ABC" AS
BEGIN
NULL;
END abc;
/



SET LONG 1000000
select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual;

CREATE TABLE "SCOTT"."EMP"
( "EMPNO" NUMBER(4,0),
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0),
CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS" ENABLE,
CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS";
/


execute dbms_metadata.set_transform_param(dbms_metadata.session_transform,
'SEGMENT_ATTRIBUTES', false)
select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual
CREATE TABLE "SCOTT"."EMP"
( "EMPNO" NUMBER(4,0),
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0),
CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO") ENABLE,
CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE)



GET_GRANTED_DDL de yine önemli prodecurelerindendir. bu procedure sayesinde hakları görebiliriz.


CREATE USER PLSQL_USER IDENTIFIED BY PLSQL_USER;
GRANT CONNECT, RESOURCE, DBA TO PLSQL_USER;
GRANT SELECT ON SCOTT.EMP TO PLSQL_USER;
SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT','PLSQL_USER')
FROM DUAL;
GRANT UNLIMITED TABLESPACE TO "PLSQL_USER"
SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT','PLSQL_USER')
FROM DUAL;
GRANT "CONNECT" TO "PLSQL_USER"
GRANT "RESOURCE" TO "PLSQL_USER"
GRANT "DBA" TO "PLSQL_USER"



SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT','PLSQL_USER')
FROM DUAL;
GRANT SELECT ON "SCOTT"."EMP" TO "PLSQL_USER"
SELECT DBMS_METADATA.GET_GRANTED_DDL('DEFAULT_ROLE','PLSQL_USER')
FROM DUAL;
ALTER USER "PLSQL_USER" DEFAULT ROLE ALL



SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT', 'DBA')
FROM DUAL;
GRANT "SELECT_CATALOG_ROLE" TO "DBA" WITH ADMIN OPTION;
GRANT "EXECUTE_CATALOG_ROLE" TO "DBA" WITH ADMIN OPTION;
GRANT "DELETE_CATALOG_ROLE" TO "DBA" WITH ADMIN OPTION;



SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT', 'DBA')
FROM DUAL;
GRANT ALTER ON "SYS"."MAP_OBJECT" TO "DBA";
GRANT SELECT ON "SYS"."MAP_OBJECT" TO "DBA";
GRANT FLASHBACK ON "SYS"."MAP_OBJECT" TO "DBA";
GRANT EXECUTE ON "SYS"."DBMS_FLASHBACK" TO "DBA";
SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT', 'DBA')
FROM DUAL;
GRANT CREATE ANY SQL PROFILE TO "DBA" WITH ADMIN OPTION;
GRANT ADMINISTER ANY SQL TUNING SET TO "DBA" WITH ADMIN OPTION;
GRANT DROP ANY SQL PROFILE TO "DBA" WITH ADMIN OPTION;
GRANT MANAGE SCHEDULER TO "DBA" WITH ADMIN OPTION;


10-BAGLANTI ZAMANI LOGLARI


CREATE TABLE session_logon_statistics
(sid NUMBER,
user_logged VARCHAR2(30),
start_time DATE,
end_time DATE);


CREATE OR REPLACE TRIGGER logon_log_trigger
AFTER LOGON ON DATABASE
BEGIN
INSERT INTO session_logon_statistics
(sid, user_logged, start_time)
SELECT DISTINCT sid, ora_login_user, SYSDATE
FROM v$mystat;
END;
/
CREATE OR REPLACE TRIGGER logoff_log_trigger
BEFORE LOGOFF ON DATABASE
BEGIN
UPDATE session_logon_statistics
SET end_time = SYSDATE
WHERE sid = (select distinct sid from v$mystat)
AND end_time IS NULL;
end;
/




COLUMN user_logged FORMAT a15
COLUMN start_time FORMAT a20
COLUMN end_time FORMAT a20
SELECT sid, user_logged,
TO_CHAR(start_time, 'MM/DD/YYYY HH24:MI:SS') start_time,
TO_CHAR(end_time, 'MM/DD/YYYY HH24:MI:SS') end_time
FROM session_logon_statistics
order by sid, user_logged, start_time;
SID USER_LOGGED START_TIME END_TIME
---------- --------------- -------------------- --------------------
12 TRIGGER_TEST 01/22/2007 19:11:53 01/22/2007 19:17:22
12 TRIGGER_TEST 01/22/2007 19:17:24 01/22/2007 19:17:46
13 PLSQL_USER 01/22/2007 19:12:19 01/22/2007 19:18:13
13 SYS 01/22/2007 19:18:38 01/22/2007 19:19:34
13 SYS 01/22/2007 19:19:35 01/22/2007 19:19:53
13 SYS 01/22/2007 19:19:59
14 TRIGGER_TEST 01/22/2007 19:12:29 01/22/2007 19:18:03

27.06.2008

BEA VE ORACLE,Oracle Roadmap



Oracle bu sene başında rekor sayılabilecek bir fiyatla Bea system'i satın aldı. Bu çoğu kişi tarafından belkide piyasa değerinin iki katı gibi bir fiyata alınmış gibi görünmesine karşın bence bugün Oracle roadmap olarak Bea'ı tercih edeceğini gösteriyor. Bea gibi başarılı bir uygulamanın Oracle gibi bir Dünya devi ile buluşması çok daha verimli sonuçları ortaya çıkaracaktır.

Bunun en basit örneğini Garnter firmasının yaptığı araştırmadan da anlıyabiliyoruz.




Complimentary Reports:
BEA is positioned in three new Gartner Magic Quadrant Reports

Gartner, the world’s leading information technology research and advisory company, recently published its Magic Quadrants covering Application Infrastructure from three different “project-oriented” scenarios:

* Magic Quadrant for Application Infrastructure, 2Q07
* Magic Quadrant for Application Infrastructure for Back-End Integration Projects, 2Q07
* Magic Quadrant for Application Infrastructure for New Service-Oriented Business Application Projects, 2Q07

BEA is placed in the “Leader’s Quadrant” in each of the above Magic Quadrants

Benim kendi izlenimim ise BEA ürünleri Orta katmanda Çok fazla tercih edileceği yönünde.

Aşağıda size BEA Weblogic hakkında biraz genel bilgi vermek istiyorum..
BEA WebLogic, aşağıdaki ürünleri içeren J2EE ürün ailesine verilen addır:


* J2EE uygulama sunucusu, WebLogic Serve
* Kurumsal portal, WebLogic Portal
* Kurumsal Uygulama Entegrasyonu Platformu, WebLogic Integration
* Transaction Sunucusu ve Ortakatman Platformu,Weblogic tuxedo
* Telekomunikasyon Platformu, Weblogic comminacation platform
* Http , web sunucusu


Tarihçe

Weblogic, Inc., Eylül 1995'te Paul Ambrose, Bob Pasker, Laurie Pitman ve Carl Resnikoff tarafından kuruldu.

Şirket kurulmadan önce Ambrose ve Resnikoff, daha sonra JDBC ile standartları konulacak olan, java/veritabanı bağlantı sorunlarını çözmek üzere dbKona adı verilen, Oracle,sysbase ve microsoft sql server bağlantı sürücüleri ile birlikte; bahsi geçen veritabanlarına bağlanan applet'ler üzerinden bağlanacak 3 katmanlı bir sunucu üzerinde çalışmaktaydılar. Bu sunucu WebLogic 1.48 idi ve T3 server olarak adlandırılmıştı.

Pasker'ın WebLogic üzerinde çalışarak, Applet'lerin ağ üzerinde SNMP ve PING taleplerinde bulunabilmesini sağlaması ile, ortaya çıkan ürünün bir Uygulama Sunucusu haline getirilmesine karar verildi.

Özellikleri

Desteklediği Açık Standartlar

* J2EE 1.3 & 1.4 & 5
* JAAS
* XSLT ve XQuery
* ebXML
* BPEL ve BPEL-J
* JMX ve SNMP

* Doğrudan destek sağladığı standartlar:
o SOAP
o WSDL
o UDDI
o WS-Security
o WSRP



Bugün itibarı ile BEa weblogic Server 10.3 versiyonu bulunmaktadır.

BEA WebLogic Server

Günümüzde kurumlardaki en önemli ihtiyaçlardan biri, uygulama geliştirme sürecini
olabildiğine hızlandırmak ve pazarın beklentilerini en hızlı şekilde karşılamaktır. BEA
WebLogic Server, uygulama geliştirme sürecinde altyapı servislerini geliştirmeye
zaman ayırmadan kurumların iş ihtiyaçlarına dönük uygulamalar geliştirmelerini
sağlayacak bir altyapı sunar. WebLogic’in sunduğu bu sağlam ve kolay yönetilebilir
altyapı sayesinde, arka taraftaki veri kaynaklarına, kullanıcıların güvenli ve hızlı bir
şekilde erişimi sağlanır. BEA WebLogic Server enterprise-grade kernel yapısı
üzerine kurulmuştur, farklı programlama modellerini destekler (multiple
programming models), güçlü bir yönetim konsoluna sahiptir ve Servis Odaklı
Mimariye (SOA) uygun bir temel sunar. Yeni nesil BEA WebLogic Server’ın temel
özellikleri şunlardır: · Enterprise-grade kernel · Multi-programming models ·
Advanced administration · Reliable messaging Enterprise-grade kernel
Alanında lider ve yeniliklerin öncüsü misyonunu koruyarak, BEA WebLogic Server 10
versiyonunda J2EE 1.4 ve J2SE 5.0 spesifikasyonlarını desteklemektedir . WebLogic
Server, WebLogic platformunun temelini oluşturan bir ürün olarak, platform
üzerindeki bütün ürünlerin sağlamlığını ve güvenilirliğini sağlamak için uzun süren
test süreçlerinden geçmiştir ve güvenilirliği ve sağlamlığı bu test süreçlerinde
onaylanmıştır. BEA JRockit java virtual machine ile birlikte kullanıldığında
performans ve güvenilirlik sonuçları müşterilerimizin beklentisinin de ötesindedir.
BEA WebLogic Server, uygulamaların sürekli ayakta kalmasını sağlamak için farklı
serverların cluster yapısı içinde birlikte çalışmasını destekler. Bu özelliğiyle
WebLogic Server uygulamaların çalışmalarının sürekliliğini sağladığı gibi,
ölçeklendirilebilmeyi ve performansı da sağlar. Yük dağlımı, caching, server
migration ve failover desteği de son kullanıcıların uygulamaya kesintisiz erişimini
sağlamak amacıyla server ın içinde gelen özellikler arasındadır. Ayrıca uygulamanın
yeni versiyonu ile eski versiyonunun aynı anda server da bulunabilmesi de
uygulamanın yeni versiyonunun deploymentında kesinti yaşanmamasını sağlar. Bu
özellikleri ile WebLogic Server uygulamalarınızı sıfır kesinti ile çalıştırabileceğiniz
tek uygulama sunucusudur.
Multi-programming models

BEA WebLogic Server, hem uygulama geliştirme hem de uygulamanın çalıştırmasını
tamamıyla destekleyen bir ürün olarak farklı uygulama geliştiricilerin uygulamayı
inşasında esneklik sağlar. Popüler olarak kullanılan J2EE standartlarına dayanarak,
java uygulamacıları, javadaki son teknolojiye erişebilirler. Dinamik web sayfaları için
JSP, mission- critical uygulamalar için EJB leri kullanabilirler. Web servisleri
standartlarının WebLogic Server da tamamıyla destekleniyor olması sayesinde
Servis odaklı mimariye uygun uygulamaları geliştirilmesi mümkündür. WebLogic
Server, yaygın olarak kullanılan Spring, Apache Struts ve Apache Beehive gibi
uygulama altyapılarının kullanılması ile geliştirilen uygulamaları da tam olarak
destekler.

Advanced administration

Bir uygulamayı uygulama sunucusuna deploy ettikten sonra, uygulamanın günlük
operasyonlarının yönetiminin kolaylığı da çok önemlidir. WebLogic Server’ın yeni
versiyonu ile uygulamanın günlük yönetiminin hiç bu kadar kolay olmadığını
göreceksiniz. WebLogic Portal tabanlı yeni yönetim konsolu, değişiklik yönetimi ve
kontrolü çok kolaydır. Jyhton tabanlı WebLogic Scripting (WLST) ile birlikte, bir çok
yönetim işi otomatikleşmiş durumdadır.

WebLogic Server’ın yeni Diagnostic Servisi run-time performanslarını görmenizi
sağladığı gibi, uygulamada oluşabilecek sorunları önceden tespit etmenizi de
kolaylaştırır.

Reliable messaging

Kurumlarda bulunan eski ve yeni sistemlerin entegrasyonu oldukça kritiktir.
Kurumsal entegrasyon çözümlerinde asenkron mesajlaşma önemli bir yer tutar;
birbirinden farklı servis düzeyi anlaşmalarına (SLA) sahip sitemler arasında sınır
sağlar, farklı SLA düzeylerine sahip sistemlerin birbirlerinin performansını
etkilemeden çalışmasını sağlar. BEA WebLogic Server çekirdek Java Message

Service (JMS) e bunun çok ötesinde olanaklar sağlayan bir çok yeni özellik taşır.

Optimize edilmiş persistence store, daha önceki release lere göre % 900 daha hızlı
çalışır. Bütün bu geliştirilmiş mesaj yönetim özellikleri, sistem yöneticisine
mesajların işlenmesi üzerinde bütün kontrolü sağlar.

Ve Daha Fazlası

BEA WebLogic Server’ın yukarıda belirtilenlerden başka, çalışmalarınızı hızlandırmak
adına işinizdeki anahtar ihtiyaçlarınızı karşılayacak uygulamaların geliştirilmesinde
ve yaygınlaştırılmasında en iyi platformu sağlayacak birçok özelliği bulunmaktadır. Bu
ürünümüzle ilk buluşmanızı geliştiricilerin kullanımı için non-expiring özellikli
lisansı indirerek gerçekleştirebiliriniz.

BEA WebLogic Portal

BEA WebLogic Portal, kişilerin iş servislerine erişimine, özelleştirilmiş servis odaklı
portallerin geliştirilmesi ve yönetimini oldukça kolaylaştıran enterprise portal
sayesinde, stratejik ve etkili bir değişim getirir. WebLogic Portal uygulamaları,
içeriği ve iş süreçlerini entegre edebileceğiniz kurumsal portaller geliştirmenizi
sağlar. Sonuç olarak BEA WebLogic Portal aşağıdaki özellikleri arttırmanızı
sağlayarak, değer katar:


Benimseme — Kişilere ihtiyaç duydukları bilgi ve uygulamalara tek bir yerden ve
kendilerinin özelleştirebileceği bir şekilde erişim sağlayarak benimseme sürecini
hızlandırır ve kişlerin portal ile etkileşimini daha verimli kılar.

Verimlilik — Kullanıcıların ilgilerine ve işteki sorumluluklarına uyugn bilgi ve
uygulamalara erişimlerini kolaylaştırarak, kullanıcıların etkinliğini arttırır.
Çeviklik — IT yapısının akışkanlığını, yeniden kullanabilirliğini arttırır, böylelikle
var olan yatırımların yeni yatırımlar içinde kullanabilirliğini arttırır.
Hız — Farklı kaynaklara erişebilen bütünleşik kurumsal portal altyapısı, işin
gerektirdiği değişimlere daha çabuk yanıt vermenizi sağlar. Yatırımların Geri
döüşümü (Return on Investment (ROI)) — Uygulamanın ihtiyaç duyduğu altyapılara
değil de geçek işe ayrılan geliştirme zamanını arttırır. Birbirini takip eden her portal
geliştirmesinde yeniden kullanımı ve esnekliği arttırdığı için ROI’yi arttırır


BEA WEBLOGIC PORTAL
BEA WebLogic Portal fonksiyonel mimari
BEA WebLogic Integration



Günümüzdeki en zorlayıcı ihtiyaç, uygulamaların, veri kaynaklarının, iş
süreçlerinin ve kişilerin, iş kullanıcılarından gelen taleplere daha hızlı yanıt
verebilmek ve stratejik üstünlüğü elde edebilmek için entegrasyonunu
sağlayabilmektir. Bu güçlü ihtiyacı karşılayabilmek gereken geliştirme, test, ve
yönetim süreci ise çoğunlukla çok zaman gerektirir.Kötü senaryolarda ise bu
sürecin sonunda ortaya çıkan yapının bütün ihtiyaçları karşılamadığı gibi,
kompleks olması ve yönetim güçlüğü durumu daha da zorlaştırır. Çünkü iş
entegrasyonu, uygulamaların bire bir entegrasyonundan ya da süreç akış
diyagramlarından daha fazlası demektir. Gerçek anlamda bir entegrasyon,
kurumsal uygulamalara erişen ve kişilerin sürece efektif olarak katılımını
sağlayan iş sürecinin modelleme, otomasyon ve analizini sağlayan çok yönlü bir
ortam sağlar.

BEA WebLogic Integration gerçekte birbirinden ayrı olan iki farklı aktiviteyi
(uygulama entegrasyonu ve uygulama geliştirme) birleştiren, tek ve bütünleşik bir
entegrasyon çözümü sunar. BEA WebLogic Integration, BEA WebLogic Server®
üzerine kurulu olduğu için entegrasyon projeleri dünyanın lider uygulama
sunucusunun güvenilirlik, ölçeklenebilirlik, güvenlik gibi tüm özelliklerine sahiptir.

Sonuç olarak:

Entegrasyon çözümlerinin güvenliği ve güvenlik rolleri için kod yazmaya gerek
bırakmayan basitleştirilmiş bir yaklaşım sunar. Sistem yöneticileri, çalışma
zamanı sırasında güvenlik kurallarını kolaylıkla uygulayabilirler.
BEA WebLogic Server altyapısı kendi kendine düzeltme fonksiyonları ve
uygulamaların sürekli çalışır konumda kalmasını sağlayarak, uygulamaların
sistem çöktüğünde bile durumunu korumasını sağlar.
Uygulamaların küme yapısında (clustering) çalışması durumunda, in-memory
replication sayesinde sunuculardan birinde oluşabilecek bir hatanın uygulamada
kesinti yaratmamasını sağlar.
BEA J2EE mimarisine uygun olarak sunduğu java kontrolleri sayesinde
entegrasyonun için gerekli olan karmaşık kodları geliştirmenize gerek kalmaz. Bu
sayede daha önce geliştirdiğiniz uygulamaları paylaşabilir, kolaylıkla kullanabilir,
hızlı değişiklikler yapabilir ve entegrasyon projelerini kısa zamanda
geliştirebilirsiniz.
BEA WebLogic Integration, hızlı bir şekilde iş entegrasyonu geliştirmenizi sağlar.

Bu çözüm sayesinde IT iş tarafının amaçlarına ve bu amaçlara uygun çözümler
geliştirme sürecine daha hızlı ve efektif cevap verir.

Fonksiyonel Mimari
BEA WebLogic Integration , iş süreçlerinin otomasyonu, kurumsal kaynaklara
erişim ve bilgi sistemlerinin dinamik iş ihtiyaçlarına adaptasyonunda çabukluk
için sağlam fonksiyonlar sunar.

26.06.2008

PLSQL herkesin bilmesi gerekenler-4

7- DBMS_SESSION.SET_SQL_TRACE

Yazılan sqlleri trace etmek bizim açımızdan son derece önemlidir.


DBMS_SESSION.SET_SQL_TRACE(sql_trace BOOLEAN);


CREATE OR REPLACE PROCEDURE core_process IS
BEGIN
IF USER = 'PLSQL_USER' THEN
DBMS_SESSION.SET_SQL_TRACE(TRUE);
DBMS_OUTPUT.PUT_LINE('trace açıldı');
END IF;
DBMS_SESSION.SET_SQL_TRACE(FALSE);
DBMS_OUTPUT.PUT_LINE('Trace kapandı.');
END;
/


8-UTL_FILE/DBMS_OUTPUT

Operating sistem okuma ve yazma işlemlerine yarayan hazır paketlerimiz.

Önce oracle'nın operating sisteme ulaşması için bir directory yaratıp o directoryde hak vermemiz gerekir.

CREATE OR REPLACE DIRECTORY 'TEMP_DIR' AS '/usr/users/oracle';
GRANT READ, WRITE ON DIRECTORY TEMP_DIR TO plsql_user;


PROCEDURE FREMOVE
Argument Name Type In/Out Default?
--------------------------- ----------------------- ------ --------
LOCATION VARCHAR2 IN
FILENAME VARCHAR2 IN



PROCEDURE FRENAME
Argument Name Type In/Out Default?
--------------------------- ----------------------- ------ --------
SRC_LOCATION VARCHAR2 IN
SRC_FILENAME VARCHAR2 IN
DEST_LOCATION VARCHAR2 IN
DEST_FILENAME VARCHAR2 IN
OVERWRITE BOOLEAN IN DEFAULT



PROCEDURE FCOPY
Argument Name Type In/Out Default?
--------------------------- ----------------------- ------ --------
SRC_LOCATION VARCHAR2 IN
SRC_FILENAME VARCHAR2 IN
DEST_LOCATION VARCHAR2 IN
DEST_FILENAME VARCHAR2 IN
START_LINE BINARY_INTEGER IN DEFAULT
END_LINE BINARY_INTEGER IN DEFAULT


PROCEDURE FGETATTR
Argument Name Type In/Out Default?
--------------------------- ----------------------- ------ --------
LOCATION VARCHAR2 IN
FILENAME VARCHAR2 IN
FEXISTS BOOLEAN OUT
FILE_LENGTH NUMBER OUT
BLOCK_SIZE BINARY_INTEGER OUT

DBMS_output paketmiz sayesinde ekrana plssqlden bir bilgiyi yazdırabiliriz.

set serveroutput on olmalıdır.

SET serveroutput on
begin
dbms_output.put_line('MERHABA');
end;
/

25.06.2008

PLsql bilinmesi gerekenler -3

5-DBMS_WARNING paketi:
Detaylı Debug ve Compiling işlemleri
– plsql_warnings init.ora parameter
• 3 şeçenekli (enable, disable, error)
• 3 uyarı seviyeli
– Severe: PLW aralık 5000 to 5999
– Informational: PLW aralık 6000 to 6249
– Performance: PLW aralık 7000 to 7249
• Default DISABLE:ALL

select name, value, isses_modifiable, issys_modifiable
from v$parameter
where name like 'plsql_warning%'
NAME VALUE ISSES ISSYS_MOD
-------------- -------------------------------------- ----- ---------
plsql_warnings DISABLE:ALL TRUE IMMEDIATE
alter system set plsql_warnings='enable:severe';
System altered.
select name, value, isses_modifiable, issys_modifiable
from v$parameter
where name like 'plsql_warning%'
NAME VALUE ISSES ISSYS_MOD
-------------- ------------------------------------------- ------ --------
------------------------------------------- ------ --------
plsql_warnings DISABLE:INFORMATIONAL, DISABLE:PERFORMANCE
ENABLE:SEVERE


alter system set plsql_warnings='enable:all';
alter session set plsql_warnings = 'enable:(7000, 7203)'
alter system set plsql_warnings='enable:performance';

EXECUTE dbms_warning.set_warning_setting_string('ENABLE:ALL','SYSTEM');
PL/SQL procedure successfully completed.

select dbms_warning.get_warning_setting_string
from dual;

GET_WARNING_SETTING_STRING
-------------------------------------------------------------
ENABLE:ALL


Compile sırasında uyarı mesajını alabiliriz. Bunun show error yada user_errors viewdan görebiliriz.

SQL> show errors
Errors for PROCEDURE MY_PROC:
LINE/COL ERROR
-------- ----------------------------------------------------
2/2 PLW-07203: parameter 'P_DATE_INFO' may benefit from
use of the NOCOPY compiler hint

6-DBMS_APPLICATION_INFO

Gerçek zamanlı asynchronous uygulama bilgisi

SET_MODULE Procedure
– Updates V$SESSION ve V$SQLAREA
– MODULE ve ACTION kolonları
– commite gerek yok
– Syntax
– V$SESSION Updated anında
– V$SQLAREA Updated yeni calıştırmalar için

DBMS_APPLICATION_INFO.SET_MODULE
(module_name VARCHAR2, action_name VARCHAR2);

SELECT sid, serial#, username, module, action
FROM v$session
WHERE USERNAME = 'PLSQL_USER';

SID SERIAL# USERNAME MODULE ACTION
---- ---------- ----------- ----------------- ------
7 7 PLSQL_USER SQL*Plus

DBMS_APPLICATION_INFO.SET_MODULE
('Package: TEST', 'Procedure: MAIN');

SELECT sid, serial#, username, module, action
FROM v$session
WHERE USERNAME = 'PLSQL_USER';

SID SERIAL# USERNAME MODULE ACTION
---- ------- ----------- -------------- ---------------
7 7 PLSQL_USER Package: TEST Procedure: MAIN

SELECT sql_text, module, action
FROM v$sqlarea
WHERE INSTR(UPPER(sql_text), 'INVENTORY') > 0;

SQL_TEXT MODULE ACTION
-------------------------- --------------- ---------------
SELECT * FROM s_inventory SQL*Plus
SELECT sql_text, module, a Package: TEST Procedure: MAIN
ction FROM v$sqlarea
WHERE INSTR(UPPER(s
ql_text), 'INVENTORY') > 0



DECLARE
CURSOR cur_employee IS
SELECT employee_id, salary, ROWID
FROM s_employee;
lv_count_num PLS_INTEGER := 0;
lv_start_time_num PLS_INTEGER;
BEGIN
lv_start_time_num := DBMS_UTILITY.GET_TIME;
FOR cur_employee_rec IN cur_employee LOOP
lv_count_num := lv_count_num + 1;
-- Employee processing logic...
IF MOD(lv_count_num, 1000) = 0 THEN
DBMS_APPLICATION_INFO.SET_MODULE
('Records Processed: ' || lv_count_num,
'Elapsed: ' || (DBMS_UTILITY.GET_TIME -
lv_start_time_num)/100 || ' sec');
END IF;
END LOOP;
END;
/

SELECT username, module, action
FROM v$session
WHERE username = 'PLSQL_USER';

USERNAME MODULE ACTION
---------- ------------------------- -----------------
PLSQL_USER SQL*Plus
PLSQL_USER Records Processed: 1000 Elapsed: 4.37 sec

USERNAME MODULE ACTION
---------- ------------------------- -------------------
PLSQL_USER SQL*Plus
PLSQL_USER Records Processed: 25000 Elapsed: 126.66 sec

24.06.2008

PLSQL herkesin bilmesi gerekenler-2

Source kodu şifreleme

Yazdığınız kodları bodylerini şifrelememiz mümkündür. Zaten hazır gelen oracle paketlerinde şifrelemesi yapılmıstır.

Şifrelenmiş kodları user_source ile bakılsada ekranda görmemiz mümkün olmayacaktır.


WRAP INAME=.sql ONAME=.plb

WRAP INAME=exec_ddl.sql ONAME=exec_ddl.plb


CREATE OR REPLACE PROCEDURE exec_ddl (p_statement_txt
VARCHAR2) IS
lv_exec_cursor_num PLS_INTEGER := DBMS_SQL.OPEN_CURSOR;
lv_rows_processed_num PLS_INTEGER := 0;
BEGIN
DBMS_SQL.PARSE (lv_exec_cursor_num, p_statement_txt,
DBMS_SQL.NATIVE);
lv_rows_processed_num := DBMS_SQL.EXECUTE
(lv_exec_cursor_num);
DBMS_SQL.CLOSE_CURSOR (lv_exec_cursor_num);
EXCEPTION
WHEN OTHERS THEN
IF DBMS_SQL.IS_OPEN (lv_exec_cursor_num) THEN
DBMS_SQL.CLOSE_CURSOR (lv_exec_cursor_num);
END IF;
END exec_ddl;
/


CREATE OR REPLACE PROCEDURE exec_ddl wrapped
0
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd...




DECLARE
WRAPPED_TEXT VARCHAR2(1000);
BEGIN
WRAPPED_TEXT := 'CREATE PROCEDURE xyz AS BEGIN
DBMS_OUTPUT.PUT_LINE(''EXECUTED PROCEDURE XYZ''); END;';
DBMS_DDL.CREATE_WRAPPED(WRAPPED_TEXT);
END;



10gR2> EXECUTE XYZ
EXECUTED PROCEDURE XYZ
10gR2> SELECT * FROM USER_SOURCE WHERE NAME = 'XYZ';
NAME TYPE LINE TEXT
---------- ---------- ---------- ---------------------------
XYZ PROCEDURE 1 PROCEDURE xyz wrapped
a000000
b2
abcd
abcd
...

4-Autonomous Transactions

Bu yapı sayesinde bir transaction diğerinin içinde olmasına rağmen bağımsız çalışabilir.
Böylece commitlenmemiş bir kredi kartı işleminin bile audit benzeri bir tabloya yazılmasını sağlayabiliriz.


CREATE OR REPLACE PROCEDURE insert_product
(p_product_num VARCHAR2) IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO s_product
(product_id, product_name)
VALUES
(p_product_num, 'NEW PRODUCT');
COMMIT;
END;
/


BEGIN
INSERT INTO s_inventory
(warehouse_id, product_id)
VALUES
(10501, 10011);
insert_product(232);
ROLLBACK;
END;
/


sonuc
– Product 232 Inserted
– hic kayıt insert edlmiştir. s_inventory

23.06.2008

PLSQL önemli özellikler

PLSQL de dikkat edilmesi gerekenler.
1- Yazdığımız kodun etkiledikleri(depend) olanları tespit etmek.
SELECT name, type
FROM user_dependencies
WHERE referenced_name = UPPER('&object_name')
AND referenced_type = UPPER('&object_type')
ORDER BY name;
Çıktısı
NAME TYPE
---------------------- -------------
DBMS_ALERT PACKAGE
DBMS_ALERT PACKAGE BODY
DBMS_OUTPUT PACKAGE
DBMS_OUTPUT PACKAGE BODY
DBMS_SHARED_POOL PACKAGE
DBMS_SHARED_POOL PACKAGE BODY
Daha güzel bir depency örneği
CREATE OR REPLACE PACKAGE dependency_tree AS
-- This package will traverse top-down(p_direction_txt = T)
-- or bottom-up (p_direction_txt = B)
PROCEDURE find_dep
(p_direction_txt IN VARCHAR2,
p_object_name_txt IN VARCHAR2,
p_owner_txt IN VARCHAR2 :=USER);
PROCEDURE get_dep
(p_direction_txt IN VARCHAR2,
p_direction_msg2 IN VARCHAR2,
p_object_owner_txt IN VARCHAR2,
p_object_name_txt IN VARCHAR2,
p_object_type_txt IN VARCHAR2,
p_index_num IN PLS_INTEGER);
FUNCTION repeat_char
(p_repeat_num IN PLS_INTEGER,
p_repeat_txt IN VARCHAR2 := '-') RETURN VARCHAR2;
END dependency_tree;
/
Başka bir örnekte ise hazır paketimizi kullanabiliriz.
EXECUTE dependency_tree.find_dep('T','A');
---------------------------------------------------------
START OF DEPENDENCY TREE LISTING (TOP-DOWN)
---------------------------------------------------------
Dependencies for PROCEDURE PLSQL_USER.A
---------------------------------------------------------
---> References Object PLSQL_USER.B
----> References Object PLSQL_USER.C
-----> References Object PLSQL_USER.D
------> References Object PLSQL_USER.E
---------------------------------------------------------
END OF DEPENDENCY TREE LISTING (TOP-DOWN)
---------------------------------------------------------
PL/SQL procedure successfully completed.
2-PLSQL compilation. Yazdığımız kodun compile edilmesinin sonuçları:
Standard Yöntem
1. Değiştirmek Stored Program Unit
2. Compile etmek Stored Program Unit
3. USER_OBJECTS for All INVALID objeleri bulalım
4. Execute Dynamic SQL çalıştırıp Build COMPILE Script
All INVALID Objects
5. Execute COMPILE scripti
6. tekrar 3 maddeye dönüp bütün hepsini compile edilmiş görmek
• Daha kolay bir yol varmıdır?
SELECT owner, object_type, object_name, status,
TO_CHAR(created, 'MM/DD/YY HH24:MI:SS') created,
TO_CHAR(last_ddl_time, 'MM/DD/YY HH24:MI:SS') modified
FROM dba_objects
WHERE object_type IN ('PROCEDURE', 'FUNCTION', 'PACKAGE',
'PACKAGE BODY', 'TRIGGER')
AND status = 'INVALID'
AND owner = 'PLSQL_USER'
ORDER BY owner, object_type, object_name;
OBJECT_TYPE OBJECT_NAME STATUS CREATED MODIFIED
------------ ------------- ------- ----------------- -----------------
PACKAGE CLOSE INVALID 03/06/07 13:53:20 03/06/07 14:12:53
PACKAGE BODY CLOSE INVALID 03/06/07 13:55:04 03/06/07 14:12:53
PROCEDURE ADJUST_SALARY INVALID 02/13/07 15:22:02 02/15/07 12:21:18
DBMS_UTILITY.COMPILE_SCHEMA (schema VARCHAR2);
DBMS_UTILITY.COMPILE_SCHEMA ('PLSQL_USER');

11g default audit

11g database kurmaya kalktığımızda dbca sırasında bize güvenlik penceresi gelir audit seçeneklerini isaretlediğimizde audit trail=db olarak aşağıdaki önemli hakaları izlemeye alır.Bütün bu hakları by access olarak izmeleye alınır.

ALTER ANY PROCEDURE
CREATE ANY LIBRARY
DROP ANY TABLE
ALTER ANY TABLE
CREATE ANY PROCEDURE
DROP PROFILE
ALTER DATABASE
CREATE ANY TABLE
DROP USER
ALTER PROFILE
CREATE EXTERNAL JOB EXEMPT ACCESS POLICY
ALTER SYSTEM
CREATE PUBLIC DB LINK
GRANT ANY OBJECT PRIVILEGE
ALTER USER
CREATE SESSION
GRANT ANY PRIVILEGE
AUDIT SYSTEM
CREATE USER
GRANT ANY ROLE
CREATE ANY JOB
DROP ANY PROCEDURE

19.06.2008

Güvenlik tavsiyeleri-3

Güvenlik Tavsiyeleri-3


11- Oracle patchlerini takip edelim. Bir servera geçilen patchleri aşağıdaki şekilde görebiliriz.

## opatch lsinventory
Oracle Interim Patch Installer version 1.0.0.0.53
Copyright (c) 2005 Oracle Corporation. All Rights Reserved.
Result:
Installed Patch List:
=====================
1) Patch 4392423 applied on Tue Sep 13 12:11:29 EDT 2005
[ Base Bug(s): 4392430 4392423 4199455 4210374 ]
OPatch succeeded.

12- 10g R2 kullanmıyorsanız connect rolune dikkat edelim, zira 10g r2 öncesinde connect role create table hakkını bile kapsardı. Bugün ise sadece create session hakkını kapsıyor.10g r2 öncesinde çalışıyorsanız size aşağıdaki gibi bir çözümü öneririm.
SQL> create role db_connect;
SQL> grant create session to db_connect;
SQL> grant db_connect to new_user identified by password

13- Şifreleme inanılmaz önemlidir zira

select distinct dbms_rowid.Rowid_RELATIVE_FNO(rowid) file#,
dbms_rowid.rowid_block_number(rowid) BLOCK# from tablo adı dersek
bize tablomuzun file ve block numarasını döndürür.
Mesela file 4 block 406

daha sonra alter system dump datafile 4 block 406 dersek

user_dump_destination altında artıkbir dosyamız daha olusmustur.
olusan bu dosyayı
Operating sistemden
less ....._trc dosyası diyerek içeriğine bakarsak artık tablo icindeki kredi kartları gibi butün kolonlarımızdaki bilgileri açık bir şekilde ulaşmıs oluruz.

Bu durumu önlemek için Mutlaka

Alter table tabloadı modify(kolonadı encrypt) demeliyiz.

14- SQLPLUS ürün güvenliğini sağlamak, yani bir userın sqlplus select yapmasına karışmamamak fakat DML komutlarını yapmasına izin vermemek

SQL>conn / as sysdba

SQL>DESC product_user_profile
product
userid
attribute
scope
numeric_value
char_value
date_value
long_value

sql>insert into product_user_profile values ('SQLPLUS','ZEKERIYA','INSERT',null,null,'DISABLED',null,null)


sql>insert into product_user_profile values ('SQLPLUS','ZEKERIYA','UPDATE',null,null,'DISABLED',null,null)


sql>insert into product_user_profile values ('SQLPLUS','ZEKERIYA','DELETE',null,null,'DISABLED',null,null)

Commit;

böylece zekeriya user'nın artık hakkı olmasına rağmen sqlplus insert update ve delete işlemi gerçekleştirilemiyecektir.

18.06.2008

Guvenlik 2

6- Data dictionary ulasan sys userı diğer userların passwordlarını değiştirip tekrar geri kopyalayabilir.

SELECT password FROM dba_users WHERE username = ‘SCOTT’;
ALTER USER scott IDENTIFIED BY hijack;
CONNECT scott/hijack
GRANT SELECT ON scott.emp to PUBLIC
ALTER USER scott IDENTIFIED BY VALUES ‘23E3F8C1BB14BB4D’;

Bunu önlemek için mutlaka Alter user Audit yapmalıyız.

7- Authentication yöntemi olarak Oracle internet directory seçelim.

Önce oracle internet directory install ediyoruz. Oracle application server cd'sinden infra kurarak yapabiliriz.
Daha sonra databaseden Netca acıp direcory seciyoruz. Son olarakda DBCA configure database seçeneklerinden database internet diretory register edelim. Artık userları Global yaratabiliriz.

8- Audit trail databasein dısına tasıyalım. Unixlerde ve linux makinalarda syslog audit için açalım.

9- Database vault ve audit vault kullanalım.

10-
ALTER SYSTEM SET AUDIT_TRAIL = DB_EXTENDED SCOPE=SPFILE;
audit insert, update, delete on scott.emp by access;
Startup force;


execute :salary := 7000;
update SCOTT.EMP set sal = :salary where empno = 9000


select owner, obj_name, action_name, sql_bind, sql_text from dba_audit_trail;
One Oracle returned for the update statement shows the SQLTEXT and the SQLBIND values like this:
SQLTEXT -> update SCOTT.EMP set sal = :salary
where empno = 9000
SQLBIND -> #1(4):7000

Yukarıdaki örnektende anlaşıldığı üzere database bazında sql textlerimizi ve sql bind değişkenlerimizi görebiliyoruz. 1 ilk sefer oldugu 4 auditlenen alanı 7000 de değerini gösterir.

17.06.2008

GUVENLIK

1- TCP.VALIDNODE_CHECKING kullanıp sadece izin verdiğimiz ip adreslerinin database ulaşmasını sağlayalım
INVITED_NODES bağlanmasına izin verilenler
EXCLUDED_NODES bağlanmasına karşı çıkılanlar

edit sqlnet.ora

tcp.validnode_checking = yes
tcp.invited_nodes = (192.168.2.2, 192.168.2.3)
# tcp.excluded_nodes = (192.168.2.4)

2- Database logon trigerı yazalım.

CREATE OR REPLACE TRIGGER check_session_connection
AFTER LOGON ON DATABASE
DECLARE
cursor c_session is
select sys_context('userenv','session_user') username,
s.module, s.program
from v$session s
where sys_context('userenv','sessionid')=s.audsid;
r_session c_session%rowtype;
BEGIN
OPEN c_session;
FETCH c_session into r_session;
IF upper(r_session.module) like ('%EXCEL%') THEN
raise_application_error (20901,'Excel - go away.');
END IF;
IF upper(r_session.module) like ('%ACCESS%') THEN
raise_application_error (20902,'Access - go away.');
END IF;
CLOSE c_session;
END;

3- password verify function ile profile değiştirip passwordleri komplex hale getirelim.
SQL> @?/rdbms/admin/utlpwdmg.sql
SQL> alter profile default limit password_verify_function verify_function;

4- Database linklerin 10g R2 ile güvenliğini artıralım. Sys.link$ sorgulandığında database linkini fix user ile create ederseniz passwordu görebilirsiniz.

5- Audit user logon bilgileri


set newpage 2
set heading off

select count(*) Num,
substr(username,1,10) username,
substr(terminal,1,12) terminal,
substr(os_username,1,15) os_username,
substr(to_char(timestamp,'DD-MON-YY'), 1,9) timestamp
from dba_audit_session
where returncode<>0
and timestamp > sysdate-7
group by username,
terminal,
os_username,
to_char(timestamp,'DD-MON-YY');

16.06.2008

Oracle guvenlik, Database Vault

Önce database vault nasıl install ederiz biraz ondan bahsedelim.

10g R2 standart yada RAc üzerine install etmemiz mümkündür. İki account yaratacaz bunlar Database Vault Owner ve Database Vault Account Manager. database vault owner mevburi install ederken belirtiyoruz. Account manager ise opsiyonel.
Dv_owner rolunde olan database vault owner accountudur.DV_ACCTMGR ise account manager userımızdır.

1gb memory 500mb bos alan ise gerekli minumum şartlar diyebiliriz.operating sistem sartları ise 10g R2 ile aynıdır.enterprise edition Oracle Database 10g release 2 (10.2.0.4) gerekli diyebiliriz. Ayrıca instance parametrelerinden REMOTE_LOGIN_PASSWORDFILE mutlaka EXCLUSIVE or SHARED olmamlıdır.

enterprise manager,database,isqlplus,listener stop olmalıdır.

:/runInstaler ile instalasyona basladığımızda bize dv_owner userını soracaktır.installasyonun sonunda DVCA ile bitiriyoruz.

Database vault bağlanmak için

http://host_name:(port genelde 1158 olur)/dva

Böylece database vault yönetim ekranına ulaşmış oluruz.
Daha sonra
  1. In the Administration sayfasında Database Vault Feature Administration, seçelim Realms.

  2. In the Realms sayfasında, select Oracle Data Dictionary from the list and then click Edit.

  3. In the Edit Realm: Oracle Data Dictionary page, altında Realm Authorizations, click Create.

  4. In the Create Realm Authorization Page, from the Grantee list, select SYSTEM [USER].

  5. For Authorization Type, select Owner.

  6. Çıkalım Authorization Rule Set at şeçmeden

  7. Click OK.

    In the Edit Realm: Oracle Data Dictionary page, SYSTEM should be listed as an owner under the Realm Authorizations.

  8. Click OK to return to the Realms page.

  9. To return to the Administration page, click the Database Instance instance_name link over Realms.

sistem accountu ile bağlanıp Hr schemasına ulaşalım

sqlplus system
SQL> Enter password: password

SQL> SELECT FIRST_NAME, LAST_NAME, SALARY FROM HR.EMPLOYEES WHERE ROWNUM < 10;

FIRST_NAME LAST_NAME SALARY
-------------------- ------------------------- ----------
Donald OConnell 2600
Douglas Grant 2600
Jennifer Whalen 4400
Michael Hartstein 13000
Pat Fay 6000
Susan Mavris 6500
Hermann Baer 10000
Shelley Higgins 12000
William Gietz 8300

9 rows selected.
Görüldüğü üzere system accountu rahat bir şekilde Hr schemasına ulaşıyor.

şimdi realm create edelim

Realms schemayı schema objelerini korumak için tasarlanmıştır.

  1. In the Realms page of Oracle Database Vault Administrator, click Create.

  2. In the Create Realm page, General, enter HR Realm after Name.

  3. status kısmında , Enabled is selected seçili olsun

  4. Audit Options, Audit On Failure is seçelim

  5. OK.

Şimsi Hr. employees tablosunun güvenliğini sağlayalım

  1. In the Realms sayfasında, select HR Realm from the list and then click Edit.

  2. In the Edit Realm: HR Realm page, scroll to Realm Secured Objects and then click Create.

  3. In the Create Realm Secured Object sayfasında aşağıdaki ayarlar gelir.

    • Object Owner: Select HR from the list.

    • Object Type: Select %.

    • Object Name: EMPLOYEES.

  4. Click OK.

  5. In the Edit Realm: HR Realm page, click OK.

Şimdide authorized işlemlerini gerçekleştirelim.

Yeni bir user yaratalım

  1. SQL> CONNECT dbvacctmgr
    Enter password: password

    SQL> CREATE USER zekeriya IDENTIFIED BY password;
  2. Connect as SYSTEM privilege, and then grant zekeriya aşağıdaki hakları verelim.

    SQL> CONNECT SYSTEM
    Enter password: password

    SQL> GRANT CREATE SESSION, SELECT ANY TABLE TO zekeriya;
Sqlplus ta zekeriya userı hr.employees tablosunu select etmeye kalktığında select edemez zira tablo realm tarafında korunur.
  1. In the Realms page of Database Vault Administrator, select the HR Realm in the list of realms, and then click Edit.
  2. In the Edit Realm: HR Realm page, scroll down to Realm Authorizations and then click Create.

  3. In the Create Realm Authorization page, under Grantee, select zekeriya[USER] from the list.

  4. Under Authorization Type, select Owner.

    Owner olarak şeçmek artık zekeriya userınıda bu yetkileri hr.employees tablosundaki yetkili olması ve görmesi demektir.

  5. Under Authorization Rule Set, select , because rule sets are not needed to govern this realm.

  6. Click OK.

Şimdi test edelim

System userı ile bağlanıyoruz ve select etmeye kaltığımızda görmezken
sqlplus system
Enter password: password

SQL> SELECT FIRST_NAME, LAST_NAME, SALARY FROM HR.EMPLOYEES WHERE ROWNUM <10;

Error at line 1:
ORA-01031: insufficient privileges
SQL> CONNECT zekeriya
Enter password: password

SQL> SELECT FIRST_NAME, LAST_NAME, SALARY FROM HR.EMPLOYEES WHERE ROWNUM <10;

FIRST_NAME LAST_NAME SALARY
-------------------- ------------------------- ----------
Donald OConnell 2600
Douglas Grant 2600
Jennifer Whalen 4400
Michael Hartstein 13000
Pat Fay 6000
Susan Mavris 6500
Hermann Baer 10000
Shelley Higgins 12000
William Gietz 8300

9 rows selected.


Ve tabiki bütün bu işlerin raporunu almakta mümkündür

Yetkili DV userı bağlanıp
  1. In the Database Vault Reports page, scroll down to Database Vault Auditing Reports and select Realm Audit.
  2. Click Run Report.


Demesi kimlerin başarılı kimlerin başarısız olduklarını listeleyecektir.

13.06.2008

linux vi komutlari

Bugun sizler Oracle ile beraber kullanıdıgımız linux işletim sistemi ve onun bir takım komutlarından bahsetmek istiyorum.

Vi komutlari

/ ileri dogru arama

u- undo

:e! - kaydetmeden current dosyaya re edit

a- append text cursorın olduğu yere

A-append text ama en sona

i- insert text cursor

I-satırın basına insert

o-cursor oldugu yerin altına bir bos satır ekleme

p-print değişen satırlar

x-delete karakter

dd-delete satır

dnd-n satır delete

Y-copy current satır

yinteger-copy kac satır

:wq kaydet cık.

zz edit modu sonlardır :w filename- save

zz kaydetmeden cık

:q! kaydetmeden cık

BASIT LINUX KOMUTLARI

man manuel sayfalar

info komut komut hakkında bilgi

cat fle standart output print

cat /etc/password list users

cd direcroty directory değiştirme

cp source destination kopyalama

less file

more file file icerigi görme

ls directory dizin yapısı

mkdir directory yeni directory create etmek

mv eskifile yenifile move etmek,rename etmek

ps -ef process listesi

pwd print working directory

rm file silme

touch file file yaratma

hostname makina adını göster

host makinaadı ip adresini göster

. dosya script çalıştırma

sed command line editor

vi visual editor

emacs file GNU editor

gedit file tam ekran editor

set

printenv envorinment varible listeleme

xclock saat

xhost+xclient display izin verme

/ root

/home home directory

/boot boot directory

/tmp temp directory

/etc/ininttab configurasyon dosyası oracle servisini buraya yazar

/etc/passwd password file

crontab -e schedule etme

/etc/anacrontab schedule listesi

batch option time schedule etme

mount opt dev mount point mount point yaratma

umount kaldırma

useradd yeni user ekleme

userdel user silme

usermod user modify etme

groupadd grup ekleme

shutdown kapatmak

dmesg hata logları

/etc/sysconfig/network-scripts/ network ip adresi

/etc/hosts host ip adresi

ifconfig -a ipleri gösterme

ifconfig eth0 ip netmask subnet mask ip verme

rpm -ivh package software install etme

rpm-ql package listeleme

top performance monitor

vmstat virtual memeory istatisitk

iostat io istatistik

free swap size gösterme

df -k free disk blockları

12.06.2008

Oracle Label security nasıl yüklenebilir.

İlk önce normal oracle kurulumumuzu tamamlarız. Daha sonra

/mnt/cdrom/runInstaller calıstırıp custome installdan oracle label security check boxını seçeriz.

gerekli kurulumu tamamlar.

Daha sonra rundan dbca diyip database database assitanta gireriz. Asistanta configure database option girip databasezimizi seçip label security enable hale getiriryoruz.

Bu işlem database restart etmesini ister.

Bu işlemlerden sonra oracle policy manager instal edebiliriz.

bir adet oracle client cdsinden runınstaller calıstırıp administrator seçelim.Administrator
seçersek artık Oracle policy manager gelmiş olur.

Böylece güvenlik tarafında label security kullanmaya başlayabiliriz.

Tüm Güvenlik İhtiyaçlarına Özel Oracle Veritabanı Teknolojileri

Erişim kontrolü-Güvenlik ve mahremiyet-
Database Vault
Görev Ayrılığı, uyumluluk, kurum içi tehdit
Oracle Label Security
Satır seviyesinde veritabanı güvenliği
İzleme-Uyarı raporlama-Uyumluluk Düzeyi Ölçme
Audit Vault
Veri erişim haklarının denetlenmesi
EM Configuration Management Pack
Verinin Korunması-Ağ ğüvenliği şifreleme-Disk Tape güvenliği
Advanced Security Option Veri iletimi sırasında veri güvenliği sağlanması
Oracle Secure Backup
Kullanıcı Güvenliği
Kimik denetimi-Şifreleme
Advanced Security Option
Enterprise User Security
Merkezi yönetim, güçlü authentication

11.06.2008

ASM Tavsiyeleri

ASM EN IYI TAVSIYELER

10g ile birlikte gelen ASM bugün file system ve volume manager rolünü üstlenmiştir.
Database'in optimum performansı ve kaynak kullanımı için tasarlanılmıştır.
Çok basit bir şekilde diskler arasında load balancing yapabilmektedir.
ASM instance ile Oracle instance ayrı Oracle_homelara install edelim.Böylece hem availbility hem yönetimsellik artmış olur.Database'in ve ASM upgrade işlemlerini ayrı ayrı yapabiliriz.
Normalede her nodda bir ASM instance olur.RAC ortamlarınında her node için ayrı bir
ASM instance kuruyoruz.Bunlar interconnectler aracılıgı ile metadatalarını sekronize
ediyorlar.

Bir init.ora örneği

instance_type=asm
#SGA sizing -----------------------------------------------
large_pool_size=20M
shared_pool_size=80M
processes=55
#Storage -----------------------------------------------------
asm_diskstring='ORCL:*'
asm_diskgroups='DATA','FLASH','DATA_SOX‘
#RAC parameters ----------------------------------------
+ASM1.instance_number=1
+ASM2.instance_number=2
cluster_database=true
# trace files destinations --------------------------------
background_dump_dest=/opt/oracle/product/server32/10gr1/admin/+ASM/bdump
core_dump_dest=/opt/oracle/product/server32/10gr1/admin/+ASM/cdump
user_dump_dest=/opt/oracle/product/server32/10gr1/admin/+ASM/udump

ASM yönetim işlemleri üç ana temele dayanır.DISK,DISKGROUP,FILE

Iki diskgrup yapmanızı tavsiye ederim.
Bunlardan birini database alanı diğerini flash recovery alanı olarak düşünebiliriz.

Diskgrupların aynı boyutlarda disklerden ve aynı performans karakterine sahip disklerden oluşması önemlidir.

Flash recovery area için düşündüğümüz alanının boyu database boyundan fazla olmalıdır.

Eğer iyi bir Storage alanında duruyorsak external redundancy'i seçebiliriz.

Eğer donanımsal RAID kullanıyorsak LUN lerdeki stripe sizenı 1mb yakın yapmalıyız.

Databasede ASM kullanıyorsak OMF kullanmamızda fayda vardır.

db_recovery_file_dest='+FLASH’
db_create_file_dest=‘+DATA’

iki parametreyi set ederek işlerimizi halledebiliriz.

Böylece databaseden drop ettiğimizde de ASM den otomatik silmiş oluruz.

ASM instance database instancedan önce start etmelidir.

Otomatik memory manegement kullanmamız doğru olur.

Zira sharedpool ve large pool için extra memory process sayısı olarak en az 16 fazla process ihtiyacımız vardır.

RMAN ile backup almamız doğru olur.

Datapump kullanabiliriz.

Rman sayesinde normel file sistemden ASM instance kısmen geçişlerde mümkündür.

10.06.2008

SQL GROUP BY örnekleri

Materilized View

CREATE MATERIALIZED VIEW sales_mv AS
SELECT
channel_desc channel,
prod_category category,
prod_subcategory subcategory,
prod_name product,
calendar_year year,
calendar_quarter_number quarter,
calendar_month_number month,
SUM(amount_sold) sales
FROM sales, times, products, channels
WHERE sales.time_id = times.time_id
AND sales.prod_id = products.prod_id
AND sales.channel_id = channels.channel_id
AND prod_category IN ('Photo', 'Hardware')
AND calendar_year IN (2000, 2001)
AND channel_desc IN ('Direct Sales', 'Internet')
GROUP BY channel_desc, prod_category, prod_subcategory, prod_name, calendar_year,
calendar_quarter_number, calendar_month_number;

ROLLUP EXTENSION

SQL> select year, quarter, month, sum(sales) sales
2 from sales_mv
3 where quarter in (1,2)
4 group by
5 rollup(year, quarter, month)

YEAR QUARTER MONTH SALES
----- ---------- ---------- ----------
2000 1 1 535721.14
2000 1 2 590694.56
2000 1 3 521087.59
2000 1 1647503.29
2000 2 4 441138.68
2000 2 5 494655.15
2000 2 6 435226.29
2000 2 1371020.12
2000 3018523.41
2001 1 1 571462.03
2001 1 2 568428.13
2001 1 3 763963.5
2001 1 1903853.66
2001 2 4 764267.14
2001 2 5 692348.86
2001 2 6 753519.27
2001 2 2210135.27
2001 4113988.93
7132512.34


CUBE EXTENSION

SQL> select channel, category, year, sum(sales) sales
2 from sales_mv
3 group by cube(channel, category, year)
4 order by channel, category, year
5 /
CHANNEL CATEGORY YEAR SALES
------------ ---------- ----- ----------
Direct Sales Hardware 2000 2762505.5
Direct Sales Hardware 2001 2932993.6
Direct Sales Hardware 5695499.1
Direct Sales Photo 2000 2538263.21
Direct Sales Photo 2001 2874063.97
Direct Sales Photo 5412327.18
Direct Sales 2000 5300768.71
Direct Sales 2001 5807057.57
Direct Sales 11107826.3
Internet Hardware 2000 133691.03
Internet Hardware 2001 1142198.46
Internet Hardware 1275889.49
Internet Photo 2000 441508.29



GROUPING FUNCTIONS

SQL> select year, quarter, month, sum(sales) sales,
2 grouping(year) yr, grouping(quarter) qtr, grouping(month) mth
3 from sales_mv
4 where quarter in (1,2)
5 group by
6 rollup(year, quarter, month)
7 /
YEAR QUARTER MONTH SALES YR QTR MTH
----- ---------- ---------- ---------- ---------- ---------- ----------
2000 1 1 535721.14 0 0 0
2000 1 2 590694.56 0 0 0
2000 1 3 521087.59 0 0 0
2000 1 1647503.29 0 0 1
2000 2 4 441138.68 0 0 0
2000 2 5 494655.15 0 0 0
2000 2 6 435226.29 0 0 0
2000 2 1371020.12 0 0 1
2000 3018523.41 0 1 1
2001 1 1 571462.03 0 0 0
2001 1 2 568428.13 0 0 0
2001 1 3 763963.5 0 0 0
2001 1 1903853.66 0 0 1
2001 2 4 764267.14 0 0 0
2001 2 5 692348.86 0 0 0
2001 2 6 753519.27 0 0 0
2001 2 2210135.27 0 0 1
2001 4113988.93 0 1 1
7132512.34


GROUPING_ID
SQL> select channel, category, year, sum(sales) sales,
2 grouping_id(channel,category,year) grouping_id
3 from sales_mv
4 group by cube(channel, category, year)
5 order by channel, category, year
6 /
CHANNEL CATEGORY YEAR SALES GROUPING_ID


COMPOSITE COLUMNS
SQL> select year, quarter, month, sum(sales) sales
2 from sales_mv
3 where quarter in (1,2)
4 group by
5 rollup(year, (quarter, month))
6 /
YEAR QUARTER MONTH SALES
----- ---------- ---------- ----------
2000 1 1 535721.14
2000 1 2 590694.56
2000 1 3 521087.59
2000 2 4 441138.68
2000 2 5 494655.15
2000 2 6 435226.29
2000 3018523.41
2001 1 1 571462.03


GROUPING SETS EXPRESSION
SQL> select channel, category, year, sum(sales) sales
2 from sales_mv
3 group by grouping sets (channel, category, year)
4 order by channel, category, year
5 /
CHANNEL CATEGORY YEAR SALES
------------ ---------- ----- ----------
Direct Sales 11107826.3
Internet 3378109.2
Hardware 6971388.59
Photo 7514546.89
2000 5875968.03


CONCATENATED GROUPINGS
SQL> select channel, category, year, quarter, sum(sales) sales
2 from sales_mv
3 where quarter in (1,2)
4 group by grouping sets (channel, category), grouping sets (year, quarter)
5 order by channel, category, year, quarter
6 /
CHANNEL CATEGORY YEAR QUARTER SALES
------------ ---------- ----- ---------- ----------
Direct Sales 2000 2906732.02
Direct Sales 2001 2806723.79
Direct Sales 1 2900331.1
Direct Sales 2 2813124.71
Internet 2000 111791.39

9.06.2008

Oracleda uygulama gerçekleştiren her yazılımcının bilmesi gerekenler

1- cost based optimizer kullandığımız için mutlaka istatistik almak

BEGIN
-- Table Name = table_1
--
DBMS_STATS.GATHER_TABLE_STATS(
ownname =>
'joeholmes'
, tabname =>
'table_1'
, estimate_percent => NULL)

2-Genel data dictionary tablolarımız.

Common DD tables:
– user_tables , user_indexes
• temel bilgiler tablolar ve indexler
• son analiz bilgileri CBO
– user_tab_columns , user_ind_columns
– user_db_links , user_synonyms , user_constraints

3-Commit rollback bilgileri
Can ROLLBACK before COMMIT
• Explicit COMMIT
– Commits changes INSERT, UPDATE, DELETE to database
– SET AUTOCOMMIT on;
• Implicit COMMIT
– Eğer CREATE table, index
– DROP, TRUNCATE table
– ROLLBACK will not reverse it

4-Decode yazılımı
SQL*Plus DECODE beraber IF-THEN-ELSE logic
• Daha hızlı daha güçlü

, DECODE(alanadı, a, x, b, y, z)
• Mantığı
IF alan= a, then assign x to answer
ELSEIF field1 = b, then assign y to answer
ELSE assign z to answer;

5-Null örneği
NULL != NULL
– Use IS NULL, IS NOT NULL, NVL(field,value
WHERE a.fielda IS NULL
AND a.fieldb IS NOT NULL
AND NVL(a.field1,0) = NVL(b.field1,0)
AND NVL(a.field2, ‘ ‘) = NVL(b.field2, ‘ ‘);


6-Concat index
Birden fazla alanı indexlemek
• Hızlı geri dönüşüm daha az alan kullanımı
• alan sıralaması önemlidir
– en kısıtlayıcı olanı ilk alana yazmak önemlidir.

7-Normalization in RDBMS
– Tekrar eden gruplardan uzaklaşalım
– Integrity, alan azaltır, update,kolaylaştırır değişiklikler tek yerde yapılır.
• Problem
– SQL eğer çok tablo join yapılırsa yavaşlar
– Az tablo, Çok performance
• Denormalization
– Pre-join into TEMP table
– Temporary use, infrequently updates
– Data Warehousing - FAT table, star schema, dimensions

8-Tablolar geçici olacaksa nologingde kullanmak
CREATE TABLE temp_table1 NOLOGGING AS (
SELECT t1.field f1
, t2.field2 f2
FROM table1 t1
, table2 t2
WHERE t1.field1 = t2.field1);

CREATE GLOBAL TEMPORARY TABLE
temp_table2 (
field NUMBER
, field2 NUMBER
) ON COMMIT DELETE ROWS;
CREATE GLOBAL TEMPORARY TABLE
temp_table3 (
field NUMBER
, field2 NUMEBR
) ON COMMIT PRESERVE ROWS

ON COMMIT DELETE ROWS; - transactiondan sonra siler
ON COMMIT PRESERVE ROWS; - session sonunda siler


9-Materilized view

– Birçok defa yerine, maşiyeti yüksek queryler , complex joins
– matamatiksel summary & aggregate data

CREATE MATERIALIZED VIEW sf_sales AS
SELECT prod_code, SUM(amt) AS tot_amt
FROM sales
WHERE city_name = ‘OTTAWA’
GROUP BY prod_code;


10- Storage
Bir tablolunun nereden başlayacağı nereye gideceği konusu

CREATE TABLE table1 AS ( . . .)
STORAGE (INITIAL 100M NEXT 5M PCTINCREASE 0 PCTFREE 25 PCTUSED 75);


11-in-line select

CURSOR crs_province_code_activities IS
SELECT a.worksite_code
, a.o_prcode
, a.processing_date
, . . .
FROM arpcode_activities a
, (SELECT o_prcode
, MAX(processing_date) processing_date
FROM arpcode_activities
WHERE o_prcode = p_province_code
AND status = 'A'
GROUP BY o_prcode) b
WHERE a.o_prcode = b.o_prcode
AND a.processing_date = b.processing_date
AND a.status = 'A';

inline select direk tune edilmiş gelir. tercih etmemiz doğru olur.

12-variables-define

DEFINE table_name = &1;
COL table1 NEW_VALUE table1;
SELECT 'geo_' '&table_name' table1
FROM DUAL;
SELECT *
FROM &table1
WHERE ROWNUM <> DEFINE table_name = street
SQL> COL table1 NEW_VALUE table1
old: SELECT 'geo_' '&table_name' table1
FROM DUAL
new: SELECT 'geo_' 'street' table1
FROM DUAL
SQL> SELECT 'geo_' 'street' table1
FROM DUAL
table1
----------
GEO_street
1 row selected.
old: SELECT *
FROM &table1
WHERE ROWNUM <> SELECT *
FROM geo_street
WHERE ROWNUM < street_id =" 11;" street_id =" 12;" street_id =" 14;" street_id =" :street_id;" street_id =" :street_id;" street_id =" :street_id;"> DECLARE
2 sql_stmt VARCHAR2(200);
3 dept_id NUMBER(2) := 50;
4 dept_name VARCHAR2(20) := 'STATISTICS CANADA';
5 dept_loc VARCHAR2(13) := 'OTTAWA';
6 BEGIN
7 EXECUTE IMMEDIATE 'CREATE TABLE table_a (AID NUMBER(5), amount NUMBER)';
8 --
9 sql_stmt := 'INSERT INTO dept VALUES (:1, :2, :3)';
10 EXECUTE IMMEDIATE sql_stmt USING dept_id, dept_name, dept_loc;
11 END;
12 /
PL/SQL procedure successfully completed.
SQL>
SQL> DESC table_a;
Name Null? Type
----------------------------------------- -------- ----------------------------
AID NUMBER(5)
AMOUNT NUMBER
SQL>
SQL> SELECT * FROM dept;
DEPT_ID DEPT_NAME DEPT_LOC
---------- -------------------- -------------
50 STATISTICS CANADA OTTAWA


17- case kullanmak. Plsqlde önemlidir.

CASE prov_id
WHEN ‘AB’ THEN
capital_name := ‘EDMONTON’;
WHEN ‘BC’ THEN
capital_name := ‘VICTORIA’;
. . .
WHEN ‘YK’ THEN
capital_name := ‘WHITEHORSE’;
ELSE capital_name := ‘UNKNOWN’;
END CASE;

CASE
WHEN region_name = ‘ATLANTIC’ THEN
saleperson := ‘JONES’;
WHEN division_name = ‘WEST’ THEN
salesperson := ‘SMITH’;
ELSE salesperson := ‘WHITE’;
END CASE

18-Bulk sql operasyonları

DECLARE
TYPE COL1_TYPE IS TABLE OF TABLE1.COL1%TYPE INDEX BY NATURAL;
TYPE COL2_TYPE IS TABLE OF TABLE1.COL1%TYPE INDEX BY NATURAL;
COL1_VAR COL1_TYPE;
COL2_VAR COL2_TYPE;
BEGIN
SELECT COL1, COL2
BULK COLLECT INTO COL1_VAR, COL2_VAR
FROM TABLE1;
END;
DECLARE
TYPE ArrayIds_Type IS TABLE OF CII_ARRAY_IN_TEMP.ARRAY_ID%TYPE
INDEX BY NATURAL;
ArrayIdsTable_in ArrayIds_Type;
BEGIN
FORALL i IN 1 .. ArrayIdsTable_in.COUNT
INSERT INTO CII_ARRAY_IN_TEMP
(SEQUENCENUM
,ARRAY_ID
,ARRAY_PASSWORD)
VALUES (var_SequenceArray(i)
,ArrayIdsTable_in(i)
,PasswordTable_in(i));
END;

19- basic oracle toolarını bilmek

Basic Oracle SQL Tools
– SET TIMING on – very useful
– EXPLAIN_PLAN, SQL_TRACE, TKPROF
– STATSPACK, V$ tables

7.06.2008

Tüm Kesinti Tiplerine Özel Oracle Veritabanı Teknolojileri

Plansız Kesintiler

Sistem Hataları Real application cluster.Tüm uygulamalar için süreklilik.
Veri hataları felaket Dataguard: felaket kurtarma çözümü
İnsan Hataları Flashback query: Veriler için zaman gerialması

Planlı Kesintiler

Sistem değişiklikleri dynamic reconfiguration kesintisiz kapasite planlama

Veri değişiklikleri online redefination kesintisiz dönüşüm.

6.06.2008

SQL Injection Nedir ve örnekler.

Web uygulamalarında bir çok işlem için kullanıcıdan alınan veri ile dinamik SQL cümlecikleri oluşturulur.
SELECT * FROM employees .bu sorgu veritabınından bütün çalışanları döndürecektir.
Bu SQL komutunu oluşturulurken araya sıkıştırılan herhangi bir meta-karakter SQL Injection’ a neden olabilir.

SQL’ için önemli metakarakter (‘) tek tırnak’ tır. Çünkü iki tek tırnağın arası string olarak algılanır.

Genel bir web uygulamasında olası bir üye girişi işlemi formdan gelen kullanıcı adı ve şifre bilgisi ile ilgili SQL komutu oluşturulur
(SELECT * FROM employees WHERE user=’admin’ AND password=’sifre’ gibi)
SQL komutu kayıt döndürüyorsa böyle bir kullanıcının var olduğu anlamına gelir ve session açılır ve ilgili kullanıcı giriş yapmış olur.
Eğer veritabanından kayıt dönmediyse "kullanıcı bulunamadı" veya "şifre yanlış" gibi bir hata mesajı geri döndürülücekti.

SELECT * FROM employees WHERE user = '' OR ''='' AND Password = '' OR ''=''
anlaşıldığı üzere bu SQL sorgusu her zaman doğru dönecek ve çalışan tablosundaki tüm çalışanları getirecektir.

Birkaç örnek daha inceleyelim.

Select * from my_table where column_x = ‘1’

Select * from my_table where column_x = ‘1’ UNION select password from DBA_USERS where ‘q’=‘q’

bir jsp örneği
Package myseverlets;
<….>
String sql = new String(“SELECT * FROM WebUsers WHERE Username=’” + request.getParameter(“username”) + “’ AND Password=’” + request.getParameter(“password”) + “’”
stmt = Conn.prepareStatement(sql)
Rs = stmt.executeQuery()

SELECT * FROM WebUsers WHERE Username=’zekeriya’ AND Password=’çokzorpassword’

yerine

SELECT * FROM WebUsers WHERE Username=’zekeriya’ AND Password=’çokzorpassword’ OR ‘A’=‘A’ yazarsak olay bitmiş demektir. bu query her halikarda true döndürür.


Altaki örnek çok kolay bir şekilde kredi kart bilgilerine ulaşabileceğimiz durumuz gelebilir.

SELECT ProductName FROM Products
WHERE ProductCategory=’test’ UNION
select credit_card_number from
CUSTOMERS where ‘a’=‘a'

Bu iki sql komutunu union ile birleştirirsek

• Tabloların listesi
• UNION select object_name from sys.all_objects;
• Kolanların Listesi
• UNION select column_name from sys.all_tab_columns

5.06.2008

Sys_contetxt paketi

Sistemden istediğimiz önemli bilgileri bulmamız açısından sys_context pakatei son derece uygundur.
CONNECT OE/password
SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER')
FROM DUAL;

SYS_CONTEXT ('USERENV', 'SESSION_USER')
------------------------------------------------------
OE

SELECT sys_context('USERENV',
'CLIENT_IDENTIFIER') FROM dual;

exec dbms_session.set_identifier(USER
' ' SYSTIMESTAMP);

SELECT
sys_context('USERENV',
'CLIENT_IDENTIFIER') FROM dual;


SELECT sys_context('USERENV', 'CURRENT_SCHEMA') FROM dual;

SELECT sys_context('USERENV', 'DB_DOMAIN') FROM dual;

SELECT sys_context('USERENV', 'DB_NAME') FROM dual;

SELECT sys_context('USERENV', 'GLOBAL_CONTEXT_MEMORY') FROM dual;

SELECT sys_context('USERENV', 'HOST') FROM dual;

SELECT sys_context('USERENV', 'IDENTIFICATION_TYPE') FROM dual;

SELECT sys_context('USERENV', 'INSTANCE') FROM dual;

SELECT sys_context('USERENV', 'INSTANCE_NAME') FROM dual;

SELECT sys_context('USERENV', 'LANG') FROM dual;

SELECT sys_context('USERENV', 'LANGUAGE') FROM dual;

SELECT sys_context('USERENV', 'MODULE') FROM dual;

SELECT sys_context('USERENV', 'NLS_CALENDAR') FROM dual;

SELECT sys_context('USERENV', 'NLS_CURRENCY') FROM dual;

SELECT sys_context('USERENV', 'NLS_SORT') FROM dual;

SELECT sys_context('USERENV', 'OS_USER') FROM dual;

SELECT sys_context('USERENV', 'SERVICE_NAME') FROM dual;

SELECT sys_context('USERENV', 'SESSION_USER') FROM dual;

SELECT sys_context('USERENV', 'SID') FROM dual;

SELECT sys_context('USERENV', 'TERMINAL') FROM dual;

bir tanede sys_contextin dısında kendi contextmizi yazabileceğimiz bir paket yapalım.

CREATE OR REPLACE CONTEXT App_Ctx using My_pkg
ACCESSED GLOBALLY;

CREATE OR REPLACE PACKAGE my_pkg IS

PROCEDURE set_session_id(p_session_id NUMBER);
PROCEDURE set_ctx(p_name VARCHAR2, p_value VARCHAR2);
PROCEDURE close_session(p_session_id NUMBER);

END;
/

CREATE OR REPLACE PACKAGE BODY my_pkg IS

g_session_id NUMBER;

PROCEDURE set_session_id(p_session_id NUMBER) IS
BEGIN
g_session_id := p_session_id;
dbms_session.set_identifier(p_session_id);
end set_session_id;
--===============================================
PROCEDURE set_ctx(p_name VARCHAR2, p_value VARCHAR2) IS
BEGIN
dbms_session.set_context('App_Ctx',p_name,p_value,USER,g_session_id);
END set_ctx;
--===============================================
PROCEDURE close_session(p_session_id NUMBER) IS
BEGIN
dbms_session.set_identifier(p_session_id);
dbms_session.clear_identifier;
END close_session;
--===============================================
END;
/

col var1 format a10
col var2 format a10

exec my_pkg.set_session_id(1234);
exec my_pkg.set_ctx('Var1', 'Val1');
exec my_pkg.set_ctx('Var2', 'Val2');

SELECT sys_context('app_ctx', 'var1') var1,
sys_context
('app_ctx', 'var2') var2
FROM dual;


disconnect
connect uwclass/uwclass

SELECT sys_context('app_ctx', 'var1') var1,
sys_context('app_ctx', 'var2') var2
FROM dual;

exec my_pkg.set_session_id(1234);

SELECT sys_context('app_ctx', 'var1') var1,
sys_context('app_ctx', 'var2') var2
FROM dual;


grant execute on my_pkg to scott;

conn scott/tiger

exec uwclass.my_pkg.set_session_id(1234);

SELECT sys_context('app_ctx', 'var1') var1,
sys_context('app_ctx', 'var2') var2
FROM dual;


conn uwclass/uwclass

exec my_pkg.set_session_id(1234);

SELECT sys_context('app_ctx', 'var1') var1,
sys_context('app_ctx', 'var2') var2
FROM dual;

exec my_pkg.close_session(1234);

SELECT sys_context('app_ctx', 'var1') var1,
sys_context('app_ctx', 'var2') var2
FROM dual;

4.06.2008

ASM ile asmlib ve raw device performans karsılastırılması

Linux ortamlarda ASM kurulumu ASMlib sofware ve raw devicelar üzerinden yapılabilir.ASMlibte raw deviceslarda aday disklere ihtiyacları vardır. vmware 3 tane 10gb disk olusturalım ilk önce.Birçok teknik dökümanı incelediğimizde ASMlib performans olarak raw deviceslardan iyi oldukaları söylerken bir kısım dokümanda ise bunun aksi idda edilir. Bu durum beni bir karsilaştirma testini yapıp kendime göre sonucaları cıkarmaya itti. Bu teste günlük yaptığımız işlerden olan DML komutlarını baz aldım. bu çalışmada high redundancy kullandım.

# ls sd*
sda sda1 sda2 sdb sdc sdd
# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1305, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305):
Using default value 1305
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
#
bu islemi diger iki disk icinde yapalım.

daha sonra asmlib kernal module gecelim.

# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.
This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting without typing an
answer will keep that current value. Ctrl-C will abort.
Default user to own the driver interface []: oracle
Default group to own the driver interface []: oinstall
Start Oracle ASM library driver on boot (y/n) [n]: y
Fix permissions of Oracle ASM disks on boot (y/n) [y]:
Writing Oracle ASM library driver configuration: [ OK ]
Creating /dev/oracleasm mount point: [ OK ]
Loading module "oracleasm": [ OK ]
Mounting ASMlib driver filesystem: [ OK ]
Scanning system for ASM disks: [ OK ]
#
kernal modulu yukledikten sonra etiket islemini yani label yapalım.
# /etc/init.d/oracleasm createdisk VOL1 /dev/sdb1
Marking disk "/dev/sdb1" as an ASM disk: [ OK ]
# /etc/init.d/oracleasm createdisk VOL2 /dev/sdc1
Marking disk "/dev/sdc1" as an ASM disk: [ OK ]
# /etc/init.d/oracleasm createdisk VOL3 /dev/sdd1
Marking disk "/dev/sdd1" as an ASM disk: [ OK ]
#
Eger raw device olacaksa
/etc/sysconfig/rawdevices doyasını edit yapıp asağıdaki değişikleri ekleyelim.

/dev/raw/raw1 /dev/sdb1
/dev/raw/raw2 /dev/sdc1
/dev/raw/raw3 /dev/sdd1
rawdevices servisini asagıdaki komutla restart edelim.
service rawdevices restart

/etc/rc.local dosyasını asagıdaki bilgileri ekleyelim.

chown oracle:oinstall /dev/raw/raw1
chown oracle:oinstall /dev/raw/raw2
chown oracle:oinstall /dev/raw/raw3
chmod 600 /dev/raw/raw1
chmod 600 /dev/raw/raw2
chmod 600 /dev/raw/raw3

bundan sonrası klasik asm instance create etme asamasıdır. onuda başka bir yazımda detaylı anlatacağım. test icin yaptıgım sql komutları aşağıdaıdr.


export ORACLE_SID=orcl
sqlplus / as sysdba

CREATE TABLESPACE test_ts;
CREATE USER test_user IDENTIFIED BY test_user
DEFAULT TABLESPACE test_ts QUOTA UNLIMITED ON test_ts;
GRANT CONNECT, CREATE TABLE TO test_user;
CONN test_user/test_user
CREATE TABLE test_tab (
id NUMBER,
data VARCHAR2(4000),
CONSTRAINT test_tablosu_pk PRIMARY KEY (id)
);

SET SERVEROUTPUT ON
DECLARE
l_loops NUMBER := 1000;
l_data VARCHAR2(32767) := RPAD('X', 4000, 'X');
l_start NUMBER;
BEGIN
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
INSERT INTO test_tab (id, data) VALUES (i, l_data);
COMMIT;
END LOOP;
DBMS_OUTPUT.put_line('Inserts (' l_loops '): ' (DBMS_UTILITY.get_time - l_start) ' hsecs');
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
UPDATE test_tab
SET data = l_data
WHERE id = i;
COMMIT;
END LOOP;
DBMS_OUTPUT.put_line('Updates (' l_loops '): ' (DBMS_UTILITY.get_time - l_start) ' hsecs');
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
DELETE FROM test_tab
WHERE id = i;
COMMIT;
END LOOP;
DBMS_OUTPUT.put_line('Deletes (' l_loops '): ' (DBMS_UTILITY.get_time - l_start) ' hsecs');
EXECUTE IMMEDIATE 'TRUNCATE TABLE test_tab';
END;
/

Bu islemler sayesinde 1000 kere insert,update ve delete yapmış oldum.bu islemleri her iki ortamdada denedikten sonra aşağıdaki sonuca vardık.

Operation ASMLib (hsecs) Raw Devices (hsecs)
============== ============== ===================
Inserts 468 852
Updates 956 1287
Deletes 1281 1995

Bu sonucalar neticesinde asmlib performansının raw devicesdan iyi olduğu fikrine vardım.
Unutulmaması gereken bir konu ise bu testlerin Vmware üzerinde tek sata diskte yapıldıgıdır. Bu durumdan dolayı kesin konusmak çokda mümkün değildir.

Oracle yeni backup yöntemleri:Oracle Secure Backup

Oracle secure backup suanda en ust duzeyde tape data korumasını en dusuk maliyette uygulayabilen aractir. Tape backup yöntemleri arasında en hızlı olanı olarakda karsımıza cıkar.
Sadece oracle filelarını değil butun Operating sistem dosyalarınında backupını alabilir.
Merkezi bir yönetim sunmantadır.Client server mimarisinde LAN,SAN ve WAN backup ve geri donme islemlerini yapabiliriz.
Oracle enterprise manager console entegredir.Politika bazlı calısabilir.Media cihazlarını destekler.
Oracle database 9i ve sonrasının yedegini alabiliriz.Kurarken üc secenegimiz vardır.
1-administrator server
2-Media server
3-client

Administrator serverlar backup catalogumuzu üzerinde barındırırlar.media serverlar ise cihazları bagladığımız makinalara yaptıgımız kurulumdur. Yedeği alanacak makinalara ise Client kurulumu yapıyoruz.
Uc tane yonetim ekranı vardır.
Enterprise manager,Web tool ve OBTOOL olmak uzere.Full incremental ve archivelog yedeklerini destekler.Ayrıca 10g ile birlikte kullanmaya basladıgımız Flash recovery area nın yedeğini tape alabilmesi en önemli artılarındandır.

Backup recovery area komutu rmanden alınabilir. User seviyesinde guvenlik kontrolu,iki yonlu otonkikasyonyon ve Sifreleme yontemleride baslıca guvenlik konusundaki kullanımlarıdır.

Kısacası daha hızlı daha guvenli ve rman ile tam entegre ve gerekirse O/S dosyalarımızın bile yedegini alabilecegimiz bir ürün diyebiliriz.