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 tonguc.yilmaz@gmail.com 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 tonguc.yilmaz@gmail.com 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