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.

3.06.2008

Oracle performans yenilikleri:SQL result Cache

Istedigimiz bazi sorgularin sonuclari diskten fiziksel I/O yapmaktansa memoryden getirebilme yeniligidir. Boylece fiziksel I/O nun neden oldugu Cpu artislarinada bir onlem almis oluruz.
Result cache query'in sonuclarini butun sessionlarin ortak kullanimina acar.aslinda client side ve
server side olarak birbirinden ayirmak lazimdir.Client tarafinda SGA kullanilmaz.
Result_cache_mode diye yeni bir parametremiz gelmistir. Bu parametre Manuel ve force olmak uzere iki secenekten olusur. Manuel modda /*+result_cache */ hintini kullanmamiz lazimdir.
Select /*+ result_cache */ job_id,max(salary) from employees group by job_id gibi

force modda ise otomatik olarak sql result cache kullanilir.
Force modda kullanmak istemezsek /*+no_result_cache*/ hinti tercih edilebilir.
CLIENT_RESULT_CACHE_SIZE parametresi ile clientlarin ne kadar result cache sahip olacaklarina karar verebiliriz. 0 olmasi disabled olmasi anlamına gelir.

CLIENT_RESULT_CACHE_LAG parametresi ilede ayrica clientlarin ne kadar sıklıkta veritabanı ile sekronize olmasini saglariz.

Tabiki boyle bir ozelliginde
CLIENT_RESULT_CACHE_STATS$ monitor edilmesi mumkundur.

SQL> set serveroutput on
SQL> execute dbms_result_cache.memory_report
R e s u l t C a c h e M e m o r y R e p o r t
[Parameters]
Block Size = 1024 bytes
Maximum Cache Size = 950272 bytes (928 blocks)
Maximum Result Size = 47104 bytes (46 blocks)
[Memory]
Total Memory = 46340 bytes [0.048% of the Shared Pool]
... Fixed Memory = 10696 bytes [0.011% of the Shared Pool]
... State Object Pool = 2852 bytes [0.003% of the Shared Pool]
... Cache Memory = 32792 bytes (32 blocks) [0.034% of the Shared Pool]
....... Unused Memory = 30 blocks
....... Used Memory = 2 blocks
........... Dependencies = 1 blocks

........... Results = 1 blocks
............... SQL = 1 blocks

PL/SQL procedure successfully completed.

To remove all existing results and clear the cache memory, use the command:

SQL>execute dbms_result_cache.flush

select name, value from v$result_cache_statistics;

The output of this query will be similar to the following:

NAME                          VALUE
-------------------- ----------
Block Size (Bytes) 1024
Block Count Maximum 3136
Block Count Current 32
Result Size Maximum (Blocks) 156
Create Count Success 2
Create Count Failure 0
Find Count 0
Invalidation Count 0
Delete Count Invalid 0
Delete Count Valid 0

Block Size (Bytes)

her memory blogunun size

Block Count Maximum

max izin vereilen memory block sayisi

Block Count Current

suanda nekadar memeory blogu ayrıldıgı

Result Size Maximum (Blocks)

tekbir result cache max. nekadar ayrıldıgı

Create Count Success

kac kere basarılı bir sekilde result cache yaratıldı

Create Count Failure

kac kere fail etti

Find Count

Kac kere basarılı bir sekilde result cache bulundu

Invalidation Count

invalidation sayısı

Delete Count Invalid

silinen invalid cache

Delete Count Valid

silinen valid cache

bir sistemin SQL query result cache iyi kullandıgının gostergesi Create Count Failure ve Delete Count Valid dusuk olmasidir ve find countun yuksek olmasıdır.

2.06.2008

Oracle yeni özellik Securefiles

Veritabanı içinde resim,video,kitap,doküman gibi geniş yer tutan
Data tiplerini LOB data tipi olarak şeçiyoruz. 11g versiyonu ile
Beraber bu tip üzerinde yoğun çalışmalar yapılmış ve
Performans,sıkıştırma,şifreleme,tek kopya saklama ve yazılımGeliştirme kolaylığı sağlanmıştır

CREATE TABLE func_spec(
id number, doc CLOB ENCRYPT USING 'AES128' )
LOB(doc) STORE AS SECUREFILE ;


CREATE TABLE design_spec (id number, doc CLOB)
LOB(doc) STORE AS SECUREFILE (ENCRYPT);

CREATE TABLE design_spec (id number, doc CLOB ENCRYPT)
LOB(doc) STORE AS SECUREFILE;

Hızlı Guvenli Web uygulaması:Oracle application express -1

Oracle application express,Oracle database üzereinde hızlı web uygulaması gelistirme ortamıdır.Cok az programlama bilgisine sahip olan kişilerin bile kolaylıkla profesyonel,güvenli ve hızlı web uygulamaları geliştirmeleri mümkündür.Built in gelen bir çok user interface objeleri,temaları,navigasyon itemları,esnek raporları sayesinde ortaya son derece güzel uygulamalar çıkarılabilir.
11g veritabanından beri extra bir HTTP server ihtiyacı kalmamıştır.11g database'nin icinde gelen PL/sql gateway sayesinde son derece kolaylasmıştır.
Oracle application express'de user rollerini dörte bölebiliriz.
Workspace administrator,Developer,End Users,Application express admin.
Sizlere ilk tavsiyem demo ortamı olan http://apex.oracle.com girip bir demosunu denemenizdir.
Step step size yeni bir account create ettiriyor,schema create ettiriyor,workspace create ettiriyor 10 Mb bir alan veriyor.

yeni compress özellikleri

Tüm seviyelerde sıkıştırma artan veri miktarları ile birlikte
Günümüzde kaçınılmaz olmaktadır.
Verilerin sıkıştırılması Disk IO ve Cpu maliyetleri oldukça
azaltan bir süreçtir
Table compress 10g versiyonundada vardı fakat sadece bulk
İnsertlerde geçerliydi. Şu anda bütün DMl işlemlerinde
kullanılabilir.
Backup compress 10g ile vardı 11g versiyonunda çok daha iyi
Bir performansla gerçekleştiriliyor.
Datapump compress 10g ile sadece metada sıkıştırılıyordu
11g ile data sıkıştırılmasıda mevcut
Securefiles compress sayesinde LOB türündeki veriler
Sıkıştırma ve şifreleme özelliğini içinde barındırıyor