PL/SQL Enhancements in Oracle Database 11g

Download Report

Transcript PL/SQL Enhancements in Oracle Database 11g

Veritabanı geliştiricileri için
Oracle 11g yeni özellikleri
TROUG Oracle Day etkinliği
Lütfi Kırdar Kongre Merkezi
04/11/2010
H.Tonguç Yılmaz [email protected]
http://friendfeed.com/TongucY
http://tonguc.wordpress.com/about/
 H.Tonguç Yılmaz: Oracle veritabanı uzmanı - iyi bir
Fenerbahçe taraftarı - Metal müzik sever - Bol bol
DVD izler vs.
 Fethiye Lisesi, İTÜ Bilgisayar Müh., Bilgi MBA
 C Developer, Informix DBA-Hp Unix Admin, Oracle DBA,
Oracle ETL Developer, DW Development Team Leader
 1996 Tekstilbank, 2000 Turkcell, 2008 Turkcell Teknoloji
 10+ sene Oracle veritabanı tecrübesi, Oracle 8i,9i,10g
OCP & 2007 Oracle ACE, 2005 Oracle blogger
 2002 Turkcell Akademi Oracle veritabanı iç eğitmeni &
2002 TTech Paf koçu
 1999 OracleTurk moderatör, 2010 TROUG kurucu üye
Her yeni sürüm ile birlikte ilk göz atılacak ilk yer
Bu oturum veritabanı geliştiricileri içindir 
• SQL iyileştirmeleri:
• Native Support for Pivot and Unpivot, Recursive WITH
clause, Nth value for inter-row calculation, New aggregate
function LISTAGG, Hash based DISTINCT aggregation,
NULL-aware anti join, GROUP BY aggregation
improvements
• PL/SQL iyileştirmeleri:
• Transparent performance: Fine Grained Dependency
Tracking, Parameterized Performance: Real native
compilation, Usability of the language: Sequence in a
PL/SQL expression, PL/Scope, PL/SQL Hierarchical
Profiler, When others then null warning, Named and
• Real Time SQL Monitor
Mixed Notation in SQL
• Flashback Data Archive, Total Data Recall
• Şema yönetimi iyileştirmeleri
• Cube Organized Materialized Views
• Virtual Columns, Faster Add Not Null Column with Default
• Real Application Testing: Database Replay &
Value, Read Only table, Invisible indexes, DDL can now
SQL Performance Analyzer (SPA)
wait, Segment creation on demand
• Partitioning, Advanced Compression,
• Sorgu çalıştırma iyileştirmeleri
Parallel Query, Resource Manager
• Guaranteed plan stability with controlled plan evolution:
• Unstructured Data & Application Development :
SQL Plan Management, Collect more statistics – better,
Securefiles, Multimedia, Spatial, XML DB
faster, Multi-column statistics, Faster calculation of NDV,
• Java & PHP
Control and manage new statistics propagation: Separate
statistic discovery and publication, Enhanced bind
• Exadata V2: Hybrid columnar compression,
peeking: Properly address data skew, Multi-Predicate
Storage indexes, Enhanced offloading capabilities,
Pruning
data mining model scoring
•
Online application upgrade with edition based redefinition
Oracle kısa tarihçe
• 1978 Oracle V1; pazardaki ilk *satış* amaçlı ilişkisel SQL
veritabanı yönetim sistemi
• ...
•
•
•
•
•
•
•
•
•
•
•
7.3 1996
8.0 1997 Oracle 8
8.1.5 1999 Oracle 8i Release 1
8.1.6 1999 Oracle 8i Release 2
8.1.7 2000 Oracle 8i Release 3
9.1 2001 Oracle 9i Release 1
9.2 2002 Oracle 9i Release 2
10.1 2004 Oracle 10g Release 1
10.2 2005 Oracle 10g Release 2 ( XE ! )
11.1 2007 Oracle 11g Release 1
11.2 2009 Oracle 11g Release 2
Artık Apex & OWB standart kurulumun parçası
• Apex ve OWB standart ETL özellikleri veritabanı lisansının
içindedir, ek maliyet yaratmazlar 
Güle güle SQL*Plus, hoş geldin SQL Developer
• SQL*Plus komut satırı hala bizimle, panik yok 
• SQL*Plus 11g ile BLOB ile BFILE kolonları da artık gösterebiliyor.
Asynchronous Change Data Capture LOB'leri
artık destekliyor
• Asynchronous Change Data Capture henüz desteklenmeyen veri tipleri:
• BFILE
• LONG
• ROWID
• UROWID
• object types (XMLType gibi)
• virtual columns
• Asynchronous Change Data Capture desteklenmeyen tablo yapıları:
• temporary tables
• object tables
• Desteklenmeyen veri tipleri içeren(LOB kolonlar dahil) veya overflow segments
sahibi olan Index-organized tables
Şifrelerde küçük-büyük harf kullanımı
CONN / AS SYSDBA
CREATE USER test2 IDENTIFIED BY Test2;
GRANT CONNECT TO test2;
SQL> CONN test2/Test2
Connected.
SQL> CONN test2/test2
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> SHOW PARAMETER SEC_CASE_SENSITIVE_LOGON
NAME
TYPE
VALUE
------------------------------------ ----------- -----------------------------sec_case_sensitive_logon
boolean TRUE
CONN / AS SYSDBA
ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;
SQL> CONN test2/Test2
Connected.
SQL> CONN test2/test2
Connected.
• 11g ile artık Audit özeliği kurulum ile birlikte açık ve AUDIT_TRAIL değeri DB ön tanımlı.
SQL*Plus ERRORLOGGING özelliği
• SQL, PL/SQL veya SQL*Plus hataları artık SPERRORLOG tablosunda kaydediliyor.
create table tong.tong_sperrorlog(username varchar(256),
timestamp TIMESTAMP,
script varchar(1024),
identifier varchar(256),
message CLOB,
statement CLOB);
set errorlogging on table tong_sperrorlog
create table tong ( c1 number ) ;
set errorlogging off
select timestamp, statement, message from tong_sperrorlog;
TIMESTAMP
STATEMENT
MESSAGE
22-JUN-08 07.00.27.000000 PM
create table tong ( c1 number )
ORA-01031: insufficient privileges
• 11g istemci 9i veya 10g sunuculara bağlanarak da kullanılabiliyor, detaylar
$ORACLE_HOME/sqlplus/doc/elgsetup.txt dosyasında.
ALTER TABLE .. ADD COLUMN iyileştirmeleri
• 11g öncesinde DEFAULT değerli yeni bir kolon ve NOT NULL constraint eklemek tablo
üzerinde exclusive kilit alıyordu ve varsayılan değer tablodaki tüm satırlara güncellenmesi
gerektiriyordu.
• 11g sonrasında varsayılan değer data dictionary kaydediliyor ve büyük tablolar için tüm
kayıtların güncellenmesi işleminden kurtulunuyor. Ek olarak alttaki ADD COLUMN
operasyonları artık DML cümleleri ile birlikte problemsiz çalışabiliyor:
• Varsayılan değerli NOT NULL kolon ekleme
• Varsayılan değeri olmayan bir nullable kolon ekleme
• Virtual kolon ekleme
-- 10.2
create table tst_source nologging as select rownum id, text from dba_source;
set timing on
ALTER TABLE tst_source ADD (name VARCHAR2(16) DEFAULT 'N' NOT NULL);
Elapsed: 00:00:30.43
-- 11.1
create table tst_source nologging as select rownum id, text from dba_source;
set timing on
ALTER TABLE tst_source ADD (name VARCHAR2(16) DEFAULT 'N' NOT NULL);
Elapsed: 00:00:00.10
Sanal Kolonlar
• Var olan kolon değerlerinden hesaplanan yeni kolonlar, DML göremezler, indeksler üzerindeki
function based index olarak yönetilir, Index-organized, external, object, cluster, veya
temporary tablolar için desteklenmiyor henüz.
CREATE TABLE employees (
id
NUMBER, first_name VARCHAR2(10),
last_name VARCHAR2(10), salary
NUMBER(9,2),
comm1
NUMBER(3), comm2
NUMBER(3),
salary1 AS (ROUND(salary*(1+comm1/100),2)),
salary2 NUMBER GENERATED ALWAYS AS (ROUND(salary*(1+comm2/100),2)) VIRTUAL,
CONSTRAINT employees_pk PRIMARY KEY (id) );
INSERT INTO employees (id, first_name, last_name, salary, comm1, comm2) VALUES (1, 'JOHN', 'DOE', 100, 5, 10);
INSERT INTO employees (id, first_name, last_name, salary, comm1, comm2) VALUES (2, 'JAYNE', 'DOE', 200, 10, 20);
COMMIT;
SELECT * FROM employees;
ID FIRST_NAME LAST_NAME
SALARY
COMM1
COMM2
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------1 JOHN
DOE
100
5
10
105
110
2 JAYNE
DOE
200
10
20
220
240
SELECT column_name, data_default
FROM user_tab_columns
WHERE table_name = 'EMPLOYEES';
COLUMN_NAME
DATA_DEFAULT
------------------------------ -------------------------------------------------...
SALARY1
ROUND("SALARY"*(1+"COMM1"/100),2)
SALARY2
ROUND("SALARY"*(1+"COMM2"/100),2)
SALARY1
SALARY2
DDL bekletme opsiyonu (DDL_LOCK_TIMEOUT)
• DDL_LOCK_TIMEOUT parametresi bir DDL komutunun kaç saniye bekleyeceğini ilgili aktif
işlemi belirliyor, ALTER SYSTEM veya ALTER SESSION ile kullanılabiliyor. Var sayılan değer
0 saniye.
-- session 1
CREATE TABLE lock_tab ( id NUMBER );
INSERT INTO lock_tab VALUES (1);
-- session 2
ALTER TABLE lock_tab ADD ( description VARCHAR2(50) );
ALTER TABLE lock_tab ADD (
*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
ALTER SESSION SET ddl_lock_timeout=30;
ALTER TABLE lock_tab ADD ( description VARCHAR2(50) );
-- session 1
COMMIT;
-- session 2
Table altered.
Görünmez Indeksler
• CBO'nun indeksiz davranmasına zorlamak amacı ile, arkada indeks bakimi devam ediyor
aslında. VISIBILITY kolonu [DBA|ALL|USER]_INDEXES görüntülerinde değeri görmek için
kullanılabilir. DROP INDEX etkisi testi için kullanışlı olabilir.
CREATE TABLE ii_tab ( id NUMBER );
BEGIN
FOR i IN 1 .. 10000 LOOP
INSERT INTO ii_tab VALUES (i);
END LOOP;
COMMIT;
END;
/
CREATE INDEX ii_tab_id ON ii_tab(id) INVISIBLE;
EXEC DBMS_STATS.gather_table_stats(USER, 'ii_tab', cascade=> TRUE);
SET AUTOTRACE ON
SELECT * FROM ii_tab WHERE id = 9999;
---------------------------------------------------------------------------| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------| 0 | SELECT STATEMENT |
| 1 | 3 | 7 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| II_TAB | 1 | 3 | 7 (0)| 00:00:01 |
---------------------------------------------------------------------------ALTER SESSION SET OPTIMIZER_USE_INVISIBLE_INDEXES=TRUE;
SELECT * FROM ii_tab WHERE id = 9999;
-----------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------| 0 | SELECT STATEMENT |
| 1 | 3 | 1 (0)| 00:00:01 |
|* 1 | INDEX RANGE SCAN| II_TAB_ID | 1 | 3 | 1 (0)| 00:00:01 |
------------------------------------------------------------------------------
Salt okunur tablolar
• 11g öncesinde bir tabloyu sahibi dışında GRANT'ler üzerinden salt okunur kılmak mümkündü,
bu yeni özellikle sahibi dahil tüm kullanıcılara DML/DDL işlemler tablo üzerinde
yasaklanabiliyor. READ_ONLY kolon [DBA|ALL|USER]_TABLES görüntülerinde durumu
gösteriyor.
CREATE TABLE ro_tab ( id NUMBER );
INSERT INTO ro_tab VALUES (1);
ALTER TABLE ro_tab READ ONLY;
SQL> INSERT INTO ro_tab VALUES (2);
SQL> UPDATE ro_tab SET id = 2;
SQL> DELETE FROM ro_tab;
SQL> TRUNCATE TABLE ro_tab;
SQL> ALTER TABLE ro_tab ADD (description VARCHAR2(50));
ORA-12081: update operation not allowed on table "TEST"."RO_TAB“
ALTER TABLE ro_tab READ WRITE;
SEQUENCE kullanımı
declare
l_seq number;
begin
select orders_seq.nextval
into l_seq
from dual;
...
end;
declare
l_seq number := orders_seq.nextval;
begin
...
end;
SQL motorundan PL/SQL işlev çağırımı
iyileştirmesi
function f_get_cnt (p_deptno in dept.deptno%type := null
,p_loc
in dept.loc%type := null
)
return number
SQL> select ename
2
, f_get_cnt (p_loc => ‘NEW YORK’)
3
from emp
4 /
CONTINUE
begin
for i in 1..3
loop
dbms_output.put_line ('i= '||to_char(i));
if i = 2
then
null;
else
dbms_output.put_line ('Only if i is not equal to 2');
end if;
end loop;
end;
begin
for i in 1..3
loop
dbms_output.put_line ('i= '||to_char(i));
continue when i = 2;
dbms_output.put_line ('Only if i is not equal to 2');
end loop;
end;
Trigger tetiklenme sırası yönetimi
Hangisi daha önce çalışacak?
create or replace trigger emp_bir_1
create or replace trigger emp_bir_1
before insert on emp
for each row
before insert on emp
begin
for each row
...
begin
end emp_bir_1;
...
end emp_bir_1;
create or replace trigger emp_bir_2
create or replace trigger emp_bir_2
before insert on emp
for each row
before insert on emp
follows emp_bir_1
for each row
begin
begin
...
...
end emp_bir_2;
end emp_bir_2;
DISABLED
Trigger
yaratma
CREATE OR REPLACE TRIGGER trigger_control_test_trg
BEFORE INSERT ON trigger_control_test FOR EACH ROW
DISABLE
BEGIN
DBMS_OUTPUT.put_line('TRIGGER_CONTROL_TEST_TRG - Executed');
END;
/
Bağımlılık takibi 10g
create table t
(x int
create package body pkg
is
,y int
procedure only_on_y
);
is
begin
for rec in (select y
alter table t add z int
from t
)
loop
...
end loop;
end;
end pkg;
INVALID
Bağımlılık takibi 11g
create table t
(x int
create package body pkg
is
,y int
procedure only_on_y
);
is
begin
for rec in (select y
from t
alter table t add z int
)
loop
...
end loop;
end;
end pkg;
VALID
WHEN OTHERS derleme uyarısı
SIMPLE_INTEGER
• PLS_INTEGER tipinden daha etkin
• NOT NULL constraint nedeni ile
ön değer atanmalı
declare
cnt simple_integer := 0;
begin
cnt := cnt + 1;
end;
declare
cnt $if dbms_db_version.ver_le_10_2
$then pls_integer not null
$else simple_integer
$end
:= 0;
begin
cnt := cnt + 1;
end;
SQL Operatörleri ve İşlevleri için Metadata bilgisi
• V$SQLFN_METADATA ve V$SQLFN_ARG_METADATA isimli yeni görüntüler üzerinden
erişilebiliniyor, özellikle 3. parti ürünler için kullanışlı görüntüler.
SQL> set linesize 2500
SQL> SELECT * FROM v$sqlfn_metadata where name = 'REGEXP_SUBSTR' ;
FUNC_ID NAME
MINARGS MAXARGS DATATYPE VERSION
ANA AGG DISP_TYPE USAGE
DESCR
---------- ------------------------------ ---------- ---------- -------- ------------ --- --- ------------- ------------------------------ -----------------------------526 REGEXP_SUBSTR
2
5 STRING V10 Oracle NO NO NORMAL
SQL> SELECT * FROM v$sqlfn_arg_metadata WHERE func_id = 526 ;
FUNC_ID ARGNUM DATATYPE DESCR
---------- ---------- -------- -----------------------------526
1 STRING
526
2 STRING
526
3 NUMERIC
526
4 NUMERIC
526
5 STRING
Güle güle Outline’lar
[ metalink 11g Upgrade Companion ]
Oracle highly recommends the use of SQL plan baselines instead of the stored outlines after
11gR1. With Oracle Database 11g using the SQL Plan Management (SPM) the optimizer
automatically manages plans and ensures that only verified or known plans are used.
SQL Plan Management allows controlled plan evolution by only using a new plan after it has
been verified to be perform better than the current plan. You should also use SQL Plan
Management as part of your upgrade strategy. Please see the best practices section for more
information.
[ /metalink 11g Upgrade Companion ]
• Başka ‘güle güle’ler de var: Oracle Ultra Search, Java Development Kit(JDK) 1.4, CTXXPATH
index
DBMS_COMPARISON 1/2
• Tablo ve görüntüleri kıyaslamak için bir hazır paket, dblink üzerinden de çalışabiliyor
• Paketin arkasında 10g ile gelen ORA_HASH SQL işlevi kıyaslama amacı ile kullanılıyor.
conn hr/hr
DROP TABLE depts PURGE ;
CREATE TABLE depts NOLOGGING AS SELECT * FROM departments ;
CREATE UNIQUE INDEX ui_depts ON depts(department_id) NOLOGGING ;
DELETE FROM depts WHERE department_id = 10;
COMMIT;
exec dbms_comparison.create_comparison(comparison_name=>'compare_test', schema_name=>'HR', object_name=>'DEPTS',
dblink_name=>NULL, remote_schema_name=>'HR', remote_object_name=>'DEPARTMENTS', scan_percent=>90);
set serveroutput on
DECLARE
retval dbms_comparison.comparison_type;
BEGIN
IF dbms_comparison.compare('compare_test', retval, perform_row_dif=>TRUE) THEN
dbms_output.put_line('No Differences');
ELSE
dbms_output.put_line('Differences Found');
END IF;
END;
/
Differences Found
PL/SQL procedure successfully completed.
DBMS_COMPARISON 2/2
set null @
set colsep |
set linesize 2500
select * FROM user_comparison_row_dif ;
COMPARISON_NAME
|REMOTE_ROWID
| SCAN_ID|LOCAL_ROWID
INDEX_VALUE
STA|LAST_UPDATE_TIME
COMPARE_TEST
|
4|@
10
DIF|04-OCT-08 02.58.03.306182 PM
exec dbms_comparison.drop_comparison(
comparison_name=>'compare_test') ;
SELECT
FROM
,
,
WHERE
AND
AND
AND
AND
AND
..
USER_COMPARISON_COLUMNS c
USER_COMPARISON_ROW_DIF r
USER_COMPARISON_SCAN s
c.COMPARISON_NAME = 'COMP_EMP_N_CLONE'
r.SCAN_ID
= s.SCAN_ID
s.scan_id = &scan_id
r.STATUS
= 'DIF'
c.INDEX_COLUMN
= 'Y'
c.COMPARISON_NAME = r.COMPARISON_NAME
|AAARADAAFAAAAA3AAA
DECLARE
scan_info DBMS_COMPARISON.COMPARISON_TYPE;
BEGIN
DBMS_COMPARISON.CONVERGE
( comparison_name => 'compare_emp_and_clone'
, scan_id
=> &scan_id
, scan_info
=> scan_info
, converge_options =>
DBMS_COMPARISON.CMP_CONVERGE_REMOTE_WINS
);
DBMS_OUTPUT.PUT_LINE('Remote Rows Merged: '
||scan_info.rmt_rows_merged);
DBMS_OUTPUT.PUT_LINE('Remote Rows Deleted: '
||scan_info.rmt_rows_deleted);
END;
Global temporary table’larınız için başka
bir TEMP Tablespace belirtme
SQL> create temporary tablespace etl_temp
2> tempfile '+DG1/etl_temp_01.dbf'
3> size 1G;
Tablespace created.
SQL> create global temporary table data_load (
2> input_line varchar2 (2000)
3> )
4> on commit preserve rows
5> tablespace etl_temp;
Table created.
• GTT kullanıcının default temporary tablespace'i TEMP yerine ETL_TEMP tablespace’i altında
yaratılır.
LISTAGG
SELECT deptno,
LISTAGG(ename, '; ') WITHIN GROUP (order by ename)
FROM emp
GROUP BY deptno;
DEPTNO
-----10
20
30
LISTAGG(ENAME,';')WITHINGROUP(ORDERBYENAME)
------------------------------------------CLARK; KING; MILLER
ADAMS; FORD; JONES; SCOTT; SMITH
ALLEN; BLAKE; JAMES; MARTIN; TURNER; WARD
29
Pivot
SALES_BY_QUARTER
SALESREP 'Q1' 'Q2' 'Q3' 'Q4'
---------- ----- ----- ----- ----100
230
240
260
300
101
200
220
250
260
102
260
280
265
310
SALESREP
---------100
100
100
100
100
100
100
101
101
101
101
102
QU
REVENUE
-- ---------Q1
230
Q2
240
Q3
160
Q4
90
Q3
100
Q4
140
Q4
70
Q1
200
Q2
220
Q3
250
Q4
260
Q1
260
select * from sales_by_quarter
pivot (sum(revenue)
for quarter in ('Q1','Q2','Q3','Q4'))
order by salesrep ;
Unpivot
QUARTERLY_SALES
SALESREP
Q1
Q2
Q3
Q4
---------- ----- ----- ----- ----100
230
240
260
300
101
200
220
250
260
102
260
280
265
310
SALESREP
---------100
100
100
100
101
101
101
101
102
102
102
102
QU
REVENUE
-- ---------Q1
230
Q2
240
Q3
260
Q4
300
Q1
200
Q2
220
Q3
250
Q4
260
Q1
260
Q2
280
Q3
265
Q4
310
select * from quarterly_sales
unpivot include nulls
(revenue for quarter in (q1,q2,q3,q4))
order by salesrep, quarter ;
SQL Result Cache Kavramı
Select
,
from
group
deptno
avg(sal)
huge_emp
by deptno;
Select
,
from
group
deptno
avg(sal)
huge_emp
by deptno;
Select
,
from
group
deptno
avg(sal)
huge_emp
by deptno;
2 sn.
(parse & fetch)
1.23 sn.
(parse yok ama yine fetch)
1.22 sn.
(yine sadece fetch)
Result Cache Hint
select /*+ result_cache */
deptno
, avg(sal)
from super_emp
group by deptno;
Execution Plan
---------------------------------------------------------Plan hash value: 3044997086
-------------------------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
-------------------------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
3 |
21 |
4 (25)| 00:00:01 |
|
1 | RESULT CACHE
| 7nvxyd4t2fu8rc25rh5w5p922n |
|
|
|
|
|
2 |
HASH GROUP BY
|
|
3 |
21 |
4 (25)| 00:00:01 |
|
3 |
TABLE ACCESS FULL| SUPER_EMP
|
14 |
98 |
3
(0)| 00:00:01 |
-------------------------------------------------------------------------------------------------Result Cache Information (identified by operation id):
-----------------------------------------------------1 - column-count=2; dependencies=(SCOTT.SUPER_EMP); name="SELECT /*+ result_cache */ deptno, avg(sal)
PL/SQL Result Cache Kavramı
create or replace
function test_result_cache
( p_in in number)
return number
is
begin
dbms_lock.sleep (5);
return p_in;
end;
declare
l_num number;
begin
l_num:= test_result_cache(1);
l_num:= test_result_cache(1);
l_num:= test_result_cache(1);
end;
15.13 sn.
PL/SQL Result Cache Kavramı
create or replace
function test_result_cache
(p_in in number)
return number
result_cache
is
begin
dbms_lock.sleep (5);
return p_in;
end;
declare
l_num number;
begin
l_num:= test_result_cache(1);
l_num:= test_result_cache(1);
l_num:= test_result_cache(1);
end;
5,02 sn.
Result Cache Invalidasyonu
create or replace
function test_result_cache (p_in in number)
return number
result_cache
is
retval number;
begin
Referans edilen tablo içeriği
select rn
değişse bile hep aynı sonucu döndürür
into retval
from t
where rn = p_in
;
dbms_lock.sleep (1);
return retval;
end;
Result Cache Invalidasyonu
create or replace
function test_result_cache (p_in in number)
return number
result_cache relies_on (T)
is
retval number;
begin
select rn
Referans edilen tablolar değiştiğinde
into retval
Result Cache de kullanılmaz duruma geçsin..
from t
where rn = p_in
;
dbms_lock.sleep (1);
return retval;
end;
Kıyamadıklarım
• REGEXP_COUNT yeni Regular Expression SQL işlevi aranan paternin kaç kez kaynak string
içinde geçtiğini döndürüyor.
• 11g ile artık cidden online index rebuild ONLINE: exclusive lock artık oluşmuyor ve DML’ler
etkilenmiyor.
• DBMS_SCHEDULER Lightweight Jobs, Email Notification, File Watcher, Remote Database
Jobs
• DBMS_HPROF PL/SQL Hierarchical Profiler
• DBMS_PARALLEL_EXECUTE
Kıyamadığım birkaç tane daha 
• Yeni V$OSSTAT ve V$STATISTICS_LEVEL istatistikleri, ve bir çok ilginç yeni görüntü:
V$SQL_CS_HISTOGRAM, V$SQL_CS_SELECTIVITY, V$SQL_CS_STATISTICS,
V$SQL_FEATURE, V$SQL_HINT, V$SQL_MONITOR, V$SQL_PLAN_MONITOR,
V$IOSTAT_*
• PL/SQL Bulk Insert ve APPEND_VALUES hint
FORALL i IN l_tab.first .. l_tab.last
INSERT /*+ APPEND_VALUES */ INTO forall_test VALUES l_tab(i);
• tkprof artık SQL ID değerini başlıkta gösteriyor.
• DBMS_REDEFINITION online table redefinition bağımlı nesneleri(PL/SQL, views, synonyms)
INVALID durumuna artık düşürmüyor
• “Bağlantımdan oluşan Trace dosyası ne isimde” artık çok kolay:
select value from v$diag_info where name = 'Default Trace File' ;
VALUE
---------------------------------------------------------------------------/u01/app/oracle/diag/rdbms/tong/tong/trace/tong_ora_4402_IDENTIFIER.trc
Oku, dene, sorgula, geliştir, *paylaş* ..
Kaynakça –
• Tim Hall's Oracle 11g Articles: http://oracle-base.com/articles/11g/Articles11g.php
• Oracle 11g for Developers: Lucas Jellema & Alex Nuijten, AMIS
• 11g The Perfection of a Masterpiece: Christo Kutrovsky, Pythian
• Top 10, no – make that 11, things about Oracle Database 11g:
Thomas Kyte, http://asktom.oracle.com
• Oracle Database 11g For Developers:
Thomas Kyte, http://asktom.oracle.com
• New Features Documentation @ http://tahiti.oracle.com
• Oracle® Database New Features Guide 11g Release 1 (11.1):
http://download.oracle.com/docs/cd/B28359_01/server.111/b28279/toc.htm
• Oracle® Database New Features Guide 11g Release 2 (11.2):
http://download.oracle.com/docs/cd/E11882_01/server.112/e17128/toc.htm
• Daniel Morgan’s Oracle Cheatsheet Library: http://www.morganslibrary.org/library.html
• Arup Nanda's Oracle Database 11g The Top New Features for DBAs and Developers
OTN Series: http://www.oracle.com/technetwork/articles/sql/index-099021.html
TTECH & Oracle Türkiye’ye destekleri
için çok teşekkürler
?
?
?
H.Tonguç Yılmaz [email protected]
http://friendfeed.com/TongucY
TROUG @ Oracle Day
• TROUG Stand
• DBA'ler için Oracle veritabanı 11g yeni özellikleri: Zekeriya
Beşiroğlu, Bilginç Akademi
• Veritabanı geliştiricileri için Oracle veritabanı 11g yeni
özellikleri: H.Tonguç Yılmaz, ACE, Turkcell Teknoloji
• Veri ambarı ve Exadata Oracle veritabanı 11g yeni özellikleri:
Hüsnü Şensoy, ACE Director, Global Maksimum
• Panel: TROUG Roundtable