Top Banner
New Features for Administrators (Oracle9i) November, 2003 CloudBox Jang Kyung Sang
311

Oracle History #6

Jan 26, 2015

Download

Education

Kyung Sang Jang

Oracle New Features for Version 9i
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Oracle History #6

New Features for Administrators (Oracle9i)

November, 2003

CloudBox

Jang Kyung Sang

Page 2: Oracle History #6

[email protected] - 2 -

Oracle9i New Features http://www.ggola.com

Oracle9i New Features for Administrators

course

Preface

1. Oracle Server Security

2. General High Availability Technology

3. LogMiner Enhancements

4. Backup and Recovery

5. Data Guard

6. Database Resource Manager

7. Online Operation

8. Advanced Partition and Segment Management Enhancement

9. Automatic Segment and Advanced Index Management Enhancement

10. Advanced Performance Features for Index, Cursor, Optimizing and Statistics

11. Scalable Session Management

12. Real Application Cluster

13. Oracle Managed Files

14. New Tablespace Management

15. New Memory Management

16. Oracle Enterprise Manager

17. New and Standard SQL

18. Globalization Support

19. Workspace Management

20. Advanced Replication

OCP9i New Features check .

Page 3: Oracle History #6

[email protected] - 3 -

Oracle9i New Features http://www.ggola.com

Preface

oracle9i new features oracle version

.

.

PIII 512M PC Redhat Linux 7 . test user scott

directory oracle OFA . pc , linux server (hostname) “LIRACLE”

oracle instance “NEWSVC” .

oem, rman globalization support chapter

oracle version

.

ocp ocm paper

. ocm paper

. ( 60 ) (2004.01)

2 .

9i (new features ..) .

iSQL*Plus

- sql*plus 2tier client pc sql*net(net*?i ) .

- from 9i client web browser oracle database oracle http server sql*plus . CF. , web browser oracle http rdbms

Page 4: Oracle History #6

[email protected] - 4 -

Oracle9i New Features http://www.ggola.com

sample schema

- scott/tiger oracle sample schema 5 schema . database example . (demo schema “$ORACLE_HOME/demo/schema” )

- oracle HR, OE/OC, QS, PM, SH schema QS QS_ user . CF. test : AIX 9iR2 OC redhat 9iR2 OE

. oracle install option scripts .

- 350M ~ 400M disk space . CF. users partition, replication, advanced queuing example

. (

)

Page 5: Oracle History #6

[email protected] - 5 -

Oracle9i New Features http://www.ggola.com

1. Oracle Server Security

connection to database

oracle new version . from 9i svrmgrl

remove shell svrmgrl . to 8i sqlplus internal

.

remote password login file (orapw) .

internal connection

- 1 : [NEWSVC]LIRACLE:/oracle/app/oracle/admin/NEWSVC/work> sqlplus /nolog SQL> conn / as sysdba SQL>

- 2 : [NEWSVC]LIRACLE:/oracle/app/oracle/admin/NEWSVC/work> sqlplus "/as sysdba" SQL>

- 3 : [NEWSVC]LIRACLE:/oracle/app/oracle/admin/NEWSVC/work> sqlplus Enter user-name: /as sysdba SQL>

default security

default security oracle privilege

rule . oracle grant, revoke privilege role mechanism default security

from 9i .

initial parameter O7_DICTIONARY_ACCESSIBILITY

- to 8i select any table privilege users object .

Page 6: Oracle History #6

[email protected] - 6 -

Oracle9i New Features http://www.ggola.com

- from 9i sysdba data dictionary rule

.

- , select any table privilege object initial parameter

O7_DICTIONARY_ACCESSIBILITY TRUE . oracle default

parameter FALSE setting .

- .

dbca (database creation assistant)

- oracle oui runinstaller gui database . CF. “$ORACLE_HOME/bin/dbca”

.

- database initial parameter ,

. dbca scripts

. CF. ! dbca

SQL> sho parameter o7 NAME TYPE VALUE -------------------------------------------------------------------------------- O7_DICTIONARY_ACCESSIBILITY boolean FALSE SQL> conn system/manager SQL> grant select any table to qs ; SQL> conn qs/qs SQL> desc v$session ERROR: ORA-04043: object "SYS"."V_$SESSION" does not exist SQL> shutdown & restart after change parameter SQL> sho parameter o7 NAME TYPE VALUE -------------------------------------------------------------------------------- O7_DICTIONARY_ACCESSIBILITY boolean TRUE SQL> conn qs/qs SQL> desc v$session Name Null? Type ---------------------------- -------- ------- SADDR RAW(4) SID NUMBER …………

Page 7: Oracle History #6

[email protected] - 7 -

Oracle9i New Features http://www.ggola.com

.

- dbca database oracle default security restriction .

1. oracle user default password user lock .

2. database users .

SQL> alter user hr account unlock ; SQL> alter user hr identified by <password> ;

secure application role

role (control in application level)

- role "set role" or "dbms_session.set_role" hidden password

. pl/sql block identification application level role control

.

- "scott" user role enable .

SQL> conn system/manager SQL> create user scott identified by tiger default tablespace users 2 temporary tablespace temp ; SQL> grant create session to scott ; SQL> grant alter session to scott ; SQL> sho parameter o7 NAME TYPE VALUE -------------------------------------------------------------------------------- O7_DICTIONARY_ACCESSIBILITY boolean TRUE SQL> create role marketing identified using system.sales_market ; SQL> select * from dba_application_roles ; ROLE SCHEMA PACKAGE -------------------- -------------------- -------------------- MARKETING SYSTEM SALES_MARKET SQL> grant select any table to marketing ;

Page 8: Oracle History #6

[email protected] - 8 -

Oracle9i New Features http://www.ggola.com

SQL> create or replace procedure sales_market 2 authid current_user is 3 vs_user string(30); 4 begin 5 select sys_context('userenv', 'session_user') 6 into vs_user from dual; 7 if vs_user != 'SCOTT' then 8 dbms_output.put_line('you are an invalid user!'); 9 return; 10 end if; 11 dbms_session.set_role('MARKETING'); 12 end; 13 / SQL> grant marketing to scott, scott2 ; SQL> grant execute on sales_market to scott, scott2 ; SQL> conn scott/tiger SQL> desc v$session Name Null? Type ----------------------------------------- -------- ------- SADDR RAW(4) SID NUMBER ........ SQL> set role none ; SQL> desc v$session ; ERROR: ORA-04043: object "SYS"."V_$SESSION" does not exist SQL> set role marketing ; set role marketing * ERROR at line 1: ORA-01979: missing or invalid password for role 'MARKETING' SQL> set serveroutput on SQL> exec system.sales_market; pl/sql procedure successfully completed. SQL> desc v$session Name Null? Type ----------------------------------------- -------- ------- SADDR RAW(4) SID NUMBER ........ SQL> conn scott2/tiger SQL> desc v$session Name Null? Type ----------------------------------------- -------- ------- SADDR RAW(4) SID NUMBER ........

Page 9: Oracle History #6

[email protected] - 9 -

Oracle9i New Features http://www.ggola.com

global application context

application context and global

- oracle8i application context session user session application context setup

time . , session context setup .

( oracle8i new features application context )

- 9i global application context setup time , web based multiple sessions

application context reuse . , global .

- oracle Virtual Private Database(VPD) capability .

CF. .. . oracle security policy

.

- application server database scott user multiple connections . CF. KIM JANG web

ID application . client KIM,

JANG return client

SQL> set role none ; SQL> desc v$session ; ERROR: ORA-04043: object "SYS"."V_$SESSION" does not exist SQL> set role marketing ; set role marketing * ERROR at line 1: ORA-01979: missing or invalid password for role 'MARKETING' SQL> set serveroutput on SQL> exec system.sales_market; you are an invalid user! pl/sql procedure successfully completed. SQL> desc v$session ERROR: ORA-04043: object "SYS"."V_$SESSION" does not exist;

Page 10: Oracle History #6

[email protected] - 10 -

Oracle9i New Features http://www.ggola.com

unique client id ( ID ) client web

browser return . (cookie ..) application server .

- test stored procedure “init” context globally access .

- stored procedure ‘init” package context creation, id setting, id clearing, context clearing sub procedure .

package body .

SQL> conn system/manager SQL> grant unlimited tablespace to scott ; SQL> grant create table to scott ; SQL> grant create any context to scott ; SQL> grant drop any context to scott ; SQL> grant create procedure to scott ; SQL> conn scott/tiger SQL> create context emp_info using init accessed globally ; SQL> create table emp (emp_id varchar2(10), emp_name varchar2(10), dept_id varchar2(10)) ; SQL> create table dept (dept_id varchar2(10), dept_name varchar2(10)) ; SQL> insert into dept values ('SAL01', 'SALES'); SQL> insert into dept values ('SYS01', 'SYSTEM'); SQL> insert into dept values ('MAR01', 'MARKET'); SQL> insert into emp values ('A1998001', 'KIM', 'SAL01'); SQL> insert into emp values ('B2002003', 'JANG', 'SYS01'); SQL> insert into emp values ('C2001003', 'LEE', 'MAR01'); SQL> create or replace package init as

2 procedure create_cont (as_empid string, as_client string); 3 procedure set_id (as_client string); 4 procedure clear_id;

5 procedure clear_cont (as_client string); 6 end init;

7 /

Page 11: Oracle History #6

[email protected] - 11 -

Oracle9i New Features http://www.ggola.com

- CASE1 : KIM ID A1998001 server . application server client unique id web browser id

application context initialize . ( id 10121

call init procedure with id '10121') SQL> exec init.create_cont('A1998001', '10121');

- CASE2 : JANG ID B2002003 server . application server client unique id web browser id

application context initialize . ( id 10133

call init procedure with id '10133') SQL> exec init.create_cont('B2002003', '10133');

- CASE3) KIM web browser application call . context value ? context global , session .

SQL> create or replace package body init as 2 procedure create_cont (as_empid string, as_client string) is 3 vs_dbuser string(30); 4 vs_empuser string(30); 5 vs_deptname string(30); 6 begin 7 select sys_context('userenv','session_user') 8 into vs_dbuser from dual; 9 select e.emp_name, d.dept_name 10 into vs_empuser, vs_deptname 11 from emp e, dept d 12 where e.dept_id = d.dept_id and e.emp_id = as_empid; 13 dbms_session.set_context('EMP_INFO', 'NAME', vs_empuser, vs_dbuser, as_client); 14 dbms_session.set_context('EMP_INFO', 'DEPT', vs_deptname, vs_dbuser, as_client); 15 end; 16 procedure set_id (as_client string) is 17 begin 18 dbms_session.set_identifier(as_client); 19 end; 20 procedure clear_id is 21 begin 22 dbms_session.clear_identifier; 23 end; 24 procedure clear_cont (as_client string) is 25 begin 26 dbms_session.clear_context('EMP_INFO', as_client); 27 end; 28 end init; 29 /

Page 12: Oracle History #6

[email protected] - 12 -

Oracle9i New Features http://www.ggola.com

- global application context session SGA . ,

"clear_identifier('id')" clear client id .

clear_identifier argument procedure .

- current session context id clear remove set_identifier context reuse .

- . context . context dbms_session

clear_context context

- clear SQL> exec init.clear_cont('10133'); SQL> exec init.set_id('10133'); SQL> select sys_context('EMP_INFO', 'NAME') from dual ; SYS_CONTEXT('EMP_INFO','NAME') --------------------------------------------------------------------------------

clear context .

SQL> conn scott/tiger SQL> exec init.set_id('10121'); SQL> select sys_context('EMP_INFO', 'NAME') name, 2 sys_context('EMP_INFO', 'DEPT') dept 3 from dual ; NAME DEPT -------------------- -------------------- KIM SALES SQL> exec init.set_id('10133'); SQL> select sys_context('EMP_INFO', 'NAME') name, 2 sys_context('EMP_INFO', 'DEPT') dept 3 from dual ; NAME DEPT -------------------- -------------------- JANG SYSTEM SQL> exec init.clear_id; SQL> select sys_context('EMP_INFO', 'NAME') from dual ; SYS_CONTEXT('EMP_INFO','NAME') --------------------------------------------------------------------------------

Page 13: Oracle History #6

[email protected] - 13 -

Oracle9i New Features http://www.ggola.com

- clear context . SQL> exec init.set_id('10121'); SQL> select sys_context('EMP_INFO', 'NAME') from dual ; SYS_CONTEXT('EMP_INFO','NAME') -------------------------------------------------------------------------------- KIM

clear context .

- , context , set_context clear_context context stored procedure . dbms_session

. init package .

enhanced fine-grained access control (FGAC)

data security 8i fgac all user groups rows access .

partitioned fgac

- from 9i application policy . ( partitioned fgac )

- fgac

1. design application context(called a driving context)

2. setting policy

3. table or view access

4. fgac looks up driving context

5. determine policy group

6. apply

- oracle9i fgac .

.

- table policy group init context driving

context policy .

Page 14: Oracle History #6

[email protected] - 14 -

Oracle9i New Features http://www.ggola.com

default policy 2 policy predicate clause test .

- CASE1 : KIM, LEE sales, marketing policy . group

basic_grp . JANG system system policy

data . gruop system_grp . , order_hstry check curnt_flg 'Y' data .

SQL> alter table emp add grp_policy varchar2(10) ; SQL> update emp set grp_policy = 'BASIC_GRP' where dept_id = 'SAL01' ; SQL> update emp set grp_policy = 'SYSTEM_GRP' where dept_id = 'SYS01' ; SQL> update emp set grp_policy = 'BASIC_GRP' where dept_id = 'MAR01' ; SQL> select * from emp ; EMP_ID EMP_NAME DEPT_ID GRP_POLICY ---------- ---------- ---------- ---------- A1998001 KIM SAL01 BASIC_GRP B2002003 JANG SYS01 SYSTEM_GRP C2001003 LEE MAR01 BASIC_GRP SQL> create table order_hstry ( 2 company varchar2(10), dept_name varchar2(10), goods varchar2(10), 3 amount number, curnt_flg varchar2(1) default 'Y'); SQL> insert into order_hstry values ('ACOM', 'SALES', 'RACKET', 1000, 'Y') ; SQL> insert into order_hstry values ('BCOM', 'SALES', 'RACKET', 1000, 'N') ; SQL> insert into order_hstry values ('BCOM', 'SYSTEM', 'CABLE', 4000, 'N') ; SQL> insert into order_hstry values ('ECOM', 'SYSTEM', 'COMPUTER', 10000, 'Y') ; SQL> insert into order_hstry values ('FCOM', 'MARKET', 'SHEET', 400, 'Y'); SQL> insert into order_hstry values ('GCOM', 'MARKET', 'BOX', 500, 'N'); SQL> commit ;

Page 15: Oracle History #6

[email protected] - 15 -

Oracle9i New Features http://www.ggola.com

- CASE2 : application context KIM login application . policy .

SQL> exec dbms_session.set_identifier('10121'); SQL> select sys_context('EMP_INFO', 'NAME') name from dual ; NAME ---- KIM SQL> select * from order_hstry ; COMPANY DEPT_NAME GOODS AMOUNT C ---------- ---------- ---------- ---------- - ACOM SALES RACKET 1000 Y BCOM SALES RACKET 1000 N BCOM SYSTEM CABLE 4000 N ECOM SYSTEM COMPUTER 10000 Y FCOM MARKET SHEET 400 Y GCOM MARKET BOX 500 N

Page 16: Oracle History #6

[email protected] - 16 -

Oracle9i New Features http://www.ggola.com

- CASE3 : policy driving context procedure application context initialize package

policy group context policy context table add . case1 3 policy 3 procedure .

SQL> create or replace package body init as 2 procedure create_cont (as_empid string, as_client string) is 3 vs_dbuser string(30); 4 vs_empuser string(30); 5 vs_deptname string(30); 6 vs_policy string(30); 7 begin 8 select sys_context('userenv','session_user') 9 into vs_dbuser from dual; 10 select e.emp_name, d.dept_name, e.grp_policy 11 into vs_empuser, vs_deptname, vs_policy 12 from emp e, dept d 13 where e.dept_id = d.dept_id and e.emp_id = as_empid; 14 dbms_session.set_context('EMP_INFO', 'NAME', vs_empuser, vs_dbuser, as_client); 15 dbms_session.set_context('EMP_INFO', 'DEPT', vs_deptname, vs_dbuser, as_client); 16 dbms_session.set_context('EMP_INFO', 'POLICY', vs_policy, vs_dbuser, as_client); 17 end; 18 procedure set_id (as_client string) is 19 begin 20 dbms_session.set_identifier(as_client); 21 end; 22 procedure clear_id is 23 begin 24 dbms_session.clear_identifier; 25 end; 26 procedure clear_cont (as_client string) is 27 begin 28 dbms_session.clear_context('EMP_INFO', as_client); 29 end; 30 end init;

/ SQL> conn system/manager SQL> grant execute on dbms_rls to scott ; SQL> conn scott/tiger SQL> exec dbms_rls.add_policy_context('scott', 'order_hstry', 'emp_info', 'policy') ; SQL> create or replace function order_standard (t_owner varchar2, t_name varchar2) return varchar2 is 2 begin 3 return 'curnt_flg = ''Y'''; 4 end; 5 / SQL> create or replace function order_basic (t_owner varchar2, t_name varchar2) return varchar2 is 2 begin 3 return 'dept_name = sys_context(''emp_info'', ''dept'')'; 4 end; 5 /

Page 17: Oracle History #6

[email protected] - 17 -

Oracle9i New Features http://www.ggola.com

- "sys_default" default group add_policy . policy drop drop_policy

. group drop_grouped_policy group

drop_grouped_policy delete_policy_group .

- CASE 4 : context test context initialize identifier .

- policy basic_grp . sql oracle default policy sys_default

for_standard policy(order_standard function) basic_grp for_basic policy(order_basic function)

sql return . SQL> select * from order_hstry ; no rows selected

no data found . .

SQL> create or replace function order_system (t_owner varchar2, t_name varchar2) return varchar2 is 2 begin 3 return 'dept_name <> sys_context(''emp_info'', ''dept'')'; 4 end; 5 / SQL> exec dbms_rls.add_grouped_policy('scott', 'order_hstry', 'SYS_DEFAULT', 'for_standard', 'scott', 'order_standard') ;

SQL> exec dbms_rls.create_policy_group('scott', 'order_hstry', 'basic_grp') ; SQL> exec dbms_rls.add_grouped_policy('scott', 'order_hstry', 'basic_grp', 'for_basic', 'scott', 'order_basic') ; SQL> exec dbms_rls.create_policy_group('scott', 'order_hstry', 'system_grp') ; SQL> exec dbms_rls.add_grouped_policy('scott', 'order_hstry', 'system_grp', 'for_system', 'scott', 'order_system') ;

SQL> exec init.clear_cont('10121'); SQL> exec init.create_cont('A1998001', '10121'); SQL> exec init.create_cont('B2002003', '10133'); SQL> exec init.set_id('10121'); SQL> select sys_context('emp_info','policy') from dual ; SYS_CONTEXT('EMP_INFO','POLICY -------------------------------------------------------------------------------- BASIC_GRP

Page 18: Oracle History #6

[email protected] - 18 -

Oracle9i New Features http://www.ggola.com

- user KIM sales sys_default curnt_flg 'Y' data basic_grp 'SALES' data , .

?

- oracle iTAR . "This was recently reported as a known bug, 2635664 Testcase established two policy groups, each with an associated policy. When running with no context, no rows were returned as both policies were in effect (correct) and the predicates they generated were mutually exclusive. Changing the context to either one or the other valid groups resulted in still no rows being returned as both policies were still being applied (wrong) rather than just the only valid policy. You may see some relief as a workaround to flush the shared pool after changing the driving context, see if this helps. Solution for this issue is to apply the 9.2.0.4 patchset as this contains the fix."

- upgrade .

fine-grained audit (FGA)

row auditing

- from 9i row level tracking auditing .

- dbms_fga package (add, drop, enable, disable_policy) policy (dba_audit_policies) dba_fga_audit_trail view . , policy

(invoke procedure) "select with a where clause for only one audit column" event handler audit feature

. CF. select trigger user fetch data audit condition data

.

- fga .

1. design audit policy

2. create audit event handler(if you want to call stored procedure whenever users call audited data)

SQL> select * from order_hstry ; COMPANY DEPT_NAME GOODS AMOUNT C ---------- ---------- ---------- ---------- - ACOM SALES RACKET 1000 Y

Page 19: Oracle History #6

[email protected] - 19 -

Oracle9i New Features http://www.ggola.com

3. add policy

4. check dba_fga_audit_trail, alert.log(if you call the stored procedure with writing function to alert.log)

- order_hstry table fga . 9i fga .

.

- CASE1 : "SYSTEM" (dept_id = 'SYS01') access auditing

.

- 3 SQL dept_id = 'SYS01' audit column emp_id access audit .

SQL> conn system/manager SQL> grant execute on dbms_fga to scott ; SQL> conn scott/tiger SQL> exec dbms_fga.add_policy('scott', 'emp', 'policy_emp', 'dept_id = ''SYS01'' ', 'emp_id'); SQL> select object_schema, object_name, policy_name, policy_text from dba_audit_policies ; OBJECT_SCH OBJECT_NAM POLICY_NAM POLICY_TEXT ---------- ---------- ---------- -------------------- SCOTT EMP POLICY_EMP dept_id = 'SYS01' SQL> select emp_name from emp where dept_id = 'SYS01' ; EMP_NAME ---------- JANG SQL> select count(*) from emp ; COUNT(*) ---------- 3 SQL> select count(*) from emp where dept_id = 'SYS01' ; COUNT(*) ---------- 1 SQL> select session_id, timestamp, object_schema, object_name, policy_name 2 from dba_fga_audit_trail ; no rows selected

Page 20: Oracle History #6

[email protected] - 20 -

Oracle9i New Features http://www.ggola.com

- 3 sql audit data (where ) . auditing . .

SQL> select emp_id from emp ; EMP_ID ---------- A1998001 B2002003 C2001003 SQL> select emp_id from emp where dept_id = 'MAR01'; EMP_ID ---------- C2001003 SQL> select emp_name from emp where emp_id = 'C2001003' ; EMP_NAME ---------- LEE SQL> select session_id, timestamp, object_schema, object_name, policy_name 2 from dba_fga_audit_trail ; SESSION_ID TIMESTAMP OBJECT_SCH OBJECT_NAM POLICY_NAM ---------- --------- ---------- ---------- ---------- 198 18-AUG-03 SCOTT EMP POLICY_EMP 198 18-AUG-03 SCOTT EMP POLICY_EMP 198 18-AUG-03 SCOTT EMP POLICY_EMP

SQL> analyze table emp compute statistics; SQL> select emp_name from emp where emp_id = 'C2001003' ; EMP_NAME ---------- LEE SQL> select emp_id from emp where dept_id = 'MAR01'; EMP_ID ---------- C2001003 SQL> select emp_id from emp where dept_id = 'SYS01' ; EMP_ID ---------- B2002003 SQL> select session_id, timestamp, object_schema, object_name, policy_name 2 from dba_fga_audit_trail ; SESSION_ID TIMESTAMP OBJECT_SCH OBJECT_NAM POLICY_NAM ---------- --------- ---------- ---------- ---------- 198 18-AUG-03 SCOTT EMP POLICY_EMP 198 18-AUG-03 SCOTT EMP POLICY_EMP 198 18-AUG-03 SCOTT EMP POLICY_EMP 198 18-AUG-03 SCOTT EMP POLICY_EMP

Page 21: Oracle History #6

[email protected] - 21 -

Oracle9i New Features http://www.ggola.com

- 3 SQL audit . . , analyze

.

- emp_id select where policy dept_id = 'SYS01' emp_id access auditing

. , policy audit column access (select ) auditing

.

- CASE2 : session alert message auditing . , policy handle procedure alert message auditing

. (application developer's guide 9i util_alert_pager call alert log auditing .

procedure . .

SQL> select emp_name from emp where emp_id = 'B2002003' ; EMP_NAME ---------- JANG SQL> select session_id, timestamp, object_schema, object_name, policy_name 2 from dba_fga_audit_trail ; SESSION_ID TIMESTAMP OBJECT_SCH OBJECT_NAM POLICY_NAM ---------- --------- ---------- ---------- ---------- 198 18-AUG-03 SCOTT EMP POLICY_EMP 198 18-AUG-03 SCOTT EMP POLICY_EMP 198 18-AUG-03 SCOTT EMP POLICY_EMP 198 18-AUG-03 SCOTT EMP POLICY_EMP 198 18-AUG-03 SCOTT EMP POLICY_EMP

SQL> conn system/manager SQL> grant execute on dbms_alert to scott ; SQL> conn scott/tiger SQL> create or replace procedure trail_emp 2 (ud_schema varchar2, ud_table varchar2, ud_policy varchar2) is 3 pragma autonomous_transaction; 4 begin 5 dbms_alert.signal('alert_emp', to_char(sysdate, 'YYYYMMDD HH24:MI:SS') || ud_schema || ':' || ud_table || ':' || ud_policy); 6 commit; 7 end; 8 / SQL> select object_schema, object_name, policy_name, policy_text, pf_schema, pf_function 2 from dba_audit_policies ; OBJECT_SCH OBJECT_NAM POLICY_NAM POLICY_TEXT PF_SCHEMA PF_FUNCTIO ---------- ---------- ---------- ----------------- ---------- ---------- SCOTT EMP POLICY_EMP dept_id = 'SYS01' SCOTT TRAIL_EMP

Page 22: Oracle History #6

[email protected] - 22 -

Oracle9i New Features http://www.ggola.com

- auditing procedure . pf_function procedure .

procedure pragma autotnomous_transaction dbms_alert signal commit select

application commit . (autonomous_transaction

oracle8i new features )

- (terminal #2) SQL> var status number SQL> var message varchar2(2000) SQL> exec dbms_alert.waitone('alert_emp', :message, :status); ….waiting….

alert message . , auditing procedure trail_emp

waiting . . waiting

package dbms_pipe ( polling )

.

- (terminal #1) sql auditing terminal #2

waiting prompt .

SQL> select emp_name, emp_id from emp where dept_id = 'SYS01' ; EMP_NAME EMP_ID ---------- ---------- JANG B2002003 SQL> select session_id, timestamp, object_schema, object_name, policy_name 2 from dba_fga_audit_trail ; SESSION_ID TIMESTAMP OBJECT_SCH OBJECT_NAM POLICY_NAM ---------- ---------- ---------- ---------- ---------- 198 18-AUG-03 SCOTT EMP POLICY_EMP 198 18-AUG-03 SCOTT EMP POLICY_EMP 198 18-AUG-03 SCOTT EMP POLICY_EMP 198 18-AUG-03 SCOTT EMP POLICY_EMP 198 18-AUG-03 SCOTT EMP POLICY_EMP 198 18-AUG-03 SCOTT EMP POLICY_EMP

Page 23: Oracle History #6

[email protected] - 23 -

Oracle9i New Features http://www.ggola.com

- terminal #2

-

- 0 . 0 alert , auditing 1 timeout

.

- CASE2 : CASE2 9i new feature fga procedure auditing

. alert auditing .

- dbms_alert dbms_pipe . table

trigger dbms_alert dml auditing .

- (terminal #2) auditing data . auditing data

. . sys login disable .

SQL> exec dbms_alert.waitone('alert_emp', :message, :status); pl/sql procedure successfully completed. SQL> print :message MESSAGE -------------------------------------------------------------------------------- 20030818 16:38:50SCOTT:EMP:POLICY_EMP

auditing message . SQL> print :status STATUS ---------- 0

SQL> conn / as sysdba SQL> delete from dba_fga_audit_trail ; SQL> commit ; SQL> conn scott/tiger SQL> exec dbms_fga.disable_policy('scott', 'emp', 'policy_emp'); SQL> exit

Page 24: Oracle History #6

[email protected] - 24 -

Oracle9i New Features http://www.ggola.com

- (terminal #1) auditing .

- auditing data . disable .

encryption enhancements

9i

.

9i dbms_obfuscation_toolkit package data encryption and decryption .

oracle encryption and decryption package

.

DES, MD5, DES3

- , DES(Data Encryption Standard), MD5(Message Digest 5) DES DES3(Triple DES) .

- dbms_obfuscation_toolkit 3 DES .

CF. 9i .

- CASE : DES input data encryption and decryption (private) key

.

SQL> select policy_name, enabled from dba_audit_policies ; POLICY_NAME ENA ------------------------------ --- POLICY_EMP NO SQL> select session_id, timestamp, object_schema, object_name, policy_name 2 from dba_fga_audit_trail ; no rows selected SQL> select emp_name, emp_id from emp where dept_id = 'SYS01' ; EMP_NAME EMP_ID ---------- ---------- JANG B2002003 SQL> select session_id, timestamp, object_schema, object_name, policy_name 2 from dba_fga_audit_trail ; no rows selected

Page 25: Oracle History #6

[email protected] - 25 -

Oracle9i New Features http://www.ggola.com

CF. DES3 key 3 .

- procedure dbms_obfuscation_toolkit desencryption procedure call key data desdecryption procedure call key

.

- encrypted value raw type sqlplus hexvalue .

- data 'pwd12345' key value 'key56789' encryption key decryption

.

- . error case . error .

SQL> create or replace procedure pwd_encdec (pwd varchar2, key varchar2) is 2 vr_inraw raw(128) := utl_raw.cast_to_raw(pwd); 3 vr_keyraw raw(128) := utl_raw.cast_to_raw(key); 4 vr_encraw raw(2048); 5 vr_decraw raw(2048); 6 begin 7 dbms_output.put_line('----------------------------------------------'); 8 dbms_output.put_line('your pwd (converted with to raw type) : ' || utl_raw.cast_to_varchar2(vr_inraw)); 9 dbms_output.put_line('your key (converted with to raw type) : ' || utl_raw.cast_to_varchar2(vr_keyraw)); 10 dbms_output.put_line('----------------------------------------------'); 11 dbms_obfuscation_toolkit.desencrypt( input => vr_inraw, key => vr_keyraw, encrypted_data => vr_encraw); 12 dbms_output.put_line('encrypted hex value : ' || rawtohex(vr_encraw)); 13 dbms_obfuscation_toolkit.desdecrypt( input => vr_encraw, key => vr_keyraw, decrypted_data => vr_decraw); 14 dbms_output.put_line('decrypted pwd : ' || utl_raw.cast_to_varchar2(vr_decraw)); 15 dbms_output.put_line('----------------------------------------------'); 16 end; 17 / SQL> set serveroutput on SQL> exec pwd_encdec('pwd12345', 'key56789'); ---------------------------------------------- your pwd (converted with to raw type) : pwd12345 your key (converted with to raw type) : key56789 ---------------------------------------------- encrypted hex value : 8AE1B93004764662 decrypted pwd : pwd12345 ----------------------------------------------

Page 26: Oracle History #6

[email protected] - 26 -

Oracle9i New Features http://www.ggola.com

- error . encryption data 7 . , DES

. .

- DES Restriction :

1. DES symmetric key algorithm , key

key .

2. DES 64bit data block 56bit key encryption data 8 (multiple of 8 bytes)

.

3. key 56-bit key .

CF. DES data . (

)

others

9i new features optional 9i database

.

oracle label security

- feature trusted oracle pl/sql policy .

vpd(virtual private database)

SQL> exec pwd_encdec('pwd1234', 'key56789'); ---------------------------------------------- your pwd (converted with to raw type) : pwd1234 your key (converted with to raw type) : key56789 ---------------------------------------------- BEGIN pwd_encdec('pwd1234', 'key56789'); END; * ERROR at line 1: ORA-28232: invalid input length for obfuscation toolkit ORA-06512: at "SYS.DBMS_OBFUSCATION_TOOLKIT_FFI", line 0 ORA-06512: at "SYS.DBMS_OBFUSCATION_TOOLKIT", line 99 ORA-06512: at "SCOTT.PWD_ENCDEC", line 11 ORA-06512: at line 1

Page 27: Oracle History #6

[email protected] - 27 -

Oracle9i New Features http://www.ggola.com

connection user row label .

CF. 9i feature optional product . , database

features .

- . oracle oracle policy manager gui .

optional .

- , vpd policy policy application context

data data access .

CF. label hidden column data access .

oracle login server

- oracle oid(oracle internet directory) single sign-on . 9i application server

database connection .

- web application multiple database .

Page 28: Oracle History #6

[email protected] - 28 -

Oracle9i New Features http://www.ggola.com

2. General High Availability Technology

minimal I/O recovery (only instance or crash recovery)

unplanned down database restart oracle instance recovery database open .

to 8i instance recovery

- 3 .

1. rolling forward(redo log applying) .

failure check point redo log read ( )

datafile read/write ( )

2. database open

3. rolling back (by smon)

from 9i : rolling forward two-pass recovery

- rolling forward datafile read/write time .

- two-pass recovery :

1. failure checkpoint redo log read(sequential read) pga recovery block keeping

2. pga keeping recovery block applying ( dbwr deferred write

)

3. redo log two-pass .

4. block recovery . 9i redo log block dirty

in the buffer cache .

- instance or crash recovery dba oracle .

Page 29: Oracle History #6

[email protected] - 29 -

Oracle9i New Features http://www.ggola.com

CF. instance or crash single instance rac(ops) .

fast-start time-based recovery limit

recovery performance recovery , redo

.

oracle checkpoint rba(redo byte address) control file recovery checkpoint rba oracle instance

. checkpoint rba failure recovery . mttr

.

mttr(mean time to recover)

- dba recovery time .

checkpoint rba , datafile dirty block write ,

checkpoint dba .

- log_checkpoint_interval or fast_start_io_target parameter

.

- new parameter fast_start_mttr_target crash recovery time .

dynamic parameter fast_start_io_target log_checkpoint_interval

. CF. rac crash recovery time open instances sum of fast_start_mttr_target

. node failure node recovery

.

- 0 ~ 3600 0 . recommended value sga size

site service level agreement (sla) .

recovery time parameter

- recovery time 4 parameter

Page 30: Oracle History #6

[email protected] - 30 -

Oracle9i New Features http://www.ggola.com

1. db_block_max_dirty_target (obsoleted from 9i)

2. fast_start_io_target

3. log_checkpoint_interval

4. log_checkpoint_timeout (no change)

- from 9i fast_start_mttr_target fast_start_io_target, log_checkpoint_interval

. fast_start_io_target, log_checkpoint_interval fast_start_mttr_target override .

new 3 columns in v$instance_recovery for recovery time information

- oracle 30 mttr .

1. TARGET_MTTR : oracle mttr value . dba system monitoring

fast_start_mttr_target .

2. ESTIMATED_MTTR : instance failure recovery time

3. CKPT_BLOCK_WRITES : checkpoint db block write

flashback (managing by smon)

consistent view .

, data time machine

query . (

8i rollback segment . .)

- scn .

data scn mapping .

Page 31: Oracle History #6

[email protected] - 31 -

Oracle9i New Features http://www.ggola.com

- 5 5 data . ( wall-clock time .

scn flashback query scn generation 5

)

flashback feature

- flashback dml flashback query flashback disable . ( pl/sql block

)

- flashback query 9i new feature undo management .

- rollback segment 9i undo management (automatic undo)

flashback query .

- flashback query undo 3 initial parameter

manual rollback segment .

1. undo_management = auto

2. undo_tabelspace = tablespace_name

3. undo_retention = 6000

- 3 setting undo mechanism tablespace_name undo data

retention undo flashback query . ( flashback query undo_retention value )

- flashback query session level smon scn time mapping smon_scn_time table

- flashback enable session dml flashback disabling open pl/sql cursor dml

. ( data flashback )

- dbms_flashback.enable active transaction sys user . (session

level ).

Page 32: Oracle History #6

[email protected] - 32 -

Oracle9i New Features http://www.ggola.com

example

- table 3 rows table 1 row delete data

.

SQL> conn system/manager SQL> sho parameter undo_retention NAME TYPE VALUE ------------------------------------ ---------- ------------------------------ undo_retention integer 1200 SQL> grant execute on dbms_flashback to scott ; SQL> conn scott/tiger SQL> set time on 16:50:39 SQL> create table emp_flash as select * from emp ; 16:50:57 SQL> select * from emp_flash ; EMP_ID EMP_NAME DEPT_ID GRP_POLICY ---------- ---------- ---------- ---------- A1998001 KIM SAL01 BASIC_GRP B2002003 JANG SYS01 SYSTEM_GRP C2001003 LEE MAR01 BASIC_GRP 16:51:03 SQL> select sysdate, dbms_flashback.get_system_change_number from dual ; SYSDATE GET_SYSTEM_CHANGE_NUMBER ----------------- ------------------------ 20030901 16:51:21 718931 16:51:21 SQL> select sysdate, 'wait for 5 miniutes!' from dual ; SYSDATE 'WAITFOR5MINIUTES!' ----------------- -------------------------------- 20030901 16:51:57 wait for 5 miniutes! 16:51:57 SQL> select sysdate, 'wait for 5 miniutes!' from dual ; SYSDATE 'WAITFOR5MINIUTES!' ----------------- -------------------------------- 20030901 16:57:15 wait for 5 miniutes! 16:57:15 SQL> delete from emp_flash where grp_policy = 'SYSTEM_GRP' ; 16:57:52 SQL> commit ; 16:57:55 SQL> select * from emp_flash ; EMP_ID EMP_NAME DEPT_ID GRP_POLICY ---------- ---------- ---------- ---------- A1998001 KIM SAL01 BASIC_GRP C2001003 LEE MAR01 BASIC_GRP 16:58:01 SQL> select sysdate, dbms_flashback.get_system_change_number from dual ; SYSDATE GET_SYSTEM_CHANGE_NUMBER ----------------- ------------------------ 20030901 16:59:37 719095

Page 33: Oracle History #6

[email protected] - 33 -

Oracle9i New Features http://www.ggola.com

16:59:37 SQL> exec dbms_flashback.enable_at_time(to_timestamp('20030901 16:57:01', - 17:01:15 > 'YYYYMMDD HH24:MI:SS')) ; pl/sql procedure successfully completed. 17:01:24 SQL> select * from emp_flash ; EMP_ID EMP_NAME DEPT_ID GRP_POLICY ---------- ---------- ---------- ---------- A1998001 KIM SAL01 BASIC_GRP B2002003 JANG SYS01 SYSTEM_GRP C2001003 LEE MAR01 BASIC_GRP 17:02:09 SQL> delete from emp_flash ; delete from emp_flash * ERROR at line 1: ORA-08182: operation not supported while in Flashback mode 17:02:35 SQL> exec dbms_flashback.disable ; pl/sql procedure successfully completed.

Page 34: Oracle History #6

[email protected] - 34 -

Oracle9i New Features http://www.ggola.com

- flashback cursor open flashback mode disable flashback data dml

.

- , open flashback mode disable flashback mode cursor fetch .

- test undo_retention time 1200 , 20

flashback query . transaction undo overwrite

flashback query . , parameter 1200 oracle maximum flashback query static

.

17:02:36 SQL> set time off SQL> set serveroutput on SQL> declare 2 vr_emp emp_flash%rowtype; 3 cursor c_emp_flash is 4 select * from emp_flash where grp_policy = 'SYSTEM_GRP' ; 5 begin 6 dbms_flashback.enable_at_time(to_timestamp('20030901 16:57:01', 'YYYYMMDD HH24:MI:SS')) ; 7 open c_emp_flash; 8 dbms_flashback.disable; 9 loop 10 fetch c_emp_flash into vr_emp; 11 exit when c_emp_flash%notfound; 12 dbms_output.put_line(vr_emp.emp_id || ' ' || vr_emp.grp_policy); 13 insert into emp_flash values (vr_emp.emp_id, vr_emp.emp_name, vr_emp.dept_id, vr_emp.grp_policy); 14 end loop; 15 close c_emp_flash; 16 end; 17 / B2002003 SYSTEM_GRP pl/sql procedure successfully completed. SQL> commit ; SQL> select * from emp_flash; EMP_ID EMP_NAME DEPT_ID GRP_POLICY ---------- ---------- ---------- ---------- A1998001 KIM SAL01 BASIC_GRP C2001003 LEE MAR01 BASIC_GRP B2002003 JANG SYS01 SYSTEM_GRP

Page 35: Oracle History #6

[email protected] - 35 -

Oracle9i New Features http://www.ggola.com

flashback & logminer

what is the difference?

- logminer flashback . ( )

.

- , flashback logminer . undo space undo_retention

. ( . database flashback )

data logminer

.

- ...

1. flashback : data data

2. logminer : data data ( 9i gui

. , logminer data type )

CF. oracle 10g row flashback database level table(or index) level flashback .

10g .

resumable space allocation

. large operation space rollback

extent , size data table tablespace .

hang large operation time cost

. ! 9i .

job suspending and resume

- tablespace suspending

. 3 case .

1. out-of-space : tablespace

Page 36: Oracle History #6

[email protected] - 36 -

Oracle9i New Features http://www.ggola.com

2. space limit : max extents

3. user tablespace quota

-

1. session level control

2. suspend alert.log

3. system event trigger after suspend on database trigger firing

-

1. select temporary tablespace

2. dml, imp/exp(using resumable optoin), sql*loader(using resumable option), ddl

how long can you wait?

- large operation . (timeout

occurs) abort . default 7200

.

- alter session enable resumable timeout 3000 ; CF. [name "xxx"] option resumable

.

- exec dbms_resumable.set_session_timeout(session_id, 3000) ;

- exec dbms_resumable.set_timeout(3000) ;

- create or replace trigger resume_timeout after suspend on database begin dbms_resumable.set_timeout(3000); end; / CF. trigger resumable case . statement suspend trigger datafile resize or add scripts

, dba message .

CF. , trigger suspending transaction (ddl or dml) ( ,

commit ) pragma autonomous_transaction .

Page 37: Oracle History #6

[email protected] - 37 -

Oracle9i New Features http://www.ggola.com

example

- tablespace insert .

timeout .

, data time machine

resumable package and view

- dbms_resumable package

1. abort : suspending statement abort

2. get_session_timeout(session_id) :

3. get_timeout

SQL> conn system/manager SQL> grant resumable to scott; SQL> create tablespace tbs_test 2 datafile '/app/oracle/oradata/NEWSVC/resume.dbf' size 88K 3 autoextend off ; SQL> conn scott/tiger SQL> create table resumable_test 2 tablespace tbs_test 3 as select * from all_objects where rownum < 1 ; SQL> select * from resumable_test ; no rows selected SQL> insert into resumable_test select * from all_objects ; .. waiting ..

prompt suspending . alert.log .

[NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/bdump> tail -f alert_NEWSVC.log ............ ............ Tue Sep 2 16:11:42 2003 statement in resumable session 'User SCOTT(61), Session 8, Instance 1' was suspended due to ORA-01653: unable to extend table SCOTT.RESUMABLE_TEST by 8 in tablespace TBS_TEST

alert log error message tbs_test . [NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/bdump> sqlplus system/manager SQL> alter database datafile '/app/oracle/oradata/NEWSVC/resume.dbf' resize 10M ; Database altered.

suspending sql return . SQL> insert into resumable_test select * from all_objects ; 23659 rows created. SQL> commit ;

Page 38: Oracle History #6

[email protected] - 38 -

Oracle9i New Features http://www.ggola.com

4. set_session_timeout(session_id, timeout)

5. set_timeout

6. space_error_info ( argument )

- dba_resumable view : suspending dba_resumable

view session id

1. sql ( 1000 bytes)

2. resumable

3. time .

exp/imp enhancements

import and statistics

- to 8i import analyze and recalculate_statistics parameter

.

- from 9i statistics parameter .

1. always : import . ( default questionable )

2. safe : import . ( , questionable , safe )

3. recalculate : import import .

4. none : import recalculate

CF. questionable dump file export error . error dump

file safe .

- export parameter 8i tablespace transport tablespace . from 9i tablespace object export option

. , list of tablespaces to transport list objects of tablespaces to export .

- export parameter user exp_full_database privilege

Page 39: Oracle History #6

[email protected] - 39 -

Oracle9i New Features http://www.ggola.com

. CF. , import

example

- partition table 9i new feature list partitioned table . .

SQL> system/manager SQL> create tablespace tbs_test2 datafile 2 '/app/oracle/oradata/NEWSVC/expimp_test.dbf' size 5M ; SQL> conn scott/tiger SQL> create table sale_part (id number, name varchar2(30), addr varchar2(2), 2 amount number, hiredata date) 3 partition by list(addr) 4 ( 5 partition sale_east values ('ea', 'eb'), 6 partition sale_west values ('wa', 'wb'), 7 partition sale_south values ('sa', 'sb') tablespace tbs_test, 8 partition sale_north values ('na', 'nb') tablespace tbs_test2 9 ); SQL> insert into sale_part values (10, 'JANG', 'ea', 100, sysdate -1); SQL> insert into sale_part values (20, 'CHOI', 'wb', 200, sysdate -2); SQL> insert into sale_part values (30, 'LEE', 'sa', 300, sysdate -3); SQL> insert into sale_part values (40, 'JUN', 'nb', 400, sysdate -4); SQL> commit ; SQL> create index resumable_test_i_object_id on resumable_test(object_id) 2 tablespace tbs_test2 ; SQL> select segment_name, partition_name from user_segments 2 where tablespace_name = 'TBS_TEST' ; SEGMENT_NAME PARTITION_NAME -------------------- -------------------- RESUMABLE_TEST SALE_PART SALE_SOUTH SQL> conn system/manager SQL> grant exp_full_database to scott ; SQL> grant imp_full_database to scott ; SQL> exit [NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/work> exp userid=scott/tiger tablespaces=tbs_test ....... About to export selected tablespaces ... For tablespace TBS_TEST ... . exporting cluster definitions . exporting table definitions . . exporting table RESUMABLE_TEST 23659 rows exported . . exporting table SALE_PART . . exporting partition SALE_EAST 1 rows exported . . exporting partition SALE_WEST 1 rows exported . . exporting partition SALE_SOUTH 1 rows exported . . exporting partition SALE_NORTH 1 rows exported . exporting referential integrity constraints . exporting triggers Export terminated successfully without warnings.

Page 40: Oracle History #6

[email protected] - 40 -

Oracle9i New Features http://www.ggola.com

- import tablespace partition tbs_test index

export tablespace import . , tablespace objects

tablespace objects export/import .

- resumable exp/imp parameter . option

resumable command . parameter .

1. resumable=y/n

2. resumable_name=name

3. resumable_timeout=timeout seconds (default 7200 )

- flashback exp/imp parameter . parameter .

1. flashback_scn=scn

2. flashback_timeout=time

CF. . parameter error . ( flashback )

SQL> conn scott/tiger SQL> select segment_name, partition_name, tablespace_name 2 from user_segments where tablespace_name in ('USERS', 'TBS_TEST', 'TBS_TEST2') ; SEGMENT_NAME PARTITION_NAME TABLESPACE -------------------------- -------------- ---------- SALE_PART SALE_NORTH TBS_TEST2 RESUMABLE_TEST_I_OBJECT_ID TBS_TEST2 RESUMABLE_TEST TBS_TEST SALE_PART SALE_SOUTH TBS_TEST EMP USERS DEPT USERS ORDER_HSTRY USERS EMP_FLASH USERS SALE_PART SALE_EAST USERS SALE_PART SALE_WEST USERS

Page 41: Oracle History #6

[email protected] - 41 -

Oracle9i New Features http://www.ggola.com

3. LogMiner Enhancements

ddl support

Logminer and ddl

- to 8i ddl logminer ddl command oracle internal dml

ddl .

- from 9i ddl log oracle internal dml ddl .

- .

1. v$logmnr_contents operation column "ddl" .

2. v$logmnr_contents sql_redo column ddl .

3. 9i version log file . ( . ddl 9i logging

)

4. ddl support recovery . (drop truncate row data )

example

- . . redo log database restart

.

- logminer 9i online data dictionary build .

.

SQL> conn sys/manager

system user package . SQL> grant execute on dbms_logmnr to scott ; SQL> create public synonym dbms_logmnr for dbms_logmnr ; SQL> conn scott/tiger

Page 42: Oracle History #6

[email protected] - 42 -

Oracle9i New Features http://www.ggola.com

data dictionary access

new data dictionary access

- 8i dictionary access flat file .

- redo log table,

column . ( 8i )

- ( 3 ) dictionary

SQL> select member from v$logfile where group# = 2 (select group# from v$log where status = 'CURRENT'); MEMBER -------------------------------------------------------------------------------- /app/oracle/oradata/NEWSVC/redoNEWSVC01a.log /app/oracle/oradata/NEWSVC/redoNEWSVC01b.log

current log DDL . SQL> create table logtest (t number); SQL> truncate table logtest ; SQL> drop table logtest ; SQL> select member from v$logfile where group# = 2 (select group# from v$log where status = 'CURRENT') ; MEMBER -------------------------------------------------------------------------------- /app/oracle/oradata/NEWSVC/redoNEWSVC01a.log /app/oracle/oradata/NEWSVC/redoNEWSVC01b.log

current log redo log . SQL> exec dbms_logmnr.add_logfile('/app/oracle/oradata/NEWSVC/redoNEWSVC01a.log') ; SQL> exec dbms_logmnr.start_logmnr(options => dbms_logmnr.dict_from_online_catalog) ;

onlie data dictionary build . SQL> select sql_redo from v$logmnr_contents 2 where username = 'SCOTT' and operation = 'DDL' and seg_name = 'LOGTEST' ; SQL_REDO ---------------------------------------- create table logtest (t number); truncate table logtest ; ( . truncate dml ) drop table logtest ;

Page 43: Oracle History #6

[email protected] - 43 -

Oracle9i New Features http://www.ggola.com

logminer .

- 3 sql_redo column "Dictionary Version Mismatch" .

data dictionary access method

1. 8i flat file : external flat file data dictionary 8i .

utl_file directory dbms_logmnr_d.build filename, path

dbms_logmnr_d.store_in_flat_file .

version 8i new features . EX. dbms_logmnr_d.build(dictionary_file_name => 'filename', dictionary_location => '/app/.../dictionary/', options => dbms_logmnr_d.store_in_flat_file) ;

2. write to redo log : flat file redo log dictionary flat file

database resource . , archive log mode database

. EX. dbms_logmnr_d.build(options => dbms_logmnr_d.store_in_redo_logs) ;

3. online data dictionary : . current dictionary . dictionary

. EX. dbms_logmnr.start_logmnr(options => dbms_logmnr.dict_from_online_catalog) ;

ddl tracking in the dictionary

ddl tracking

- dictionary logminer dictionary

.

- flat file write to redo logs dictionary sql hexvalue . EX. insert into "SCOTT"."EMP"("COL 1","COL 2","COL 3","COL 4") values (HEXTORAW('c102'),HEXTORAW('c103'),HEXTORAW('c104'),HEXTORAW('c105'));

Page 44: Oracle History #6

[email protected] - 44 -

Oracle9i New Features http://www.ggola.com

- flat file write to redo logs hexvalue

.

example

- .

SQL> conn / as sysdba Connected. SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination /app/oracle/oradata/NEWSVC/archive Oldest online log sequence 99 Next log sequence to archive 102 Current log sequence 102 SQL> grant execute on dbms_logmnr_d to scott ; SQL> create public synonym dbms_logmnr_d for dbms_logmnr_d ; SQL> sho parameter utl NAME TYPE VALUE ------------------------------------------------------- utl_file_dir string /app/oracle/admin/NEWSVC/work SQL> conn scott/tiger Connected. SQL> create table x_logmnr (t number) ; Table created. SQL> alter table x_logmnr add y number ; Table altered. SQL> insert into x_logmnr values (1, 2) ; 1 row created. * SQL> commit ; SQL> exec dbms_logmnr_d.build('dictforscott.dic', '/app/oracle/admin/NEWSVC/work', - > options => dbms_logmnr_d.store_in_flat_file); pl/sql procedure successfully completed. SQL> alter table x_logmnr add z number ; Table altered. SQL> insert into x_logmnr values (1,2,3) ; 1 row created. SQL> rollback ; Rollback complete. SQL> insert into x_logmnr values (3,4,5); 1 row created. SQL> commit; Commit complete.

Page 45: Oracle History #6

[email protected] - 45 -

Oracle9i New Features http://www.ggola.com

- error oracle direct connect chat .

CF. oracle direct connect chat metalink iTAR oracle engineer chatting 1:1 .

“APSERV13: Mostly it should go away and you need to test it on 9.2.0.4 , if you notice it then please get back to us, will do further investigation of this issue.”

patch update .

dictionary staleness detection

. 9i logminer object version . table drop and

SQL> conn / as sysdba Connected. SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination /app/oracle/oradata/NEWSVC/archive Oldest online log sequence 99 Next log sequence to archive 102 Current log sequence 102 SQL> alter system switch logfile ; System altered. SQL> exec dbms_logmnr.add_logfile('/app/oracle/oradata/NEWSVC/archive/1_102.dbf', - > dbms_logmnr.new) ; pl/sql procedure successfully completed. SQL> exec dbms_logmnr.start_logmnr(dictfilename=>'/app/oracle/admin/NEWSVC/work/dictforscott.dic',- > options=>dbms_logmnr.ddl_dict_tracking+dbms_logmnr.committed_data_only); pl/sql procedure successfully completed. SQL> select sql_redo from v$logmnr_contents 2 where username = 'SCOTT' and seg_name = 'X_LOGMNR'; ERROR: ORA-00604: error occurred at recursive SQL level 1 ORA-01422: exact fetch returns more than requested number of rows ORA-06512: at "SYS.LOGMNR_DICT_CACHE", line 1534 ORA-06512: at "SYS.LOGMNR_GTLO3", line 72 ORA-01403: no data found ORA-06512: at line 1 no rows selected

Page 46: Oracle History #6

[email protected] - 46 -

Oracle9i New Features http://www.ggola.com

recreation column new object old object version .

“ . " feature .

CF. oracle bulletin metalink manual . .

filtering data

kind of filtering

- showing only committed transactions : logminer data commit

. EX. exec dbms_logmnr.start_logmnr(options => dbms_logmnr.commited_data_only);

- skip redo corruption : redo logs corruptions

. . , v$logmnr_contents corruptions

. EX. exec dbms_logmnr.start_logmnr(options => dbms_logmnr.skip_corruption);

- filtering data by time . logmnr start

.

- filtering data by scn . logmnr start scn

.

primary key information

finding row with primary key values

- default sql_redo update where row rowid return .

- table move delete and insert rowid undo .

- feature . , table supplemental log sql_redo

Page 47: Oracle History #6

[email protected] - 47 -

Oracle9i New Features http://www.ggola.com

primary key . EX. alter table emp add supplemental log group emp_group_pk (emp_id, emp_name) ;

- database level EX. alter database add supplemental log data (primary key) columns;

CF. primary key value performance . (

transaction primary key log )

restriction

not supported type

- long, lob data type

- object types

- collections type (nested tables and varrays)

- iot (index organized tables)

CF. direct path data logging and archive mode .

view

logminer view

- v$logmnr_contents : sql_redo,undo .

- v$logmnr_dictionary : dictionary flat file .

- v$logmnr_logs : log file .

- v$logmnr_parameters : logminer optional parameter time, scn base logminer .

Page 48: Oracle History #6

[email protected] - 48 -

Oracle9i New Features http://www.ggola.com

performance tip

logminer objects system . performance

objects recreation .

- tablespace "ORA-01353: existing Logminer session" error .

- table data table data delete .

1. system.logmnr_uid$

2. system.logmnr_session$

3. system.logmnrc_gtcs

4. system.logmnrc_gtlo

- Logminer Viewer : oem logminer viewer gui .

SQL> conn sys/manager SQL> create tablespace logtest datafile '/app/oracle/oradata/NEWSVC/logtest.dbf' size 10M ; SQL> exec dbms_logmnr_d.set_tablespace('logtest');

4M objects . SQL> select segment_type, sum(1) from dba_segments 2 where tablespace_name = 'LOGTEST' 3 group by segment_type ; SEGMENT_TYPE SUM(1) ------------------ ---------- INDEX 3 INDEX PARTITION 24 LOBINDEX 4 LOBSEGMENT 4 TABLE 9 TABLE PARTITION 26

Page 49: Oracle History #6

[email protected] - 49 -

Oracle9i New Features http://www.ggola.com

4. Backup and Recovery

retention policies

backup

- recovery window : point-in-time recovery backup .

- redundancy : backup . (specified as a number of backups)

- default "redundancy 1" . retention policy backup

"delete obsolete" option .

- RMAN> configure retention policy [to ? | clear] ;

1. to recovery window of 7 days;

2. to redundancy 7;

3. to none; (disable retention policy, backups will never expire delete obsolete )

4. clear ; (default retention policy(redundancy 1) )

configure channel, parallelism, device

channel

- from 9i channel channel . ,

automatically channel name device type . , each backup and restore channel configuration . CF. ora_sbt_tape_n or ora_disk_n

- configure channel channel number channel channel .

- EX. RMAN> configure channel device type disk format/rate 1024K/maxpiecesize 10G/.. ( channel ) EX. RMAN> configure channel 1 device type disk format '/app/oracle/backup/rman/newsvc_rm_%U' ; ( channel )

Page 50: Oracle History #6

[email protected] - 50 -

Oracle9i New Features http://www.ggola.com

configure channel 2 device type disk connect 'newsvc' ; ( channel ) CF. channel device type remove "clear" option .

parallelism

- channel parallelism .

- EX. RMAN> configure device type disk/sbt parallelism 4 ;

- , parallelism backup . tape device

device 1 parallelism . (It may be limited by your Media

Management Library provider)

device type

- device type (automated backup device ) tape(sbt) disk default disk

default .

- EX. RMAN> configure default device type to sbt; (tape ) configure default device type to disk; (disk ) configure default device type to clear; (back to the default "disk")

configure backup copies, exclude

backup copies

- backup copies copy . (how many identical copies) datafile

archive copies range 1 to 4 . (default 1) device type disk or tape .

- EX. RMAN> configure datafile backup copies for device type disk to 3 ; configure archivelog backup copies for device type sbt to 2 ;

exclude

- exclude database backup tablespace .

1. read-only or offline tablespace . (system tablespace exclude )

Page 51: Oracle History #6

[email protected] - 51 -

Oracle9i New Features http://www.ggola.com

2. explicit backup exclusion override . (backup tablespace command ignore exclusion setting)

- EX. RMAN> configure exclude for tablespace rm_tbs ; (exclude tablespace rm_tbs) configure exclude for tablespace rm_tbs clear : (include tablespace rm_tbs)

configure snapshot and auxname, controlfile autobackup

snapshot and auxname

- from 9i set snapshot controlfile, set auxname configure command .

- EX. RMAN> configure snapshot controlfile name to '/app/oracle/backup/cfg/snapcf_c11.f'; configure auxname for datafile 3 to '/app/oracle/backup/rman/dbf1_2.dbf';

- snapshot controlfile rman's short-term use control file consistent view generation temporary backup control file . rman session point in time snapshot controlfile access

rman session snapshot controlfile .

controlfile

- controlfile autobackup on rman automatically backups up control file EX. RMAN> configure controlfile autobackup on/off ;

- automatic controlfile backup format "%F" error

. (default controlfile autobackup off )

- restore command . RMAN> configure controlfile autobackup format for device type disk to '/app/oracle/backup/rman/control/%F.cont'; RMAN> restore controlfile from autobackup;

- “%F” format c-IIIIIIIIII-YYYYMMDD-QQ : decimal format(for database identifier)-timestamp-hexadecimal number(for sequence, maximum FF(256))

Page 52: Oracle History #6

[email protected] - 52 -

Oracle9i New Features http://www.ggola.com

- rman controlfile autobackup .

1. rman prompt every backup or copy command

2. run block backup or copy command command backup copy command (followed by a command that is neither backup nor copy)

3. run block backup or copy command run block

backups

long term backups

- retention policy backup keep option .

- keep option backups retention policy recovery catalog . default nokeep , retention policy online backup nologs option .

- EX. RMAN> backup ... keep [until time 'date' | forever] [nologs|logs]

- forever recovery catalog . controlfile eventually age out . keep forever recovery catalog error signal .

mirrored backups

- "set backup copies" command configure backup copies .

- configure backup copies format

.

- EX. run { set backup copies 2 ; backup database format '/app/oracle/backup/rman/%U', '/app/oracle/backup2/rman/%U'; }

Page 53: Oracle History #6

[email protected] - 53 -

Oracle9i New Features http://www.ggola.com

- copies format 1:1 . , format format format

copies format .

- , copies 4 3 copy format 4 copy format .

backup file optimization

- read-only tablespace archive logs .

- backup backuped file header online file header same device type backup skip .

- , backup recovery window backup .

- EX. RMAN> configure backup optimization [on|off|clear];

1. backup force option optimization bypass .

2. optimization skip error signal return .

restartable backups

- backup db crash backup files backup

.

- not backed up [since time] option since time backup files backup .

- EX. RMAN> backup database not backed up since time 'sysdate -1'; CF. 'sysdate -1' current nls_date_format

. '2002/06/11 23:59:59'

archive log backup

- 8i archive log backup 9i datafile backup option backup

.

- plus archivelog option backup archive logs backup .

- EX. RMAN> backup datafile 3 plus archivelog;

Page 54: Oracle History #6

[email protected] - 54 -

Oracle9i New Features http://www.ggola.com

- disk tape media non-disk device backup plus archivelog option default . backup archivelog all command backup logs error signal return . ( backup archivelog all delete input command logs )

- plus archivelog .

1. backup all archive logs (not yet been backup up)

2. backup files

3. log switch

4. backup remaining logs

backupset backup

- backupset backup backuped files , location backup

.

- , features source data disk . destination .

- EX. RMAN> backup device type sbt backupset created before 'sysdate -10' delete input ;

- backup disk backup tape .

"delete input" option move operation .

restore file optimization and restartable restore

- restartable backup . restore file file header files restore .

- , restore force option file header state restore .

- restore fail . restore option .

- restore optimization datafile header check . , corrupted blocks datafile scan .

Page 55: Oracle History #6

[email protected] - 55 -

Oracle9i New Features http://www.ggola.com

recovery manager with enterprise manager interface

- oem upgraded rman gui .

- , oms(oracle management server) install .

rman reliability enhancements

archive log failover, automatic log switch

- rman multiple local archive log destination location archive log reading

automatically location switch .

- archive log destination reading error return .

- rman backup archive logs all disk locations delete . ( rman action delete all input option trigger )

- backup or copy command rman automatically current online log switch and archive .

backup piece failover

- multiple archive log destination . , backup set

.

- backup set backup backup piece corruption copy backup .

- backup set backup piece corruption error return

copy backup .

block media recovery(BMR)

- bmr datafile block block individual restore archive

.

- restore and recovery block . , rman

complete recovery .

- recovery(lowering the mean time to recover) small set of corrupt blocks .

Page 56: Oracle History #6

[email protected] - 56 -

Oracle9i New Features http://www.ggola.com

- data (online recovery recovery blocks inaccessible )

- bmr recovery rman individual data blocks restore oracle server process coordinate . (datafile restore )

- bmr oracle error block recovery . data losses or corrupted unclear file recovery

.

- redo record corrupted recovery block skip . (datafile recovery database recovery )

- rman corruptions detect .

bmr process

- blockrecover command .

- corrupted blocks backup read .

- recovery oracle session archive logs .

- EX. RMAN> blockrecover datafile 9 block 56;

- corrupted block bmr block . corrupted block oracle

server error message, alert.log, trace files, analyze, dbv, third-party media management .

extended use of bmr

- rman backup logical validation blocks view list .

v$backup_corruption, v$copy_corruption

- list corrupted blocks blockrecover .

EX. RMAN> blockrecover corruption list restore until time 'sysdate -7';

- bmr . RMAN> blockrecover datafile 2 block 12, 25 datafile 98 block 77; (

) blockrecover tablespace resume_test dba 4538903, 4578904

Page 57: Oracle History #6

[email protected] - 57 -

Oracle9i New Features http://www.ggola.com

restore until time 'sysdate -1'; (restore from specified time) blockrecover datafile 87 block 12, 14 datafile 97 block 4 restore until scn 19847; (restore from specified scn) blockrecover datafile 8 block 11, 12 datafile 104 block 45 restore until sequence 9802; (restore from specified log sequence)

enhanced recovery algorithm

- recovery trial recovery .

- corrupted block mark recovery block's inconsistency ignore . block inaccessible .

- media recovery of full database read-only or resetlogs database open .

- enhancements optimistic redo application algorithm . algorithm recovery

recovery any problem last applied changes undo recovered database inconsistency

.

trial recovery process (rman )

- recovery database physically consistent state .

- data block corrupt marking alert.log block

identify .

- database resetlogs open corrupted the block read-only mode open .

- data block corrupt mark up new recovery option . data block corrupt mark . SQL> recover database allow 1 corruption;

trial recovery description

- blocks recovery .

- blocks restore resetlogs open . , resetlogs open error

Page 58: Oracle History #6

[email protected] - 58 -

Oracle9i New Features http://www.ggola.com

redo logically consistent database .

- trial recovery in memory disk write recovery .

- alert.log .

- trial recovery . "test" option . SQL> recover database using backup controlfile test; SQL> recover tablespace tbs_resume test; SQL> recover database until cancel;

- trial recovery . ( . trial recover write to disk )

1. available buffers in memory

2. unrecoverable error

3. user cancel or recovery session interruption

4. next redo control file

5. all redo applied

others for rman

report obsolete

- retention policy backup copies report . 9i recovery window option .

- command datafiles, archive logs or file copies report . RMAN> report obsolete [redundancy (=) n | recovery window of n days] [datafile | tablespace | database (skip tablespace)];

- option configure retention policy . configure retention policy NONE setting option report obsolete command error return .

delete obsolete

- report obsolete .

Page 59: Oracle History #6

[email protected] - 59 -

Oracle9i New Features http://www.ggola.com

- report backup copies . RMAN> delete obsolete [redundancy (=) n | recovery window of n days];

report need backup

- . retention policy backup report . configure retention policy none error .

- RMAN> report need backup [incremental (=) n | days (=) n] [redundancy (=) n | recovery window of n days] [datafile | tablespace | database (skip tablespace)];

- 7 retention backup ? RMAN> report need backup recovery window of 7 days ;

- database complete recovery incremental 3 backup ? RMAN> report need backup incremental 3 database ;

command unification

- 4 command catalog maintenance from 9i command .

- list, crosscheck, delete expired, change

1. crosscheck and delete expired all object types .

2. crosscheck, delete and list change smaller object sets .

3. crosscheck copy status 'X' unavailable objects skip .

4. crosscheck delete uncatalog function remove .

5. delete list prompts . ( , noprompt prompt .

6. change syntax large object list support crosscheck/delete

.

7. crosscheck, delete, change like . (file name pattern)

Page 60: Oracle History #6

[email protected] - 60 -

Oracle9i New Features http://www.ggola.com

8. list crosscheck/delete expired .

list improvements

- list repository backup sets, copies display from 9i display by backup by file option output orientation .

- by backup : backup sets .

- by file : file name file backup sets backup copies .

- by backup option [summary, verbose] : summary file or backup set one-line summary

verbose backup set detail .

- RMAN> list backup|copy [of datafile|tablespace|database|conrolfile|spfile] [by backup (summary|verbose) | by file] ;

- list backup command of by backup + verbose default of option by file default .

- by option list backup . list copy . summary verbose option by

backup option .

- summary, verbose option by backup oracle manual summary

file summary by file , backup set summary by backup

. CF. .

show improvements

- configure command command list

- command list : retention policy, exclude, backup optimization, device type, default device type, controlfile autobackup, controlfile autobackup format, datafile backup copies, archivelog backup copies, device type to disk|sbt parallelism, default backup copies, maxsetsize, snapsize, channel, auxname

Page 61: Oracle History #6

[email protected] - 61 -

Oracle9i New Features http://www.ggola.com

crosscheck autolocate

- channel check . backup pieces recovery catalog or controlfile files check .

- backup piece channel operation channel object

operation device type last channel .

- check disk file header valid tape .

- to 8i backup sets, pieces, proxy copies from 9i data file copies, control file copies, archive logs

.

added enhancements for rman

- NEW : from 9i omf , oracle managed files multi block size

. rman backup new features one block size database

backup each block size backupsets automatically generation .

- CHANGE : to 8i rman default mode nocatalog nocatalog nocatalog . from 9i default nocatalog

mode . (nocatalog mode default . controlfile repository )

example for backup and recovery using rman

example

- rman

. backup and recovery .

process .

CF. oracle rman new features block recovery

.

Page 62: Oracle History #6

[email protected] - 62 -

Oracle9i New Features http://www.ggola.com

SQL> conn system/manager SQL> sho parameter log_archive_dest_1 NAME TYPE VALUE ------------------------------------ ---------- ------------------------------ log_archive_dest_1 string LOCATION=/app/oracle/oradata/N EWSVC/archive log_archive_dest_10 string SQL> sho parameter log_archive_start NAME TYPE VALUE ------------------------------------ ---------- ------------------------------ log_archive_start boolean TRUE SQL> select owner, segment_name from dba_segments 2 where tablespace_name = 'TBS_TEST2'; OWNER SEGMENT_NAME ----------------------------------- SCOTT SALE_PART SCOTT RESUMABLE_TEST_I_OBJECT_ID SQL> select file_name from dba_data_files where tablespace_name = 'TBS_TEST2'; FILE_NAME -------------------------------------------------------------------------------- /app/oracle/oradata/NEWSVC/expimp_test.dbf SQL> exit [NEWSVC]LIRACLE:/app/oracle/backup/rman> rman target / RMAN> show all ; using target database controlfile instead of recovery catalog RMAN configuration parameters are: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default CONFIGURE BACKUP OPTIMIZATION OFF; # default CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE MAXSETSIZE TO UNLIMITED; # default CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/app/oracle/product/9.2.0/dbs/snapcf_NEWSVC.f'; # default RMAN> configure channel device type disk format '/app/oracle/backup/rman/newsvc_%U.bak'; new RMAN configuration parameters: CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/app/oracle/backup/rman/newsvc_%U.bak'; new RMAN configuration parameters are successfully stored RMAN> configure snapshot controlfile name to '/app/oracle/backup/rman/snapcf_NEWSVC.f'; snapshot controlfile name set to: /app/oracle/backup/rman/snapcf_NEWSVC.f new RMAN configuration parameters are successfully stored

Page 63: Oracle History #6

[email protected] - 63 -

Oracle9i New Features http://www.ggola.com

RMAN> backup database; Starting backup at 16-SEP-03 allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=14 devtype=DISK channel ORA_DISK_1: starting full datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset including current controlfile in backupset input datafile fno=00001 name=/app/oracle/oradata/NEWSVC/systemNEWSVC01.dbf input datafile fno=00005 name=/app/oracle/oradata/NEWSVC/exampleNEWSVC01.dbf input datafile fno=00008 name=/app/oracle/oradata/NEWSVC/drsys01.dbf input datafile fno=00002 name=/app/oracle/oradata/NEWSVC/undo01NEWSVC01.dbf input datafile fno=00012 name=/app/oracle/oradata/NEWSVC/logtest.dbf input datafile fno=00003 name=/app/oracle/oradata/NEWSVC/usersNEWSVC01.dbf input datafile fno=00009 name=/app/oracle/oradata/NEWSVC/indx01.dbf input datafile fno=00006 name=/app/oracle/oradata/NEWSVC/odmNEWSVC01.dbf input datafile fno=00007 name=/app/oracle/oradata/NEWSVC/cwmlite01.dbf input datafile fno=00004 name=/app/oracle/oradata/NEWSVC/toolsNEWSVC01.dbf input datafile fno=00010 name=/app/oracle/oradata/NEWSVC/resume.dbf input datafile fno=00011 name=/app/oracle/oradata/NEWSVC/expimp_test.dbf channel ORA_DISK_1: starting piece 1 at 16-SEP-03 channel ORA_DISK_1: finished piece 1 at 16-SEP-03 piece handle=/app/oracle/backup/rman/newsvc_01f1fveo_1_1.bak comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:03:58 Finished backup at 16-SEP-03 RMAN> exit [NEWSVC]LIRACLE:/app/oracle/backup/rman> sqlplus '/as sysdba' SQL> shutdown immediate SQL> exit [NEWSVC]LIRACLE:/app/oracle/backup/rman> mv /app/oracle/oradata/NEWSVC/expimp_test.dbf /app/oracle/oradata/NEWSVC/expimp_test.dbf.old [NEWSVC]LIRACLE:/app/oracle/backup/rman> sqlplus '/as sysdba' SQL> startup ORACLE instance started. Database mounted. ORA-01157: cannot identify/lock data file 11 - see DBWR trace file ORA-01110: data file 11: '/app/oracle/oradata/NEWSVC/expimp_test.dbf' SQL> exit [NEWSVC]LIRACLE:/app/oracle/backup/rman> rman target / RMAN> restore datafile '/app/oracle/oradata/NEWSVC/expimp_test.dbf'; Starting restore at 16-SEP-03 using target database controlfile instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=12 devtype=DISK channel ORA_DISK_1: starting datafile backupset restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set restoring datafile 00011 to /app/oracle/oradata/NEWSVC/expimp_test.dbf channel ORA_DISK_1: restored backup piece 1 piece handle=/app/oracle/backup/rman/newsvc_01f1fveo_1_1.bak tag=TAG20030916T145312 params=NULL channel ORA_DISK_1: restore complete Finished restore at 16-SEP-03

Page 64: Oracle History #6

[email protected] - 64 -

Oracle9i New Features http://www.ggola.com

RMAN> exit [NEWSVC]LIRACLE:/app/oracle/backup/rman> sqlplus '/as sysdba' SQL> recover database test ; ORA-10574: Test recovery did not corrupt any data block ORA-10573: Test recovery tested redo from change 1179619 to 1179767 ORA-10572: Test recovery canceled due to errors ORA-10585: Test recovery can not apply redo that may modify control file SQL> exit [NEWSVC]LIRACLE:/app/oracle/backup/rman> rman target / RMAN> recover datafile '/app/oracle/oradata/NEWSVC/expimp_test.dbf' ; Starting recover at 16-SEP-03 using target database controlfile instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=10 devtype=DISK starting media recovery media recovery complete Finished recover at 16-SEP-03 RMAN> alter database open; database opened RMAN> exit [NEWSVC]LIRACLE:/app/oracle/backup/rman> sqlplus system/manager SQL> select owner, segment_name from dba_segments 2 where tablespace_name = 'TBS_TEST2'; OWNER SEGMENT_NAME ----------------------------------- SCOTT SALE_PART SCOTT RESUMABLE_TEST_I_OBJECT_ID

Page 65: Oracle History #6

[email protected] - 65 -

Oracle9i New Features http://www.ggola.com

5. Data Guard

overview

data guard standby database . from 9i

site production database standby database loosely-connected system

.

data guard

- easy configuration gui(using oem) control .

gui mode cli(command line interface) mode dgmgrl .

- another site switchover . (production standby )

- , unplanned failures another site failover . (same to 8i)

- synchronous log transport no data loss .

- corruption data guard . ( redo log delay production standby )

CF. production database primary database .

architecture

primary database production database standby database standby database primary database .

components

- standby database : primary database database . from 9i concept

.

1. physical standby database : . , archived redo logs . disaster recovery backup .

Page 66: Oracle History #6

[email protected] - 66 -

Oracle9i New Features http://www.ggola.com

2. logical standby database : redo logs sql standby database

. physical organization and structure of data primary . CF. disaster recovery business

reporting system .

- log transport services : service primary database archived redo logs standby database transfer .

- network configuration : primary database oracle net standby database connect .

- log apply services : service standby database archived redo logs .

- data guard broker : broker dmon process process sites

8i manual data guard broker . dmon processs .

initialization parameter : DRS_START=TRUE

CF. data guard manager gui mode broker oem oracle management server sites . cli mode

site access standby standby

connection .

data guard broker

- component data guard broker data guard monitoring, control, automation . sites

broker broker framework . (broker interface . gui or cli

, data guard manager or dgmgrl)

- dgmgrl v$view role change initiation broker configure file control .

- data guard manager monitoring wizard setup and configuration . single point of failure events creation polling intervals control .

no data loss

- primary standby standby primary .

primary data standby

Page 67: Oracle History #6

[email protected] - 67 -

Oracle9i New Features http://www.ggola.com

apply .

- standby database data failover data loss or

divergence .

- from 9i no data loss minimal data loss

. ( primary database performance )

- no data loss log transport service primary database redo information standby database commit no data loss .

- no data divergence no data loss standby database connectivity primary database . , primary database

halt .

data availability mode

data availability mode : guaranteed, instant, rapid and delayed

- guaranteed protection : no data divergence redo records standby lgwr .

primary database standby database unavailable primary database halt .

- instant protection : no data loss redo records standby lgwr .

- rapid protection : primary commit standby redo records standby

lgwr slave .

- delayed protection : to 8i .

9i R2 data availability mode ( 9i )

- maximum protection : standby database primary database redo information available transaction commit primary database processing stop no data loss . ( manual standby database

)

Page 68: Oracle History #6

[email protected] - 68 -

Oracle9i New Features http://www.ggola.com

“ transactions are not committed on the primary database unless the redo data is available on at least one standby database configured in this mode. If the last standby database configured in this mode becomes unavailable, processing stops on the primary database.”

- maximum availability : no data loss standby database unavailable processing

resync . failover issue some

data loss .

- maximum performance : standby database redo data asynchronously shipping .

primary database .

CF. mode manual Release 2 data guard .

data availability mode

- redo log writing (LGWR|ARCH) : log ? (from primary) log_archive_dest_n = 'service=stdydb LGWR'

- network transmission mode (SYNC|ASYNC[=blocks]) : lgwr redo log archive standby redo log synchronously asynchronously

. async mode blocks 0 ~ 2048 sga network buffer size

block count . (from primary) CF. network larger block counts . log_archive_dest_n = 'service=stdydb LGWR SYNC'

- method of writing archive logs to disk ([NO]AFFIRM) : log archiving disk write I/O operations synchronously

asynchronously . no data loss mode "SYNC AFFIRM" . (default AFFIRM) (from primary) log_archive_dest_n = 'service=stdydb LGWR SYNC AFFIRM'

- redo log reception option : primary database redo logs standby database rfs(remote file server process)

standby redo logs archived redo logs

. (from standby) standby redo logs or normal archived redo logs

- failure resolution policy ([UN]PROTECTED) : mount . (from standby) SQL> alter database set standby database protected;

Page 69: Oracle History #6

[email protected] - 69 -

Oracle9i New Features http://www.ggola.com

CF. protected primary database standby database connectivity primary database shutdown .(no data loss and divergence)

guaranteed protection "LGWR SYNC" . (default AFFIRM ) , data

divergence . SQL> alter database set standby database unprotected; CF. ? SQL> select standby_mode from v$database;

data availability mode matrix

- 9iR2 guaranteed maximum protection, instant maximum availability, rapid + delayed maximum performance . logical standby database 9iR2

.

- maximum protection physical standby maximum availability standby redo logs

physical standby . maximum performance physical and logical standby

lgwr physical standby standby redo logs .

standby redo log

new redo log

- from 9i data guard standby redo log new concept 'add standby logfile' . ,

logfile type 'STANDBY' . SQL> alter database add standby logfile ('/app/oracle/oradata/NEWSVC/std_log01a.log', '/app/oracle/oradata/NEWSVC/std_log01b') size 8M; SQL> select * from v$logfile where type = 'STANDBY'; SQL> select * from v$standby_log;

- physical standby role switchover oracle recommend

primary database standy redo logs .

mode log writing network

transmission disk write redo log reception failure resolution

guaranteed LGWR SYNC AFFIRM standby redo protected

instant LGWR SYNC AFFIRM standby redo unprotected

rapid LGWR ASYNC NOAFFIRM standby redo unprotected

delayed ARCH ASYNC NOAFFIRM archived redo unprotected

Page 70: Oracle History #6

[email protected] - 70 -

Oracle9i New Features http://www.ggola.com

primary standby switch standby redo log

. , standby role .

- no data loss disaster recovery (9iR2 maximum protection or maximum availability) physical standby database standby redo log

configuration .

- standby archival operation standby database archivelog mode archiver process(arch) .

- archiver process redo data apply archived . , primary database log switch lgwr redo data standby database standby database log switch trigger . standby database rfs redo data standy redo log log switch

archiver process standby redo log archive . log apply service archived redo data archiver process

.

- standby redo log groups primary database 1 groups size rfs

process trace file alert.log . , database limit (create database ) maxlogfiles, maxlogmembers, log_files . CF. log_files

. logfile .

- manual standby redo log size exactly primary online redo logs .

online redo log group log size primary database 1

standby redo logs log size .

- primary database redo log group standby redo log groups (primary database redo log groups ) no data loss mode primary database shutdown .

- primary database redo log group standby . , log group member standby redo log group

.

Page 71: Oracle History #6

[email protected] - 71 -

Oracle9i New Features http://www.ggola.com

log apply services for physical standby database

managed recovery process(mrp) for physical standby database

- physical standby database redo log mrp managed recovery

log apply services archived redo logs .

- read-only mode open apply . managed recovery log

apply mount . CF. log process

instance .

log apply process of mrp

1. SQL> startup nomount;

2. SQL> alter database mount standby database; log apply services foreground background .

3. (1) foreground session SQL> alter database recover managed standby database;

this will not return the command prompt. (2) background session SQL> alter database recover managed standby database disconnect;

this will start a detached server process and return the command prompt. , process(mrp) log apply service ( background )

command prompt return .

... disconnect "from session" option semantic clarity .

(3) cancel background session , detached log apply service start session .

SQL> alter database recover managed standby database cancel; (4) finish option finish option all available archived redo logs

available standby redo logs . , failover operation .

primary database failure . finish option

standby database primary database open .

SQL> alter database recover managed standby database finish; (5) parallel option

Page 72: Oracle History #6

[email protected] - 72 -

Oracle9i New Features http://www.ggola.com

primary database standby database log apply . parallel

performance parallel option . MRP0 process or foreground session log read dispatch parallel option recovery server processes redo log datafiles . SQL> alter database recover managed standby database parallel 3; CF. feature datafiles disks recover .

4. register logfile log copy

log . SQL> alter database register standby logfile '/app/oracle/backup/stdby/*.log'; CF. logical standby database 'register standby' 'register logical' .

- log apply services monitor query . SQL> select process, status, thread#, sequence#, block#, blocks from v$managed_standby;

- standby database activity monitor v$archive_dest_status .

log apply services for logical standby database

logical standby process(lsp) for logical standby database

- logical standby database log apply service redo log sql convert standby database .

- logical standby database open . , logical standby database reporting,

summation, queries . (primary database redo stream sql

)

- rfs lsp file lsp archived redo logs sql

process .

log apply process of lsp

1. start and stop logical standby database SQL> alter database start logical standby apply; SQL> alter database stop logical standby apply;

Page 73: Oracle History #6

[email protected] - 73 -

Oracle9i New Features http://www.ggola.com

2. redo log read apply log switch query archived redo log apply

operations monitor . SQL> select type, high_scn, status from v$logstdby;

3. query lsp sql .

SQL> select applied_scn, newest_scn from dba_logstdby_progress;

available redo log apply .

switchover for physical standby database

switchover operation primary database standby database role change planned outage . (switch database

switchover )

upgrade service standby database recreation .

switchover condition

- primary database graceful shutdown (normal or transactional or immediate )

- available archive logs (all archive logs standby )

- available online logs of primary database

CF. , rac node switchover node down .

switchover step

1. primary and standby database read or update : exclusive access primary and standby database session . (gracefule shutdown )

2. prepare switchover and change role on primary SQL> select switchover_status from v$database; "TO STANDBY" . SQL> alter database commit to switchover to physical standby;

3. shutdown and startup nomount former primary database SQL> shutdown immediate; SQL> startup nomount;

Page 74: Oracle History #6

[email protected] - 74 -

Oracle9i New Features http://www.ggola.com

4. mount standby database on former primary SQL> alter database mount standby database;

5. check and switch to primary on former standby SQL> select switchover_status from v$database; "SWITCHOVER PENDING" . SQL> alter database commit to switchover to physical primary; CF. switchover operation ( command

) (former) standby database recovery managed mode . manually recovery managed mode . CF. "TO PRIMARY" switchover operation "SWITCHOVER PENDING"

recovery managed mode . manual recovery managed mode

open for read-only access switchover operation "TO PRIMARY"

"SWITCHOVER PENDING" standby role primary role

.

6. shutdown and startup new primary database SQL> shutdown; SQL> startup;

7. put in managed recovery mode to new standby database SQL> alter database recovery managed standby database disconnect; CF. new primary database archiving logs start

. SQL> alter system archive log start; SQL> alter system switch logfile;

switchover for logical standby database

switchover step

1. change role on primary SQL> alter database commit to switchover to logical standby; CF. primary database logical standby database switchover database restart .

2. change log archive destination on former primary : standby remote destination archiving disable .

SQL> alter system set log_archive_dest_state_2=defer scope=both; CF. defer : future session

. scope : restart

Page 75: Oracle History #6

[email protected] - 75 -

Oracle9i New Features http://www.ggola.com

. both : spfile memory .

3. switchover to primary on standby SQL> alter database commit to switchover to primary;

4. enabling archiving redo logs on former standby SQL> alter system set log_archive_dest_state_2=enable scope=both;

5. create database link to the new primary database on all logical standby database database link create database link data guard . SQL> exec dbms_logstdby.guard_bypass_on; SQL> create database link X_STD1 connect to user identified by pwd using 'X_STD1'; SQL> exec dbms_logstdby.guard_bypass_off; CF. database link user select_datalog_role grant . SQL> select * from dba_logstdby_parameters@X_STD1;

6. sql apply on all logical standby database SQL> alter database start logical apply new primary X_STD1;

7. on new primary database SQL> alter system archive log start; SQL> alter system switch logfile;

failover for physical standby database

failover original primary database data guard configuration standby

. failover logical, physical standby databases shutdown and

restart .

failover step

1. target standby database archive gap SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap; CF. low and high gap logs primary or another standby copy register . SQL> alter database register standby logfile '/app/oracle/backup/stdby/*.log';

2. 1 missing archived redo logs copy and register .

SQL> select unque thread# thread, max(sequence#) over

Page 76: Oracle History #6

[email protected] - 76 -

Oracle9i New Features http://www.ggola.com

(partition by thread#) last from v$archive_log; CF. thread last number archive log

. SQL> alter database register standby logfile '/app/oracle/backup/stdby/*.arc';

3. 1, 2 1 , archive gap 1, 2 .

4. initiate failover operation : standby redo logs partial archived redo logs manually SQL> alter database recover managed standby database finish [skip standby logfile];

5. change role to primary SQL> alter database commit to switchover to primary;

6. new primary database archived log destinations for other standby database define failover archived redo logs standby database copy and register . ( former primary database standby database

standby database ) SQL> alter database register logfile '/app/oracle/backup/stdby/*.arc';

7. shutdown and restart new primary database SQL> shutdown immediate; SQL> startup;

failover for logical standby database

failover original primary database physical standby databases data guard configuration

standby . failover logical standby databases shutdown and restart .

failover step

1. logical standby database archived redo logs check primary or other standby database copy register . SQL> select thread#, sequence#, file_name from dba_logstdby_log l where next_change# not in (select first_change# from dba_logstdby_log where l.thread# = thread#) order by thread#, sequence#; CF. gap query thread

Page 77: Oracle History #6

[email protected] - 77 -

Oracle9i New Features http://www.ggola.com

row return . thread 8 12 sequence +1 archive register . (first_change next_change gap 1 ) SQL> alter database register logical logfile '/app/oracle/backup/stdby/arc_34239_9.log'; SQL> alter database register logical logfile '/app/oracle/backup/stdby/arc_34239_13.log';

2. 1 .

3. primary online redo logs available copy register . log register ORA-01289 message . ( ) SQL> alter database register logical logfile '/app/oracle/backup/stdby/redo_newsvc_01a.log';

4. primary logical standby database partially filled archived redo logs

. file select archived redo log +1

log . SQL> select thread#, sequence#, file_name from dba_logstdby_log order by thread#, sequence#; CF. last registered archived redo log sequence 13 SQL> alter database register logical logfile '/app/oracle/backup/stdby/arc_34239_14.log';

5. apply delay interval turn off log apply service log apply service restart .

SQL> alter database stop logical standby apply; SQL> exec dbms_logstdby.apply_unset('APPLY_DELAY'); SQL> alter database start logical standby apply;

6. log apply . SQL> select applied_scn, newest_scn from dba_logstdby_progress; CF. scn database primary database .

7. log apply standby database activate . SQL> alter database stop logical standby apply; SQL> alter database activate logical standby database;

8. logical standby databases new primary database data guard bypass link .

SQL> exec dbms_logstdby.guard_bypass_on; SQL> create database link LOGSTD1 connect to user identified by pwd using 'LOGSTD1'; SQL> exec dbms_logstdby.guard_bypass_off; CF. database link user select_datalog_role

Page 78: Oracle History #6

[email protected] - 78 -

Oracle9i New Features http://www.ggola.com

grant . SQL> select * from dba_logstdby_parameters@LOGTD1;

9. archiving redo logs remote destination enable on new primary database SQL> alter system set log_archive_dest_state_2=enable scope=both;

10. all logical standby database start log apply service to new primary database SQL> alter database start logical standby apply new primary PRIDB1; CF. new primary database PRIDB1

ORA-16109 error return standby database server standby database

data guard configuration .

forced failover

- standby database activate failover standby primary database .

SQL> alter database activate [physical|logical] standby database [skip [standby logfile]];

- physical default skip option physical . skip option (forced failover)

standby redo logs (finish option recover logs) activate .

CF. oracle recommend finish option failover operation . forced failover

standby databases activated primary database standby database .

archive gaps

data guard configuration primary and standby databases archive redo log gap detection resolve .

primary database standby databases serially archived redo logs sequence gap

. primary database polling

heartbeat .

Page 79: Oracle History #6

[email protected] - 79 -

Oracle9i New Features http://www.ggola.com

temporary network problem standby database activate .

v$archive_gap of physical standby database

- physical standby database v$archive_gap .

- standby database SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap; CF. thread low high gap

. gap primary database v$archived_log

. ( thread# 1 low seq 4, high seq 8 standby archive dest 3 )

- primary database SQL> select name from v$archived_log where thread# = 1 and dest_id = 3 and sequence# between 4 and 8; CF. sequence 4, 5, 6, 7, 8 , archive gap

log file name return .

- ? file copy register . SQL> alter database register logfile '/app/oracle/backup/th1/arch/arch_4.arc'; SQL> alter database register logfile '/app/oracle/backup/th1/arch/arch_5.arc'; SQL> alter database register logfile '/app/oracle/backup/th1/arch/arch_6.arc'; SQL> alter database register logfile '/app/oracle/backup/th1/arch/arch_7.arc'; SQL> alter database register logfile '/app/oracle/backup/th1/arch/arch_8.arc';

dba_logstdby_log of logical standby database

- logical standby database dba_logstdby_log .

- standby database SQL> select thread#, sequence#, file_name from dba_logstdby_log l where next_change# not in (select first_change# from dba_logstdby_log where l.thread# = thread#) order by thread#, sequence#; CF. thread row return

missing logs copy

Page 80: Oracle History #6

[email protected] - 80 -

Oracle9i New Features http://www.ggola.com

register . log register log apply service restart . SQL> alter database register logical logfile '/app/oracle/backup/stdby/arc_34239_13.log';

how resolve archive gaps automatically

- archive gap management configuration . physical

standby database initial parameter gap management .

1. FAL_CLIENT=net_service_name fal server connect standby database network service name (using tns service entry)

background process rfs archive gap detect archived redo logs request .

2. FAL_SERVER=net_service_name standby database connect fal server network service name (using tns service entry)

background process arch fal client archive log fetch .

CF. fal server process fal client incoming request primary database standby

database .

- logical standby database automatic gap recovery heartbeat mechanism . ,

primary database failure automatic gap recovery .

standby file management

file add or drop on primary database

- primary database , file add or drop standby database initial

parameter setting primary database standby database . ( , log apply ) EX. standby_file_management=auto

- auto standby database operation .

alter database rename, add|drop logfile, add|drop logfile member, create datafile as CF. omf(Oracle Management File : )

Page 81: Oracle History #6

[email protected] - 81 -

Oracle9i New Features http://www.ggola.com

standby database automatic file delete . omf os datafile

delete omf file new option file delete .

filename convert

- primary database standby database (management parameter auto

) file name convert primary database convert . ( file name

convert , directory path )

EX. db_file_name_convert="/app/oracle/oradata/newsvc/", "/app/oracle/oradata/newsvc/std/")

- value first string primary database, second string standby database . value pair . CF. , multiple pairs . ("," pair primary, standby value )

lag applying logs

lag applying logs to standby database

- archived redo logs apply delay dba feature .

- log_archive_dest_n='service=X_STD1 delay 30' primary database delay

time (in minutes) standby database redo apply operation .

after log transmittal : log log apply interval .

- recover managed standby database nodelay option finish option delay interval override redo logs apply .

- ? primary database data delay interval standby database

flashback data .

Page 82: Oracle History #6

[email protected] - 82 -

Oracle9i New Features http://www.ggola.com

other enhancements

new features

- database mode open mount switch current redo log archiving . SQL> alter system archive log current noswitch;

, open mode instance automatically shutdown next startup log switch .

- database mount scn number archive .

SQL> alter system archive log changes 948138;

- backup control file online redo log archive .

SQL> alter system archive logfile '/app/oracle/oradata/newsvc/redo/log_newsvc01a.log' using backup controlfile;

- remote archive enable parameter data guard from archived online redo logs to standby database primary database true

standby database redo logs primary database standby database true .

FALSE . EX. remote_archive_enable=true|false

a number of archive destination count

- to 8i archive destination 5 from 9i 10 . destination log transport properties log_archive_dest_n .

v$archive_dest_status .

EX. log_archive_dest_n = alternate=|max_failure=|quota_size=|dependency=

1. alternate : destination archive destination . , reopen=0

or max_failure > 0 or failure count .

EX. log_archive_dest_3 = alternate=log_archive_dest_5 destination 3 destination 5 .

2. max_failure : maximum reopen failure count . reopen attributes reopen

.

Page 83: Oracle History #6

[email protected] - 83 -

Oracle9i New Features http://www.ggola.com

EX. log_archive_dest_3 = reopen=10, max_failure=20, alternate=log_archive_dest_5

destination 3 10 20 destination 5 .

3. quota_size : 512kb block local destination archive maximum number of blocks

. EX. log_archive_dest_3 = quota_size=10000, alternate=log_archive_dest_5

destination 3 local archiving 5G destination 5 .

quota_size k, m, g , , 10 .

4. dependency : remote database archiving redo logs another destination archival operation

.

example

1. primary, standby database node standby database primary database logs

archiving .

log_archive_dest_1='location=/app/oracle/oradata/newsvc/redo/ mandatory' log_archive_dest_state_1=enable log_archive_dest_2='service=X_STD1 dependency=log_archive_dest_1 optional' log_archive_dest_state_2=enable

destination 2 destination 1 dependent .

2. standby database remote node standby database archiving

. log_archive_dest_1='location=/app/oracle/oradata/newsvc/redo/ mandatory' log_archive_dest_state_1=enable log_archive_dest_2='service=X_STD1 optional' log_archive_dest_state_2=enable log_archive_dest_3='service=X_STD2 dependency=log_archive_dest_2 optional' log_archive_dest_state_3=enable

destination 3 destination 2 dependent . configuration . (1) physical, logical standby database node . (2) primary, standby database node archived redo logs standby database implicitly access . (3) OS network file system remote standby

Page 84: Oracle History #6

[email protected] - 84 -

Oracle9i New Features http://www.ggola.com

database access . (4) mirrored disk access

. (5) remote node multiple standby database

common archived redo logs share .

Page 85: Oracle History #6

[email protected] - 85 -

Oracle9i New Features http://www.ggola.com

6. Database Resource Manager

resource manager

8i resource

. 8i CPU parallel query . 9i active session pool

undo .

active session pool

- dba resource consumer group users concurrent active sessions .

- . 8i user resource consumer group plan

resource limit concurrent user resource

performance . resource consumer group active session

.

- maximum number of active sessions active session pool .

mechanism

- job operation active session consumer group pool size .

- job request queue session

.

- active session pool queue consumer group . queue view view

. EX. v$session.current_queue_duration : session queuing

. (0 not queued) v$rsrc_consumer_group.queue_length : consumer group queued sessions CF. , parallel slaves session

parallel operation session .

Page 86: Oracle History #6

[email protected] - 86 -

Oracle9i New Features http://www.ggola.com

parameter

- initial parameter pool parameter . 8i cpu_p1, parallel_degree_limit_p1 level 1 cpu, parallel resource 9i active session active_sess_pool_p1, queueing_p1 . EX. active_sess_pool_p1=1000, queueing_p1=10000

- active session active_sess_pool default 1000000 waiting job abort queue

waiting time (in seconds) queuing default 1000000 .

control estimated long running session

- from 9i database resource manager operation job execution time operation .

- job request operation

job resource transaction . EX. max_estimated_exec_time=10000 : default 1000000 . CF. , estimation cost based optimizer statistics objects optimizer statistics gathering .

consumer group changing automatically

- to 8i consumer group change . from 9i

consumer group . v$rsrc_consumer_group

. EX. switch_group=name, switch_time=10000, switch_estimate=true

switch_group switch group default null .

switch_time active session switch_group consumer group change . switch_time default 1000000 . changed group idle original group . (long running operation aborting )

- switch_estimate true setting resource manager operation operation switch group . false operation

Page 87: Oracle History #6

[email protected] - 87 -

Oracle9i New Features http://www.ggola.com

switch group . default false .

undo quota

- undo_plan new plan directive consumer group users rollback

.

- consumer group rollback quota dml

dml rollback . error return .

EX. undo_pool=10000 undo_pool size kbytes update

. default 1000000 EX. dbms_resource_manager.update_plan_directive(plan => 'plan_name', group_or_subplan => 'consumer_group', new_undo_pool => '10000');

CF. automatic undo management rollback segment management ,

undo type . , select .

- undo monitoring . EX. v$rsrc_consumer_group.current_undo_consumption

consumer group undo monitor .

- view column undo size consumer group .

monitor

dictionary views

- view column resource manager monitor . dba_rsrc_plans queueing_mth, active_sess_target_mth column .

- queueing_mth queuing FIFO . active_sess_target_mth active session pool

.

- method new release

. 9i

Page 88: Oracle History #6

[email protected] - 88 -

Oracle9i New Features http://www.ggola.com

R2 cpu_method cpu round-robin .

- new parameters default 1 . 9i R2 default unlimited

. (unlimited 9i R2 view dba_rsrc_plan_directives null

)

oracle basic plans

new plan and consumer group

- oracle plans consumer groups plans sys_group, other_groups, low_group

. groups system_plan 8i .

- sys_group sys, system user initial consumer group other_groups consumer group

default . lower_group cpu resource group .

- , group cpu sys_group level 1 cpu 100% other_groups level

2 cpu 100% lowr_group level 3 cpu 100% group . groups dba

update or delete . CF. other_groups plan ( , system_plan ) default delete

.

- new oracle supplied plans internal_quiesce, internal_plan plan .

- SQL> conn system/manager SQL> select plan, group_or_subplan, type from dba_rsrc_plan_directives ; PLAN GROUP_OR_SUBPLAN TYPE ------------------------------ ------------------------------ -------------- SYSTEM_PLAN SYS_GROUP CONSUMER_GROUP SYSTEM_PLAN OTHER_GROUPS CONSUMER_GROUP SYSTEM_PLAN LOW_GROUP CONSUMER_GROUP INTERNAL_QUIESCE SYS_GROUP CONSUMER_GROUP INTERNAL_QUIESCE OTHER_GROUPS CONSUMER_GROUP INTERNAL_PLAN OTHER_GROUPS CONSUMER_GROUP

- internal_plan test internal_quiesce database mode quiesce state mode .

Page 89: Oracle History #6

[email protected] - 89 -

Oracle9i New Features http://www.ggola.com

- quiesce state database dba .

database shutdown restricted mode open . , database restart .

example

- 8i resource plan scenario .

- system oltp dw plan .

group cpu parallel pool queue switching

group

switching

time estimate undo max exec time

OLTP CPU=70%(L1) parallelism = 0 100 10 DW 10 TRUE 1024K

DW CPU=40%(L2) parallelism = 18 5 60 4096000K 18000

SQL> conn system/manager SQL> exec dbms_resource_manager.create_pending_area ; SQL> exec dbms_resource_manager.create_plan('daytime', 'oltp from 09 to 17:30'); SQL> exec dbms_resource_manager.create_consumer_group('oltp', 'online job for daytime service'); SQL> exec dbms_resource_manager.create_consumer_group('dw', 'dw job for nighttime service'); SQL> exec dbms_resource_manager.create_plan_directive('daytime', 'oltp', 'rule for oltp', - > cpu_p1=>70, parallel_degree_limit_p1 => 0, active_sess_pool_p1 => 100, queueing_p1 => 10, - > switch_group => 'dw', switch_time => 10, switch_estimate => true, undo_pool => 1024); SQL> exec dbms_resource_manager.create_plan_directive('daytime', 'dw', 'rule for dw', - > cpu_p2 => 40, parallel_degree_limit_p1 => 18, active_sess_pool_p1 => 5, queueing_p1 => 60, - > max_est_exec_time => 18000, undo_pool => 4096000); SQL> exec dbms_resource_manager.create_plan_directive('daytime', 'other_groups', - > 'other groups for daytime users', cpu_p3 => 80, parallel_degree_limit_p1 => 0);

other groups plan default . ( ) SQL> exec dbms_resource_manager.validate_pending_area ; SQL> exec dbms_resource_manager.submit_pending_area ; SQL> select plan, group_or_subplan, type from dba_rsrc_plan_directives ; PLAN GROUP_OR_SUBPLAN TYPE ------------------------------ ------------------------------ -------------- SYSTEM_PLAN SYS_GROUP CONSUMER_GROUP SYSTEM_PLAN OTHER_GROUPS CONSUMER_GROUP SYSTEM_PLAN LOW_GROUP CONSUMER_GROUP INTERNAL_QUIESCE SYS_GROUP CONSUMER_GROUP INTERNAL_QUIESCE OTHER_GROUPS CONSUMER_GROUP INTERNAL_PLAN OTHER_GROUPS CONSUMER_GROUP DAYTIME OLTP CONSUMER_GROUP DAYTIME DW CONSUMER_GROUP DAYTIME OTHER_GROUPS CONSUMER_GROUP

Page 90: Oracle History #6

[email protected] - 90 -

Oracle9i New Features http://www.ggola.com

- plans groups . group plan other

groups plan . user group user group .

, session active group . ( oracle 8i new features

)

Page 91: Oracle History #6

[email protected] - 91 -

Oracle9i New Features http://www.ggola.com

7. Online Operation

extended index rebuild

index rebuild

- 8i index rebuild limit . index type index rebuild .

1. reverse key index

2. function based index

3. key compressed index on general table

4. key compressed secondary index on iot

- still limited in the following situation

1. parallel dml during online index rebuilding

2. primary key index rebuilding online on iot (iot primary key index secondary index table

index table coalesce command coalesce online option

default . example

)

3. bitmap or clister index rebuilding online

4. partitioned index rebuilding as a whole ( partition index )

- rebuild mechanism during sql executing

1. base table index tablespace temporary index organized journal table

.

2. user select old index .

3. user old index data journal table .

4. rebuild operation journal table merge .

5. operation 20 rows commit .

Page 92: Oracle History #6

[email protected] - 92 -

Oracle9i New Features http://www.ggola.com

example

- new features .

SQL> conn scott/tiger SQL> alter table emp add salary number; SQL> update emp set salary = 150000 where emp_name = 'JANG'; SQL> update emp set salary = 180000 where emp_name = 'KIM'; SQL> update emp set salary = 210000 where emp_name = 'LEE'; SQL> commit; SQL> select * from emp ; EMP_ID EMP_NAME DEPT_ID GRP_POLICY SALARY ---------- ---------- ---------- ---------- ---------- A1998001 KIM SAL01 BASIC_GRP 180000 B2002003 JANG SYS01 SYSTEM_GRP 150000 C2001003 LEE MAR01 BASIC_GRP 210000 SQL> create index ik_empid_rvs on emp(emp_id) reverse; SQL> alter index ik_empid_rvs rebuild online; SQL> alter index ik_empid_rvs rebuild compute statistics online ;

8i test general index compute statistics online option error return . SQL> create index ik_ename_sal_fnc on emp(emp_name desc, (salary / 1000000)*100); SQL> alter index ik_ename_sal_fnc rebuild online; SQL> create index ik_salary_cmp on emp(salary) compress 1; SQL> alter index ik_salary_cmp rebuild online; SQL> create bitmap index ik_deptid_btm on emp(dept_id); SQL> alter index ik_deptid_btm rebuild online; alter index ik_deptid_btm rebuild online * ERROR at line 1: ORA-08108: may not build or rebuild this type of index online

bitmap index online rebuild . SQL> create table emp_iot (emp_id primary key, emp_name, dept_id, grp_policy, salary) 2 organization index as select * from emp; SQL> select index_name from user_indexes where table_name = 'EMP_IOT'; INDEX_NAME ------------------------------ SYS_IOT_TOP_28594 SQL> alter index SYS_IOT_TOP_28594 rename to pk_emp_id_iot ; SQL> create index ik_salary_iot_2nd on emp_iot(salary); SQL> create index ik_deptid_iot_2nd on emp_iot(dept_id) compress 1; SQL> select index_name from user_indexes where table_name = 'EMP_IOT'; INDEX_NAME ------------------------------ IK_DEPTID_IOT_2ND IK_SALARY_IOT_2ND PK_EMP_ID_IOT

Page 93: Oracle History #6

[email protected] - 93 -

Oracle9i New Features http://www.ggola.com

SQL> alter index ik_salary_iot_2nd rebuild online; Index altered. SQL> alter index ik_deptid_iot_2nd rebuild online; Index altered. SQL> alter index pk_emp_id_iot rebuild online; alter index pk_emp_id_iot rebuild online * ERROR at line 1: ORA-28650: Primary index on an IOT cannot be rebuilt

iot pk online rebuild . secondary index . SQL> select name, column_name from user_part_key_columns; NAME COLUMN_NAME -------------------- -------------------- SALE_PART ADDR SQL> desc sale_part Name Null? Type ----------------------------------------- -------- ---------------------------- ID NUMBER NAME VARCHAR2(30) ADDR VARCHAR2(2) AMOUNT NUMBER HIREDATA DATE SQL> create index ik_addr_lcl_prf on sale_part(addr) local; SQL> create index ik_id_lcl on sale_part(id) local; SQL> create index ik_amount_glb on sale_part(amount) 2 global partition by range (amount) 3 (partition p1 values less than (201), 4 partition p2 values less than (maxvalue)); SQL> create index ik_name_nm on sale_part(name); SQL> select index_name, partitioned from user_indexes 2 where table_name = 'SALE_PART'; INDEX_NAME PAR ------------------------------ --- IK_ADDR_LCL_PRF YES IK_AMOUNT_GLB YES IK_ID_LCL YES IK_NAME_NM NO SQL> alter index ik_addr_lcl_prf rebuild online; alter index ik_addr_lcl_prf rebuild online * ERROR at line 1: ORA-14086: a partitioned index may not be rebuilt as a whole SQL> alter index ik_id_lcl rebuild online; alter index ik_id_lcl rebuild online * ERROR at line 1: ORA-14086: a partitioned index may not be rebuilt as a whole

Page 94: Oracle History #6

[email protected] - 94 -

Oracle9i New Features http://www.ggola.com

online operation enhancements for iot

index building

- online rebuild and create iot's secondary index (including compute statistics)

- online coalesce index of iot's primary index

SQL> alter index ik_amount_glb rebuild online; alter index ik_amount_glb rebuild online * ERROR at line 1: ORA-14086: a partitioned index may not be rebuilt as a whole SQL> alter index ik_name_nm rebuild online; Index altered.

non partitioned index online rebuild . partitioned index partition rebuild .

SQL> conn scott/tiger SQL> create index ik_empname_iot_2nd on emp_iot(emp_name) compute statistics online; Index created. SQL> alter index ik_empname_iot_2nd coalesce; Index altered. SQL> alter index ik_empname_iot_2nd coalesce online; alter index ik_empname_iot_2nd coalesce online * ERROR at line 1: ORA-02243: invalid ALTER INDEX or ALTER MATERIALIZED VIEW option

online option error new feature ? secondary index coalesce default online operation . .

SQL> conn scott/tiger SQL> select index_name from user_ind_columns 2 where table_name = 'EMP_IOT' and column_name in ( 3 select column_name from user_cons_columns 4 where constraint_name = (select constraint_name from user_constraints 5 where constraint_type = 'P' and table_name = 'EMP_IOT')); INDEX_NAME ------------------------------ PK_EMP_ID_IOT

primary index .

Page 95: Oracle History #6

[email protected] - 95 -

Oracle9i New Features http://www.ggola.com

update logical rowid

- 8i iot secondary index . rowid iot

logical rowid , UROWID secondary index . logcial rowid base iot table

9i online

.

- iot fragmentation rebuild . 9i online overflow online

move . emp_iot overflow . online move test .

SQL> alter index pk_emp_id_iot coalesce; alter index pk_emp_id_iot coalesce * ERROR at line 1: ORA-25176: storage specification not permitted for primary key

new features error . iot secondary index real index iot primary key index index table syntax . SQL> alter table emp_iot coalesce; Table altered.

SQL> conn scott/tiger SQL> alter index ik_deptid_iot_2nd update block references; Index altered.

SQL> conn scott/tiger SQL> alter table emp_iot add overflow tablespace tools; Table created. SQL> alter table emp_iot move online 2 tablespace tools overflow tablespace users; Table altered.

Page 96: Oracle History #6

[email protected] - 96 -

Oracle9i New Features http://www.ggola.com

online table redefinition

concept

- oltp system performance table reorganization table service

online . (8i move select index

)

- 9i .

- , primary key rowid rowid hidden column

"M_ROW$$" . rowid iot table . (default primary key )

- , table pl/sql procedure and cursor invalid procedure call recompile

. (rowid method 9i R2 )

mechanism

1. table

2. table transform

3. dml operation track

4. track dml operation materialized view log

5. transform track log table update

6.

process

1. table online redefinition EX. dbms_redefinition.can_redef_table CF. redefinition ORA-12089 error return

.

2. create empty interim table

3. redefinition process start EX. dbms_redefinition.start_redef_table

Page 97: Oracle History #6

[email protected] - 97 -

Oracle9i New Features http://www.ggola.com

CF. primary key rowid redefinition method . method default primary key .

4. interim table create all triggers, indexes and constraints CF. interim table triggers, indexes constraints disable . object name constraints table redefinition enable .

5. interim table grant privileges

6. redefinition process finish EX. dbms_redefinition.finish_redef_table CF. original table exclusive mode lock .

sync and abort

1. redefinition original table sync

gap . EX. dbms_redefinition.sync_interim_table CF. redefinition start and finish

. finish time original table exclusive lock

mode .

2. redefinition process procedure . interim table drop manually . EX. dbms_redefinition.abort_redef_table

example

- emp_iot index column storage .

system user privileges .

SQL> conn system/manager SQL> grant execute on dbms_redefinition to scott; SQL> grant create any table to scott; SQL> grant alter any table to scott; SQL> grant drop any table to scott; SQL> grant lock any table to scott; SQL> grant select any table to scott;

Page 98: Oracle History #6

[email protected] - 98 -

Oracle9i New Features http://www.ggola.com

SQL> conn scott/tiger SQL> select index_name, tablespace_name, uniqueness, status 2 from user_indexes where table_name = 'EMP'; INDEX_NAME TABLESPACE_NAME UNIQUENES STATUS ------------------------------ -------------------- --------- -------- IK_DEPTID_BTM USERS NONUNIQUE VALID IK_EMPID_RVS USERS NONUNIQUE VALID IK_ENAME_SAL_FNC USERS NONUNIQUE VALID IK_SALARY_CMP USERS NONUNIQUE VALID SQL> select table_name, tablespace_name 2 from user_tables where table_name = 'EMP'; TABLE_NAME TABLESPACE_NAME -------------------- -------------------- EMP USERS SQL> desc emp; Name Null? Type ----------------------------------------- -------- ---------------------------- EMP_ID VARCHAR2(10) EMP_NAME VARCHAR2(10) DEPT_ID VARCHAR2(10) GRP_POLICY VARCHAR2(10) SALARY NUMBER SQL> select * from emp; EMP_ID EMP_NAME DEPT_ID GRP_POLICY SALARY ---------- ---------- ---------- ---------- ---------- A1998001 KIM SAL01 BASIC_GRP 180000 B2002003 JANG SYS01 SYSTEM_GRP 150000 C2001003 LEE MAR01 BASIC_GRP 210000 SQL> select constraint_name, constraint_type from user_constraints 2 where table_name = 'EMP' and constraint_type in ('P', 'U'); no rows selected SQL> exec dbms_redefinition.can_redef_table('SCOTT', 'EMP'); BEGIN dbms_redefinition.can_redef_table('SCOTT', 'EMP'); END; * ERROR at line 1: ORA-12089: cannot online redefine table "SCOTT"."EMP" with no primary key ORA-06512: at "SYS.DBMS_REDEFINITION", line 8 ORA-06512: at "SYS.DBMS_REDEFINITION", line 247 ORA-06512: at line 1

redefine method default primary key . primary key error return . SQL> alter table emp add constraint uk_empid_rvs unique(emp_id); Table altered. SQL> alter table emp modify emp_id varchar2(10) not null; Table altered.

Page 99: Oracle History #6

[email protected] - 99 -

Oracle9i New Features http://www.ggola.com

SQL> select constraint_name, constraint_type from user_constraints 2 where table_name = 'EMP' and constraint_type in ('P', 'U'); CONSTRAINT_NAME C ------------------------------ - UK_EMPID_RVS U SQL> exec dbms_redefinition.can_redef_table('SCOTT', 'EMP'); BEGIN dbms_redefinition.can_redef_table('SCOTT', 'EMP'); END; * ERROR at line 1: ORA-12089: cannot online redefine table "SCOTT"."EMP" with no primary key ORA-06512: at "SYS.DBMS_REDEFINITION", line 8 ORA-06512: at "SYS.DBMS_REDEFINITION", line 247 ORA-06512: at line 1

. unique constraint . SQL> alter index ik_empid_rvs rename to pk_empid_rvs; Index altered.

index primary key . ( ) SQL> alter table emp drop constraint uk_empid_rvs; SQL> alter table emp add constraint pk_empid_rvs primary key(emp_id); SQL> select index_name, tablespace_name, uniqueness, status 2 from user_indexes where table_name = 'EMP'; INDEX_NAME TABLESPACE_NAME UNIQUENES STATUS ------------------------------ -------------------- --------- -------- IK_DEPTID_BTM USERS NONUNIQUE VALID IK_ENAME_SAL_FNC USERS NONUNIQUE VALID IK_SALARY_CMP USERS NONUNIQUE VALID PK_EMPID_RVS USERS NONUNIQUE VALID

index . SQL> select constraint_name, constraint_type from user_constraints 2 where table_name = 'EMP' and constraint_type in ('P', 'U'); CONSTRAINT_NAME C ------------------------------ - PK_EMPID_RVS P

primary key . SQL> exec dbms_redefinition.can_redef_table('SCOTT', 'EMP', - > dbms_redefinition.cons_use_pk); pl/sql procedure successfully completed.

. redefine method emp table primary key redefinition . ( redefine method default value )

redefine method error . manual method default primary key .

Page 100: Oracle History #6

[email protected] - 100 -

Oracle9i New Features http://www.ggola.com

SQL> create table emp_rdf ( 2 agency_id varchar2(10) not null, agency_name varchar2(10), 3 dept_id varchar2(10), expense number, 4 constraint pk_empiot_rdf primary key (agency_id)) 5 organization index tablespace tools 6 pctthreshold 40 7 overflow tablespace tools; Table created. SQL> exec dbms_redefinition.start_redef_table('scott','emp','emp_rdf', - > 'emp_id agency_id, emp_name agency_name,salary*1.5 expense', - > dbms_redefinition.cons_use_pk); SQL> exec dbms_redefinition.sync_interim_table('scott', 'emp', 'emp_rdf');

synchronization . SQL> create index ik_agcnm_rdf on emp_rdf(agency_name) 2 tablespace tools; SQL> select * from emp ; EMP_ID EMP_NAME DEPT_ID GRP_POLICY SALARY ---------- ---------- ---------- ---------- ---------- A1998001 KIM SAL01 BASIC_GRP 180000 B2002003 JANG SYS01 SYSTEM_GRP 150000 C2001003 LEE MAR01 BASIC_GRP 210000 SQL> insert into emp values ('D20030924', 'PARK', 'CRM01', '', 170000); 1 row created. SQL> commit; SQL> select * from emp; EMP_ID EMP_NAME DEPT_ID GRP_POLICY SALARY ---------- ---------- ---------- ---------- ---------- A1998001 KIM SAL01 BASIC_GRP 180000 B2002003 JANG SYS01 SYSTEM_GRP 150000 C2001003 LEE MAR01 BASIC_GRP 210000 D20030924 PARK CRM01 170000 SQL> select * from emp_rdf; AGENCY_ID AGENCY_NAM DEPT_ID EXPENSE ---------- ---------- ---------- ---------- A1998001 KIM 270000 B2002003 JANG 225000 C2001003 LEE 315000 D20030924 PARK 255000 SQL> exec dbms_redefinition.finish_redef_table('scott', 'emp', 'emp_rdf'); SQL> desc emp Name Null? Type ----------------------------------------- -------- ---------------------------- AGENCY_ID NOT NULL VARCHAR2(10) AGENCY_NAME VARCHAR2(10) DEPT_ID VARCHAR2(10) EXPENSE NUMBER

Page 101: Oracle History #6

[email protected] - 101 -

Oracle9i New Features http://www.ggola.com

SQL> desc emp_rdf Name Null? Type ----------------------------------------- -------- ---------------------------- EMP_ID NOT NULL VARCHAR2(10) EMP_NAME VARCHAR2(10) DEPT_ID VARCHAR2(10) GRP_POLICY VARCHAR2(10) SALARY NUMBER SQL> select * from emp; AGENCY_ID AGENCY_NAM DEPT_ID EXPENSE ---------- ---------- ---------- ---------- A1998001 KIM 270000 B2002003 JANG 225000 C2001003 LEE 315000 D20030924 PARK 255000 SQL> select * from emp_rdf; EMP_ID EMP_NAME DEPT_ID GRP_POLICY SALARY ---------- ---------- ---------- ---------- ---------- A1998001 KIM SAL01 BASIC_GRP 180000 B2002003 JANG SYS01 SYSTEM_GRP 150000 C2001003 LEE MAR01 BASIC_GRP 210000 D20030924 PARK CRM01 170000

. . partition exchange . redefinition . SQL> select index_name, tablespace_name, uniqueness, status 2 from user_indexes where table_name = 'EMP'; INDEX_NAME TABLESPACE_NAME UNIQUENES STATUS ------------------------------ -------------------- --------- -------- IK_AGCNM_RDF TOOLS NONUNIQUE VALID SQL> select index_name, tablespace_name, uniqueness, status 2 from user_indexes where table_name = 'EMP_RDF'; INDEX_NAME TABLESPACE_NAME UNIQUENES STATUS ------------------------------ -------------------- --------- -------- IK_DEPTID_BTM USERS NONUNIQUE VALID IK_ENAME_SAL_FNC USERS NONUNIQUE VALID IK_SALARY_CMP USERS NONUNIQUE VALID PK_EMPID_RVS USERS NONUNIQUE VALID

redefine emp table interim table index interim table original table index .

SQL> select table_name, tablespace_name 2 from user_tables where table_name in ('EMP', 'EMP_RDF'); TABLE_NAME TABLESPACE_NAME -------------------- -------------------- EMP TOOLS EMP_RDF USERS

tablespace exchange .

Page 102: Oracle History #6

[email protected] - 102 -

Oracle9i New Features http://www.ggola.com

- emp emp_rdf data . ,

table data transform .

- redefine table redefinition start , interim table triggers,

indexes, constraints, privileges finish . , emp_rdf drop

.

- process create table as select rename table

. , online operation package

.

limitation

1. primary key original table interim table primary key columns . rowid

iot .

2. materialized view tables

3. materialized view containers table and advanced queuing tables

4. iot overflow

5. tables with user defined types (objects, refs, collections, typed tables)

6. tables with bfile or long (but support lob)

7. tables as a part of cluster

8. tables in the system or sys schema

9. temporary tables

SQL> select table_name, constraint_name, constraint_type 2 from user_constraints 3 where table_name in ('EMP', 'EMP_RDF') and constraint_type in ('P', 'U'); TABLE_NAME CONSTRAINT_NAME C -------------------- ------------------------------ - EMP_RDF PK_EMPID_RVS P

redefine emp primray key .

Page 103: Oracle History #6

[email protected] - 103 -

Oracle9i New Features http://www.ggola.com

10. horizontal subsetting of data where

. , table data .

11. redefinition new columns not null .

12. redefined table interim table referential constrains .

13. table redefinition nologging .

14. redefine argument schema .

, redefine tables schema .

online analyze validate

object validation online .

SQL> analyze table emp validate structure online;

quiesce database

concept

- dba dba transaction database . oracle restricted mode open

database . , dba transaction .

merit

1. shutdown .

2. user session .

3. interference dba . (alter, drop, create, etc..)

CF. feature database resource manager . .

Page 104: Oracle History #6

[email protected] - 104 -

Oracle9i New Features http://www.ggola.com

SQL> conn system/manager SQL> alter system quiesce restricted; alter system quiesce restricted * ERROR at line 1: ORA-25507: resource manager has not been continuously on

syntax error . SQL> sho parameter resource_manager_plan NAME TYPE VALUE ------------------------------------ ---------- ------------------------------ resource_manager_plan string

resource plan . plan directive internal_quiesce . , plan quiesce

. SQL> select plan, group_or_subplan, active_sess_pool_p1, status, mandatory 2 from dba_rsrc_plan_directives 3 where plan = 'INTERNAL_QUIESCE'; PLAN GROUP_OR_SUBPLA ACTIVE_SESS_POOL_P1 STATUS MAN -------------------- --------------- ------------------- ---------- --- INTERNAL_QUIESCE SYS_GROUP ACTIVE YES INTERNAL_QUIESCE OTHER_GROUPS 0 ACTIVE YES

sys_group user other_groups active session 0 . , quiesce state sys_group (dba group

) user active session quiesce feature . internal_quiesce plan mandaytory yes resource plan plan . (quiesce command .

) SQL> select username from dba_users 2 where initial_rsrc_consumer_group = 'SYS_GROUP'; USERNAME ------------------------------ SYS SYSTEM

internal_quiesc plan group sys_group, other_groups . sys_group sys, system .

SQL> alter system set resource_manager_plan='internal_quiesce'; SQL> sho parameter resource_manager_plan; NAME TYPE VALUE ------------------------------------ ---------- ------------------------------ resource_manager_plan string internal_quiesce SQL> alter system quiesce restricted; alter system quiesce restricted * ERROR at line 1: ORA-25507: resource manager has not been continuously on

error . ? quiesce feature database start active plan .

Page 105: Oracle History #6

[email protected] - 105 -

Oracle9i New Features http://www.ggola.com

quiesce features test

- session . transaction session dba session.

1. tx session update commit or rollback .

SQL> conn scott/tiger SQL> update emp set dept_id = 10; 4 rows updated.

2. dba session quiesce command . SQL> conn system/manager SQL> alter system quiesce restricted;

. tx session transaction . v$instance active_state "NORMAL" "QUIESCING" .

3. tx session transaction . SQL> rollback; Rollback complete.

4. dba session command return . SQL> alter system quiesce restricted; System altered.

v$instance active_state "QUIESCING" "QUIESCED" .

# initial parameter database restart . resource_manager_plan = SYSTEM_PLAN SQL> conn system/manager SQL> sho parameter resource_manager_plan NAME TYPE VALUE ------------------------------------ ------- ------------------------------ resource_manager_plan string SYSTEM_PLAN SQL> alter system quiesce restricted; System altered. SQL> alter system unquiesce; System altered.

. quiesce command plan internal_quiesce plan . , command internal_quiesce plan sys_groups

user active . , parameter system_plan internal_quiesce plan

.

Page 106: Oracle History #6

[email protected] - 106 -

Oracle9i New Features http://www.ggola.com

5. tx session sql . SQL> select sid from v$session where audsid = userenv('SESSIONID'); . . . .

wait . , active session .

6. tx session login . SQL> select sid from v$session where audsid = userenv('SESSIONID'); Ctrl+C Ctrl+D

. Linux . (

) message .

7. Ctrl+| login . [NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/work> sqlplus scott/tiger SQL*Plus: Release 9.2.0.1.0 - Production on Thu Sep 25 09:38:10 2003 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. . . . .

wait .

8. dba session quiesce mode . SQL> alter system unquiesce; System altered.

v$instance active_state "QUIESCED" "NORMAL" .

9. waiting session tx session .

[NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/work> sqlplus scott/tiger SQL*Plus: Release 9.2.0.1.0 - Production on Thu Sep 25 09:38:10 2003 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to: Oracle9i Enterprise Edition Release 9.2.0.1.0 – Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 – Production SQL>

Page 107: Oracle History #6

[email protected] - 107 -

Oracle9i New Features http://www.ggola.com

limit

1. instance startup resource manager . , trurned on

.

2. turned off ( turnred on ) quiesce mode .

3. rac database quiesce mode node open error return .

4. quiesce mode database backup and recovery normal online backup and recovery .

5. , sys and system user . dba role user consumer

group sys_groups ? . test

dba user sys_group dbms_resource_manager.switch_consumer_group_for_sess

sys_group change quiesce command insufficient privileges error

return .

new initial parameter

concept

- spfile file text binary file oracle server server

parameter . , local text parameter text (alter system

) next restartup spfile alter system parameter .

- spfile local parameter rac spfile device parameter file rac server parameter

. ( , instance distinct parameter value )

characteristic

1. small binary file (text oracle )

2. managed by oracle server (not by user)

3. server side file

Page 108: Oracle History #6

[email protected] - 108 -

Oracle9i New Features http://www.ggola.com

4. parameter file

5. server "$ORACLE_HOME/dbs/spfile<instance>.ora" .

6. spfile parameter show parameter view

"v$spparameter" .

creation and handling

- os window session window

1. os window spfile [NEWSVC]LIRACLE:/app/oracle/product/9.2.0/dbs> ls –ltr total 32 -rw-r--r-- 1 oracle dba 8385 Mar 9 2002 init.ora -rw-r--r-- 1 oracle dba 12920 Mar 9 2002 initdw.ora lrwxrwxrwx 1 oracle dba 45 Aug 7 11:05 initNEWSVC.ora -> /app/oracle/admin/NEWSVC/pfile/initNEWSVC.ora -rw-rw---- 1 oracle dba 24 Sep 24 18:23 lkNEWSVC

2. session window spfile SQL> conn / as sysdba SQL> create spfile from pfile; File created.

3. os window spfile [NEWSVC]LIRACLE:/app/oracle/product/9.2.0/dbs> ls –ltr total 40 -rw-r--r-- 1 oracle dba 8385 Mar 9 2002 init.ora -rw-r--r-- 1 oracle dba 12920 Mar 9 2002 initdw.ora lrwxrwxrwx 1 oracle dba 45 Aug 7 11:05 initNEWSVC.ora -> /app/oracle/admin/NEWSVC/pfile/initNEWSVC.ora -rw-rw---- 1 oracle dba 24 Sep 24 18:23 lkNEWSVC -rw-r----- 1 oracle dba 5632 Sep 25 10:43 spfileNEWSVC.ora [NEWSVC]LIRACLE:/app/oracle/product/9.2.0/dbs> tail -f spfileNEWSVC.ora *.shared_pool_size=83886080# 80M ( 2003-07-23) *.star_transformation_enabled='FALSE'# query transformation or not *.timed_statistics=TRUE *.undo_management='AUTO'# undo(rollback) management

Page 109: Oracle History #6

[email protected] - 109 -

Oracle9i New Features http://www.ggola.com

mode *.undo_retention=1200# for flashback query (now 20 minutes) *.undo_suppress_errors=FALSE# ignore manual undo command error message or not *.user_dump_dest='/app/oracle/admin/NEWSVC/udump' *.utl_file_dir='/app/oracle/admin/NEWSVC/work' *.workarea_size_policy='AUTO'# oracle will control server process memory Ctrl+C

parameter file . .

4. session window . SQL> create spfile from pfile; File created. SQL> create spfile from pfile; File created.

. , database local parameter file start . (

database idle, nomount, mount, open )

5. session window database restart . SQL> shutdown immediate . . . . ORACLE instance shut down. SQL> startup ORACLE instance started. . . . . SQL> create spfile from pfile; create spfile from pfile * ERROR at line 1: ORA-32002: cannot create SPFILE already being used by the instance SQL> sho parameter spfile NAME TYPE VALUE ------------------------------------ ---------- ------------------------------ spfile string ?/dbs/[email protected]

. , server spfile . parameter

spfile .

6. session window v$spparameter spfile parameters .

ispsecified, ordinal update_comment . spfile update_comment

parameter view . update_comment parameter comment isspecified

spfile ordinal parameter value lists

. , control files list

Page 110: Oracle History #6

[email protected] - 110 -

Oracle9i New Features http://www.ggola.com

1 parameter 1 instance start 0 .

7. session window parameter . SQL> alter system set open_cursors=700 2 comment='spfile only' scope=spfile; System altered. SQL> select name, value, update_comment 2 from v$spparameter 3 where name = 'open_cursors'; NAME VALUE UPDATE_COMME -------------------- ------------------------------ ------------ open_cursors 700 spfile only SQL> sho parameter open_cursors NAME TYPE VALUE ------------------------------------ ---------- ---------------------------- open_cursors integer 500

instance view . database restart . ? alter system scope option .

.

8. os window [NEWSVC]LIRACLE:/app/oracle/product/9.2.0/dbs> more spfileNEWSVC.ora . . . . *.nls_date_format='YYYY/MM/DD' *.o7_dictionary_accessibility=TRUE *.open_cursors=700#spfile only *.open_links=4# default . . . .

binary grep more

SQL> select name, value, isspecified, ordinal, update_comment 2 from v$spparameter 3 where name in ('control_files', 'db_files', 'spfile', 'open_cursors'); NAME VALUE ISSPEC ORDINAL UPDATE_COM ----------------------- ------------------------------ ------ ---------- ----------- --------------- ------------------------------- spfile FALSE 0 control_files /app/oracle/oradata/NEWSVC/con TRUE 1 trolNEWSVC01.ctl control_files /app/oracle/oradata/NEWSVC/con TRUE 2 trolNEWSVC02.ctl control_files /app/oracle/oradata/NEWSVC/con TRUE 3 trolNEWSVC03.ctl db_files 1000 TRUE 1 open_cursors 500 TRUE 1 general values like basic system

spfile FALSE ordinal 0 show parameter v$parameter instance startup parameter .

Page 111: Oracle History #6

[email protected] - 111 -

Oracle9i New Features http://www.ggola.com

700 file . dynamic parameter change permanent .

alter system scope

- alter system scope option .

EX. alter system set parameter = value comment = 'description' [scope=memory|spfile|both];

1. memory : instance . database restart .

2. spfile : spfile . spfile database restart . (spfile

parameter file )

3. both : instance spfile .

CF. option : spfile startup database both default parameter file startup memory default .

alter system reset

- local parameter file parameter oracle server default value

parameter parameter file .

- spfile . EX. alter system reset parameter [scope=memory|spfile|both] [sid='*|sid]; CF. reset sid clause rac instance

.

startup priority

1. spfile

2. spfile unusable local initial parameter

3. init.ora file spfile . initial parameter file spfile parameter spfile

.

CF. startup pfile='...ora' startup spfile='...ora' spfile or pfile option file

Page 112: Oracle History #6

[email protected] - 112 -

Oracle9i New Features http://www.ggola.com

CF. search order first) spfile$ORACLE_SID.ora second) spfile.ora third) init$ORACLE_SID.ora

from spfile to pfile

- spfile spfile local file . ( export )

EX. create pfile [='name'] from spfile [='name'];

1. session window . SQL> create pfile='conv_spfile.ora' from spfile; File created.

2. os window . [NEWSVC]LIRACLE:/app/oracle/product/9.2.0/dbs> ls –l total 44 -rw-r--r-- 1 oracle dba 2338 Sep 25 13:26 conv_spfile.ora -rw-r--r-- 1 oracle dba 12920 Mar 9 2002 initdw.ora lrwxrwxrwx 1 oracle dba 45 Sep 25 13:28 initNEWSVC.ora -> /app/oracle/admin/NEWSVC/pfile/initNEWSVC.ora -rw-r--r-- 1 oracle dba 8385 Mar 9 2002 init.ora -rw-rw---- 1 oracle dba 24 Sep 25 10:49 lkNEWSVC -rw-r----- 1 oracle dba 5632 Sep 25 11:22 spfileNEWSVC.ora [NEWSVC]LIRACLE:/app/oracle/product/9.2.0/dbs> tail -f conv_spfile.ora *.shadow_core_dump='partial' *.shared_pool_size=83886080# 80M ( 2003-07-23) *.star_transformation_enabled='FALSE'# query transformation or not *.timed_statistics=TRUE *.undo_management='AUTO'# undo(rollback) management mode *.undo_retention=1200# for flashback query (now 20 minutes) *.undo_suppress_errors=FALSE# ignore manual undo command error message or not *.user_dump_dest='/app/oracle/admin/NEWSVC/udump' *.utl_file_dir='/app/oracle/admin/NEWSVC/work' *.workarea_size_policy='AUTO'# oracle will control server process memory

Page 113: Oracle History #6

[email protected] - 113 -

Oracle9i New Features http://www.ggola.com

- rac * instance instance

. . node1.shard_pool_size=1000000 node2.shard_pool_size=2000000 node3.shard_pool_size=3000000

- name default value pfile

"$ORACLE_HOME/dbs/init$ORACLE_SID.ora" .

Page 114: Oracle History #6

[email protected] - 114 -

Oracle9i New Features http://www.ggola.com

8. Advanced Partition and Segment Management Enhancement

global index maintenance

to 8i partition table partition ddl global index unusable . , rebuild

. from 9i partition ddl global index update feature

.

partition ddl data global index rebuild

.

supported option

EX. alter table table_name drop partition part_name [update global indexes | invalidate global indexes] parallel ...;

- invalidate global indexes 8i option default .

- , update global indexes option option new feature

.

maintenance

- update global indexes option partition ddl .

EX. split, merge, add, coalesce, move, drop, truncate, exchange

- update global indexes drop, truncate, exchange parallel clause . CF. fast dictionary operation .( )

support and limitations

- option b*tree and function based indexes iot, domain indexes, local indexes .

- rebuild reorganization . , index valid usable state

update . CF. .

, invalid or unusable indexes

Page 115: Oracle History #6

[email protected] - 115 -

Oracle9i New Features http://www.ggola.com

update invalid or unusable .

- option global local index partition

EX. alter table modify partition ... rebuild unusable local indexes…

.

when rebuild or update global indexes

- update

1. partition ddl .

index update

2. drop, truncate, exchange dictionary operation .

. update option 8i (invalidate option) drop, truncate, exchange dictionary fast dictionary operation . , rows scan global indexes

. (parallel )

3. global indexes update redo and undo logs generation . (logging )

- rebuild

1. rebuilding index .

2. rebuilding reorganization . data

.

example

SQL> select index_name, partitioned, status from user_indexes 2 where table_name = 'SALE_PART'; INDEX_NAME PAR STATUS ------------------------------ --- -------- IK_ADDR_LCL_PRF YES N/A IK_AMOUNT_GLB YES N/A IK_ID_LCL YES N/A IK_NAME_NM NO VALID SQL> alter table sale_part move partition sale_east tablespace tools ; Table altered.

Page 116: Oracle History #6

[email protected] - 116 -

Oracle9i New Features http://www.ggola.com

SQL> select index_name, partitioned, status from user_indexes 2 where table_name = 'SALE_PART'; INDEX_NAME PAR STATUS ------------------------------ --- -------- IK_ADDR_LCL_PRF YES N/A IK_AMOUNT_GLB YES N/A IK_ID_LCL YES N/A IK_NAME_NM NO UNUSABLE SQL> alter index ik_name_nm rebuild; Index altered. SQL> select index_name, partition_name, status from user_ind_partitions 2 where index_name in ( select index_name from user_indexes 3 where table_name = 'SALE_PART' and partitioned = 'YES'); INDEX_NAME PARTITION_NAME STATUS ------------------------------ ------------------------------ -------- IK_ADDR_LCL_PRF SALE_EAST UNUSABLE IK_ADDR_LCL_PRF SALE_WEST USABLE IK_ADDR_LCL_PRF SALE_SOUTH USABLE IK_ADDR_LCL_PRF SALE_NORTH USABLE IK_AMOUNT_GLB P1 UNUSABLE IK_AMOUNT_GLB P2 UNUSABLE IK_ID_LCL SALE_EAST UNUSABLE IK_ID_LCL SALE_WEST USABLE IK_ID_LCL SALE_SOUTH USABLE IK_ID_LCL SALE_NORTH USABLE

global partition index ik_amount_glb sale_east partition local partition unusable SQL> alter table sale_part modify partition sale_east 2 rebuild unusable local indexes; Table altered. SQL> select index_name, partition_name, status from user_ind_partitions 2 where index_name in ( select index_name from user_indexes 3 where table_name = 'SALE_PART' and partitioned = 'YES'); INDEX_NAME PARTITION_NAME STATUS ------------------------------ ------------------------------ -------- IK_ADDR_LCL_PRF SALE_EAST USABLE IK_ADDR_LCL_PRF SALE_WEST USABLE IK_ADDR_LCL_PRF SALE_SOUTH USABLE IK_ADDR_LCL_PRF SALE_NORTH USABLE IK_AMOUNT_GLB P1 UNUSABLE IK_AMOUNT_GLB P2 UNUSABLE IK_ID_LCL SALE_EAST USABLE IK_ID_LCL SALE_WEST USABLE IK_ID_LCL SALE_SOUTH USABLE IK_ID_LCL SALE_NORTH USABLE

ik_amount_glb global partition index unusable . SQL> alter index ik_amount_glb rebuild partition p1; Index altered. SQL> alter index ik_amount_glb rebuild partition p2 online; Index altered.

Page 117: Oracle History #6

[email protected] - 117 -

Oracle9i New Features http://www.ggola.com

SQL> select index_name, partition_name, status from user_ind_partitions 2 where index_name in ( select index_name from user_indexes 3 where table_name = 'SALE_PART' and partitioned = 'YES'); INDEX_NAME PARTITION_NAME STATUS ------------------------------ ------------------------------ -------- IK_ADDR_LCL_PRF SALE_EAST USABLE IK_ADDR_LCL_PRF SALE_WEST USABLE IK_ADDR_LCL_PRF SALE_SOUTH USABLE IK_ADDR_LCL_PRF SALE_NORTH USABLE IK_AMOUNT_GLB P1 USABLE IK_AMOUNT_GLB P2 USABLE IK_ID_LCL SALE_EAST USABLE IK_ID_LCL SALE_WEST USABLE IK_ID_LCL SALE_SOUTH USABLE IK_ID_LCL SALE_NORTH USABLE

. update option . SQL> alter table sale_part move partition sale_east tablespace tools 2 update global indexes parallel(degree 4); Table altered. SQL> select index_name, partitioned, status from user_indexes 2 where table_name = 'SALE_PART'; INDEX_NAME PAR STATUS ------------------------------ --- -------- IK_ADDR_LCL_PRF YES N/A IK_AMOUNT_GLB YES N/A IK_ID_LCL YES N/A IK_NAME_NM NO VALID

global index . SQL> select index_name, partition_name, status from user_ind_partitions 2 where index_name in ( select index_name from user_indexes 3 where table_name = 'SALE_PART' and partitioned = 'YES'); INDEX_NAME PARTITION_NAME STATUS ------------------------------ ------------------------------ -------- IK_ADDR_LCL_PRF SALE_EAST UNUSABLE IK_ADDR_LCL_PRF SALE_WEST USABLE IK_ADDR_LCL_PRF SALE_SOUTH USABLE IK_ADDR_LCL_PRF SALE_NORTH USABLE IK_AMOUNT_GLB P1 USABLE IK_AMOUNT_GLB P2 USABLE IK_ID_LCL SALE_EAST UNUSABLE IK_ID_LCL SALE_WEST USABLE IK_ID_LCL SALE_SOUTH USABLE IK_ID_LCL SALE_NORTH USABLE

global partition index usable . partition local index . SQL> alter table sale_part modify partition sale_east 2 rebuild unusable local indexes; Table altered.

.

Page 118: Oracle History #6

[email protected] - 118 -

Oracle9i New Features http://www.ggola.com

list partitioning

to 8i partition table partition key value range from 9i list partitioning .

group partitioning . ( , partition

)

list partition to 8i range partition value value

partition where in-list . , list partition key

1 1 partition (unique) .

characteristics

1. heap table support only ( . iot . table heap, iot index type )

2. multi-columns partitioning .

3. list values all partitions unique .

4. null list value . ( . list key column null value insert ORA-14400 error , partition key mapping error . null data row partition )

5. maxvalue bound .

6. string value 4K data .

7. partition indexes range or hash partition .

example

- “chaper 2” export/import enhancement table "sale_part" list partitioned

table .

- list partitioning operation .

SQL> conn scott/tiger SQL> select table_name, partition_name partition, high_value, partition_position position 2 from user_tab_partitions 3 where table_name='SALE_PART' 4 order by position;

Page 119: Oracle History #6

[email protected] - 119 -

Oracle9i New Features http://www.ggola.com

TABLE_NAME PARTITION HIGH_VALUE POSITION ---------- ------------------------------ ---------- ---------- SALE_PART SALE_EAST 'ea', 'eb' 1 SALE_PART SALE_WEST 'wa', 'wb' 2 SALE_PART SALE_SOUTH 'sa', 'sb' 3 SALE_PART SALE_NORTH 'na', 'nb' 4 SQL> select table_name, partitioning_type, partitioning_key_count 2 from user_part_tables 3 where table_name = 'SALE_PART'; TABLE_NAME PARTITI PARTITIONING_KEY_COUNT --------------- ------- ---------------------- SALE_PART LIST 1

sale_part list partitioned table . SQL> alter table sale_part add partition sale_middle 2 values ('ma', 'mb') tablespace tools nologging; Table altered.

add list partition : partition name “sys_p###” system-generated name .

SQL> select index_name, partitioned, status from user_indexes 2 where table_name = 'SALE_PART' 3 union 4 select index_name, partition_name, status from user_ind_partitions 5 where index_name in ( select index_name from user_indexes 6 where table_name = 'SALE_PART' and partitioned = 'YES'); INDEX_NAME PARTITIONED STATUS ------------------------------ ------------------------------ -------- IK_ADDR_LCL_PRF SALE_EAST USABLE IK_ADDR_LCL_PRF SALE_MIDDLE USABLE IK_ADDR_LCL_PRF SALE_NORTH USABLE IK_ADDR_LCL_PRF SALE_SOUTH USABLE IK_ADDR_LCL_PRF SALE_WEST USABLE IK_ADDR_LCL_PRF YES N/A IK_AMOUNT_GLB P1 USABLE IK_AMOUNT_GLB P2 USABLE IK_AMOUNT_GLB YES N/A IK_ID_LCL SALE_EAST USABLE IK_ID_LCL SALE_MIDDLE USABLE IK_ID_LCL SALE_NORTH USABLE IK_ID_LCL SALE_SOUTH USABLE IK_ID_LCL SALE_WEST USABLE IK_ID_LCL YES N/A IK_NAME_NM NO VALID

add partition index status . local partitioned index new index partition . SQL> alter table sale_part merge partitions 2 sale_east, sale_middle into partition sale_middleeast 3 tablespace tools; Table altered.

middle and east partition merge .

Page 120: Oracle History #6

[email protected] - 120 -

Oracle9i New Features http://www.ggola.com

SQL> select index_name, partitioned, status from user_indexes 2 where table_name = 'SALE_PART' 3 union 4 select index_name, partition_name, status from user_ind_partitions 5 where index_name in ( select index_name from user_indexes 6 where table_name = 'SALE_PART' and partitioned = 'YES'); INDEX_NAME PARTITIONED STATUS ------------------------------ ------------------------------ -------- IK_ADDR_LCL_PRF SALE_MIDDLEEAST UNUSABLE IK_ADDR_LCL_PRF SALE_NORTH USABLE IK_ADDR_LCL_PRF SALE_SOUTH USABLE IK_ADDR_LCL_PRF SALE_WEST USABLE IK_ADDR_LCL_PRF YES N/A IK_AMOUNT_GLB P1 UNUSABLE IK_AMOUNT_GLB P2 UNUSABLE IK_AMOUNT_GLB YES N/A IK_ID_LCL SALE_MIDDLEEAST UNUSABLE IK_ID_LCL SALE_NORTH USABLE IK_ID_LCL SALE_SOUTH USABLE IK_ID_LCL SALE_WEST USABLE IK_ID_LCL YES N/A IK_NAME_NM NO UNUSABLE

index partition merged index partition global partitioned index and global index unusable . index update global option . SQL> alter index ik_name_nm rebuild; SQL> alter table sale_part modify partition sale_middleeast 2 rebuild unusable local indexes; SQL> alter index ik_amount_glb rebuild partition p1; SQL> alter index ik_amount_glb rebuild partition p2; SQL> alter table sale_part merge partitions 2 sale_west, sale_north into partition sale_westnorth 3 tablespace tools update global indexes; Table altered. SQL> select index_name, partitioned, status from user_indexes 2 where table_name = 'SALE_PART' 3 union 4 select index_name, partition_name, status from user_ind_partitions 5 where index_name in ( select index_name from user_indexes 6 where table_name = 'SALE_PART' and partitioned = 'YES'); INDEX_NAME PARTITIONED STATUS ------------------------------ ------------------------------ -------- IK_ADDR_LCL_PRF SALE_MIDDLEEAST USABLE IK_ADDR_LCL_PRF SALE_SOUTH USABLE IK_ADDR_LCL_PRF SALE_WESTNORTH UNUSABLE IK_ADDR_LCL_PRF YES N/A IK_AMOUNT_GLB P1 USABLE IK_AMOUNT_GLB P2 USABLE IK_AMOUNT_GLB YES N/A IK_ID_LCL SALE_MIDDLEEAST USABLE IK_ID_LCL SALE_SOUTH USABLE IK_ID_LCL SALE_WESTNORTH UNUSABLE IK_ID_LCL YES N/A IK_NAME_NM NO VALID

index partition new feature update global index option merged index partition index .

Page 121: Oracle History #6

[email protected] - 121 -

Oracle9i New Features http://www.ggola.com

SQL> alter table sale_part modify partition 2 sale_south add values ('sc', 'sd'); SQL> select index_name, partitioned, status from user_indexes 2 where table_name = 'SALE_PART' 3 union 4 select index_name, partition_name, status from user_ind_partitions 5 where index_name in ( select index_name from user_indexes 6 where table_name = 'SALE_PART' and partitioned = 'YES'); INDEX_NAME PARTITIONED STATUS ------------------------------ ------------------------------ -------- IK_ADDR_LCL_PRF SALE_MIDDLEEAST USABLE IK_ADDR_LCL_PRF SALE_SOUTH USABLE IK_ADDR_LCL_PRF SALE_WESTNORTH UNUSABLE IK_ADDR_LCL_PRF YES N/A IK_AMOUNT_GLB P1 USABLE IK_AMOUNT_GLB P2 USABLE IK_AMOUNT_GLB YES N/A IK_ID_LCL SALE_MIDDLEEAST USABLE IK_ID_LCL SALE_SOUTH USABLE IK_ID_LCL SALE_WESTNORTH UNUSABLE IK_ID_LCL YES N/A IK_NAME_NM NO VALID

add value index . SQL> alter table sale_part modify partition sale_middleeast 2 drop values ('ma', 'ea'); alter table sale_part modify partition sale_middleeast * ERROR at line 1: ORA-14518: partition contains rows corresponding to values being dropped

drop list value data error return . SQL> delete from sale_part where addr in ('ea', 'ma'); 1 row deleted. SQL> alter table sale_part modify partition sale_middleeast 2 drop values ('ma', 'ea');

drop list value row delete drop value . SQL> select index_name, partitioned, status from user_indexes 2 where table_name = 'SALE_PART' 3 union 4 select index_name, partition_name, status from user_ind_partitions 5 where index_name in ( select index_name from user_indexes 6 where table_name = 'SALE_PART' and partitioned = 'YES'); INDEX_NAME PARTITIONED STATUS ------------------------------ ------------------------------ -------- IK_ADDR_LCL_PRF SALE_MIDDLEEAST USABLE IK_ADDR_LCL_PRF SALE_SOUTH USABLE IK_ADDR_LCL_PRF SALE_WESTNORTH UNUSABLE IK_ADDR_LCL_PRF YES N/A IK_AMOUNT_GLB P1 USABLE IK_AMOUNT_GLB P2 USABLE IK_AMOUNT_GLB YES N/A IK_ID_LCL SALE_MIDDLEEAST USABLE IK_ID_LCL SALE_SOUTH USABLE IK_ID_LCL SALE_WESTNORTH UNUSABLE IK_ID_LCL YES N/A IK_NAME_NM NO VALID

drop value index .

Page 122: Oracle History #6

[email protected] - 122 -

Oracle9i New Features http://www.ggola.com

SQL> alter table sale_part modify partition sale_westnorth 2 rebuild unusable local indexes;

unusable index . SQL> select table_name, partition_name partition, high_value, partition_position position 2 from user_tab_partitions 3 where table_name='SALE_PART' 4 order by position; TABLE_NAME PARTITION HIGH_VALUE POSITION --------------- -------------------- ------------------------------ ---------- SALE_PART SALE_SOUTH 'sa', 'sb', 'sc', 'sd' 1 SALE_PART SALE_WESTNORTH 'wa', 'wb', 'na', 'nb' 2 SALE_PART SALE_MIDDLEEAST 'eb', 'mb' 3

operation list partition value . split . SQL> alter table sale_part split partition sale_westnorth 2 values ('wb', 'nb') into 3 (partition sale_bwn tablespace tools, 4 partition sale_awn) update global indexes parallel ; SQL> select index_name, partitioned, status from user_indexes 2 where table_name = 'SALE_PART' 3 union 4 select index_name, partition_name, status from user_ind_partitions 5 where index_name in ( select index_name from user_indexes 6 where table_name = 'SALE_PART' and partitioned = 'YES'); INDEX_NAME PARTITIONED STATUS ------------------------------ ------------------------------ -------- IK_ADDR_LCL_PRF SALE_AWN USABLE IK_ADDR_LCL_PRF SALE_BWN USABLE IK_ADDR_LCL_PRF SALE_MIDDLEEAST USABLE IK_ADDR_LCL_PRF SALE_SOUTH USABLE IK_ADDR_LCL_PRF YES N/A IK_AMOUNT_GLB P1 USABLE IK_AMOUNT_GLB P2 USABLE IK_AMOUNT_GLB YES N/A IK_ID_LCL SALE_AWN USABLE IK_ID_LCL SALE_BWN USABLE IK_ID_LCL SALE_MIDDLEEAST USABLE IK_ID_LCL SALE_SOUTH USABLE IK_ID_LCL YES N/A IK_NAME_NM NO VALID

split index partition update global indexes option global index unusable . , indexes . SQL> select table_name, partition_name partition, high_value, partition_position position 2 from user_tab_partitions 3 where table_name='SALE_PART' 4 order by position; TABLE_NAME PARTITION HIGH_VALUE POSITION --------------- -------------------- ------------------------------ ---------- SALE_PART SALE_SOUTH 'sa', 'sb', 'sc', 'sd' 1 SALE_PART SALE_BWN 'wb', 'nb' 2 SALE_PART SALE_AWN 'wa', 'na' 3 SALE_PART SALE_MIDDLEEAST 'eb', 'mb' 4

partition values .

Page 123: Oracle History #6

[email protected] - 123 -

Oracle9i New Features http://www.ggola.com

metadata api

metadata

to 8i metadata dba . , table creation scripts

view syntax .

to 8i

- from 9i operation api . to 8i .

1. view queries

2. export with rows=n, import with show = y exp/imp utility

3. OCI library ( )

from 9i

- dbms_metadata package metadata api sql output xml format .

1. browsing mode functions (get )

EX. get_ddl function sql output get_xml function xml format .

2. programmatic mode open, set, add, fetch, close functions and procedures

dbms_metadata sub program

- package 23 functions and procedures .

- procedure : close, fetch_clob, free_context_entry, set_count, set_debug, set_filter, set_filter, set_parse_item, set_transform_param, set_transform_param

- function : add_transform, fetch_clob, fetch_ddl, fetch_ddl_text, fetch_xml, get_ddl, get_dependent_ddl, get_dependent_xml, get_granted_ddl, get_granted_xml, get_query, get_xml, open

Page 124: Oracle History #6

[email protected] - 124 -

Oracle9i New Features http://www.ggola.com

example

- get_ddl : table

SQL> select dbms_metadata.get_ddl('TABLE','SALE_PART') from dual ; DBMS_METADATA.GET_DDL('TABLE', -------------------------------------------------------------------------------- CREATE TABLE "SCOTT"."SALE_PART" ( "ID" NUMBER, "NAME" VARCHAR2(30), "ADDR" VARCHAR2(2), "AMOUNT" NUMBER, "HIREDATA" DATE ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING STORAGE( BUFFER_POOL DEFAULT) TABLESPACE "USERS" PARTITION BY LIST ("ADDR") (PARTITION "SALE_SOUTH" VALUES ('sa', 'sb', 'sc', 'sd') PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "TBS_TEST" NOCOMPRESS , PARTITION "SALE_BWN" VALUES ('wb', 'nb') PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "TOOLS" NOCOMPRESS , PARTITION "SALE_AWN" VALUES ('wa', 'na') PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "TOOLS" NOCOMPRESS , PARTITION "SALE_MIDDLEEAST" VALUES ('eb', 'mb') PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "TOOLS" NOCOMPRESS )

Page 125: Oracle History #6

[email protected] - 125 -

Oracle9i New Features http://www.ggola.com

- get_ddl : index

- table and index creation syntax . .

- objects creation locally tablespace system

storage . .

SQL> select dbms_metadata.get_ddl('INDEX', 'IK_ADDR_LCL_PRF') from dual; DBMS_METADATA.GET_DDL('INDEX', -------------------------------------------------------------------------------- CREATE INDEX "SCOTT"."IK_ADDR_LCL_PRF" ON "SCOTT"."SALE_PART" ("ADDR") PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE( BUFFER_POOL DEFAULT)LOCAL (PARTITION "SALE_SOUTH" VALUES ('sa', 'sb', 'sc', 'sd') 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 "TBS_TEST" , PARTITION "SALE_BWN" VALUES ('wb', 'nb') PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "TOOLS" , PARTITION "SALE_AWN" VALUES ('wa', 'na') PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "TOOLS" , PARTITION "SALE_MIDDLEEAST" VALUES ('eb', 'mb') PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "TOOLS" )

Page 126: Oracle History #6

[email protected] - 126 -

Oracle9i New Features http://www.ggola.com

- get_xml

- xml type return . xml .

data etl (extraction, transformation and loading)

dw etl DW .

elt , dw system data dw loading .

9i new feature external table pipelined data transformation . etl

.

traditional process

1. download to falt files

2. load to staging area

3. check validate data and new or update tables

4. transform data and new or update tables

5. merge into dw tables

SQL> select dbms_metadata.get_xml('TABLE','SALE_PART') from dual ; DBMS_METADATA.GET_XML('TABLE', -------------------------------------------------------------------------------- <?xml version="1.0"?> <ROWSET> <ROW> <TABLE_T> <VERS_MAJOR>1</VERS_MAJOR> <VERS_MINOR>0 </VERS_MINOR> <OBJ_NUM>26028</OBJ_NUM> <SCHEMA_OBJ> <OBJ_NUM>26028</OBJ_NUM> <OWNER_NUM>61</OWNER_NUM> ..... ..... ..... </PART_LIST> <COMPART_LIST/> <TSUBPARTS/> </PART_OBJ> </TABLE_T> </ROW> </ROWSET>

Page 127: Oracle History #6

[email protected] - 127 -

Oracle9i New Features http://www.ggola.com

pipelined data transformation

1. download to flat files

2. declare external table

3. use logical functions to data

4. merge into dw tables

CF. flat file check and transform .

external tables

external table outside database flat file virtual table sql . join parallel .

, database table index read-only table directory privilege .

data etl .

file load to database (dw )

sql*loader .

external table example

SQL> conn scott/tiger SQL> !pwd /app/oracle/admin/NEWSVC/work SQL> create or replace directory dir_ext_sale as '/app/oracle/admin/NEWSVC/work/'; Directory created. SQL> create table ext_sale_part ( 2 id number, name varchar2(30), addr varchar2(2), 3 amount number, hiredata date) 4 organization external 5 (type oracle_loader default directory dir_ext_sale 6 access parameters ( 7 records delimited by newline 8 fields terminated by ',' 9 (id, name, addr, amount, hiredata char(8) date_format date mask "yyyymmdd")) 10 location ('ext_sale_n1.txt', 'ext_sale_n2.txt')) 11 parallel 2 12 reject limit unlimited; Table created.

Page 128: Oracle History #6

[email protected] - 128 -

Oracle9i New Features http://www.ggola.com

SQL> desc ext_sale_part Name Null? Type ----------------------------------------- -------- ---------------------------- ID NUMBER NAME VARCHAR2(30) ADDR VARCHAR2(2) AMOUNT NUMBER HIREDATA DATE SQL> !ls -ltr total 7640 -rw-r--r-- 1 oracle dba 519 Sep 1 17:50 fls.sql -rw-r--r-- 1 oracle dba 0 Sep 4 11:02 expdat.dmp -rw-r--r-- 1 oracle dba 7792065 Sep 9 17:33 dictforscott.dic -rw-r--r-- 1 oracle dba 484 Sep 29 15:34 afiedt.buf -rw-r--r-- 1 oracle dba 147 Sep 29 15:40 ext_sale_n1.txt -rw-r--r-- 1 oracle dba 143 Sep 29 15:42 ext_sale_n2.txt SQL> !cat ext_sale_n1.txt ext_sale_n2.txt 111,LINDA,ea,111000,20030902 222,ELBERT,eb,222000,20031002 222,JENIFER,ma,222000,20020902 333,JANE,mb,333000,20021002 333,JENNY,sd,333000,20021202 444,JUDY,sa,111000,20030902 444,PERL,sb,222000,20031002 555,JAMES,ea,222000,20020902 555,JOHN,eb,333000,20021002 666,MALCOM,wb,333000,20021202 SQL> select * from ext_sale_part; ID NAME AD AMOUNT HIREDATA ---------- ------------------------------ -- ---------- --------- 444 JUDY sa 111000 02-SEP-03 444 PERL sb 222000 02-OCT-03 555 JAMES ea 222000 02-SEP-02 555 JOHN eb 333000 02-OCT-02 666 MALCOM wb 333000 02-DEC-02 111 LINDA ea 111000 02-SEP-03 222 ELBERT eb 222000 02-OCT-03 222 JENIFER ma 222000 02-SEP-02 333 JANE mb 333000 02-OCT-02 333 JENNY sd 333000 02-DEC-02 10 rows selected. SQL> !ls -ltr total 7652 -rw-r--r-- 1 oracle dba 519 Sep 1 17:50 fls.sql -rw-r--r-- 1 oracle dba 0 Sep 4 11:02 expdat.dmp -rw-r--r-- 1 oracle dba 7792065 Sep 9 17:33 dictforscott.dic -rw-r--r-- 1 oracle dba 147 Sep 29 15:40 ext_sale_n1.txt -rw-r--r-- 1 oracle dba 143 Sep 29 15:42 ext_sale_n2.txt -rw-r--r-- 1 oracle dba 427 Sep 29 15:48 afiedt.buf -rw-r--r-- 1 oracle dba 843 Sep 29 15:48 EXT_SALE_PART_12937.log -rw-r--r-- 1 oracle dba 979 Sep 29 15:48 EXT_SALE_PART_12985.log -rw-r--r-- 1 oracle dba 979 Sep 29 15:48 EXT_SALE_PART_12983.log

badfile and logfile default . badfile logfile .

Page 129: Oracle History #6

[email protected] - 129 -

Oracle9i New Features http://www.ggola.com

SQL> create table sale_for_dw as 2 select a.id, b.name, a.addr, a.amount, b.hiredata 3 from sale_part a, ext_sale_part b 4 where a.addr = b.addr; Table created. SQL> select * from sale_for_dw ; ID NAME AD AMOUNT HIREDATA ---------- ------------------------------ -- ---------- --------- 30 JUDY sa 300 02-SEP-03 20 MALCOM wb 200 02-DEC-02

external table database table join data table . . SQL> select table_name, type_name, default_directory_name 2 from user_external_tables; TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NA -------------------- -------------------- -------------------- EXT_SALE_PART ORACLE_LOADER DIR_EXT_SALE SQL> select * from user_external_locations; TABLE_NAME LOCATION DIR DIRECTORY_NAME -------------------- -------------------- --- ------------------------------ EXT_SALE_PART ext_sale_n1.txt SYS DIR_EXT_SALE EXT_SALE_PART ext_sale_n2.txt SYS DIR_EXT_SALE

views monitoring external table, dictionary and files .

Page 130: Oracle History #6

[email protected] - 130 -

Oracle9i New Features http://www.ggola.com

9. Automatic Segment and Advanced Index Management Enhancement

automatic segment-space management

to 8i freelists free and used space data . free list contention

.

from 9i automatic space management blocks bitmap

freelist .

new bitmap management merit

1. pctused, freelists, freelists groups pctfree .

2. space freelists space segment space management .

3. multi-concurrent access freelist contention .

4. multi-instance . (rac )

limitations

1. locally managed tablspace .

2. system tablespace .

3. tablespace contents type permanent .

4. extent management local uniform 5 blocks extents extent management local autoallocate block size 16K 1M extent size .

5. default manual( dictionary managed tablespace ) auto .

auto table creation pctused, freelists, freelist groups . CF. tablespace tablespace level . (alter )

Page 131: Oracle History #6

[email protected] - 131 -

Oracle9i New Features http://www.ggola.com

architecture

- automatic segment-space bmb architecture . , bitmap block space utilization .

1. extent header block root bitmap block (intermediate bmb references) intermediate bmb .

2. intermediate bmb leaf bitmap blocks .

3. leaf bitmap blocks data block free space , full .

4. , user access segment header root - intermediate - leaf space .

5. mulit-concurrent access intermediate bmb "instance number, process id" hash concurrent processes

"process id" bmb leaf starting point . , bmb leaf block read

insert operation data block range .

example

SQL> conn system/manager SQL> create tablespace autotbs datafile '/app/oracle/oradata/NEWSVC/autotbs.dbf' 2 size 100M extent management local uniform size 512K 3 segment space management auto; Tablespace created. SQL> select tablespace_name, contents, extent_management, segment_space_management 2 from dba_tablespaces 3 where tablespace_name in ('SYSTEM', 'UNDO01', 'TEMP', 'AUTOTBS'); TABLESPACE_NAME CONTENTS EXTENT_MAN SEGMEN ------------------------------ --------- ---------- ------ AUTOTBS PERMANENT LOCAL AUTO TEMP TEMPORARY LOCAL MANUAL UNDO01 UNDO LOCAL MANUAL SYSTEM PERMANENT LOCAL MANUAL

permanent locally management tablespace system autotbs automatic segment-space .

SQL> create table auto_test (c number) 2 pctused 70 pctfree 20 initrans 5 maxtrans 23 3 storage(initial 2M next 2M minextents 3 maxextents 5000 pctincrease 50 freelists 3) 4 tablespace autotbs; Table created.

Page 132: Oracle History #6

[email protected] - 132 -

Oracle9i New Features http://www.ggola.com

free block management

block free space package free_blocks procedure . space management auto procedure error return . (freelists

error )

from 9i space_usage procedure space management auto free space

.

dbms_space package example

SQL> select table_name, tablespace_name, pct_free, pct_used, 2 ini_trans, max_trans, initial_extent, next_extent, 3 min_extents, max_extents, pct_increase, freelists 4 from user_tables 5 where table_name = 'AUTO_TEST'; TABLE_NAME TABLESPACE PCT_FREE PCT_USED INI_TRANS MAX_TRANS INITIAL_EXTENT ---------- ---------- ---------- ---------- ---------- ---------- -------------- NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE FREELISTS ----------- ----------- ----------- ------------ ---------- AUTO_TEST AUTOTBS 20 5 23 7340032 524288 1 2147483645 0

pct_free, init_trans, max_trans default . initial extent size segment extent storage

. , creation extent storage .

( pctused, freelists and groups )

SQL> desc dbms_space . . . . PROCEDURE SPACE_USAGE Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- SEGMENT_OWNER VARCHAR2 IN SEGMENT_NAME VARCHAR2 IN SEGMENT_TYPE VARCHAR2 IN UNFORMATTED_BLOCKS NUMBER OUT UNFORMATTED_BYTES NUMBER OUT FS1_BLOCKS NUMBER OUT FS1_BYTES NUMBER OUT FS2_BLOCKS NUMBER OUT FS2_BYTES NUMBER OUT FS3_BLOCKS NUMBER OUT FS3_BYTES NUMBER OUT FS4_BLOCKS NUMBER OUT FS4_BYTES NUMBER OUT FULL_BLOCKS NUMBER OUT FULL_BYTES NUMBER OUT PARTITION_NAME VARCHAR2 IN DEFAULT

Page 133: Oracle History #6

[email protected] - 133 -

Oracle9i New Features http://www.ggola.com

SQL> var unfbs number SQL> var unfbt number SQL> var fs1bs number SQL> var fs1bt number SQL> var fs2bs number SQL> var fs2bt number SQL> var fs3bs number SQL> var fs3bt number SQL> var fs4bs number SQL> var fs4bt number SQL> var fbs number SQL> var fbt number SQL> exec dbms_space.space_usage('SCOTT', 'AUTO_TEST', 'TABLE', :unfbs, :unfbt, - > :fs1bs, :fs1bt, :fs2bs, :fs2bt, :fs3bs, :fs3bt, :fs4bs, :fs4bt, :fbs, :fbt) pl/sql procedure successfully completed. SQL> print unfbs unfbt fbs fbt UNFBS ---------- 0 UNFBT ---------- 0 FBS ---------- 0 FBT ---------- 0 SQL> print fs1bs fs1bt fs2bs fs2bt fs3bs fs3bt fs4bs fs4bt FS1BS ---------- 0 FS1BT ---------- 0 FS2BS ---------- 0 FS2BT ---------- 0 FS3BS ---------- 0 FS3BT ---------- 0 FS4BS ---------- 0 FS4BT ---------- 0

0 . , data insert hwm .

Page 134: Oracle History #6

[email protected] - 134 -

Oracle9i New Features http://www.ggola.com

SQL> desc auto_test Name Null? Type ----------------------------------------- -------- ---------------------------- C NUMBER SQL> alter table auto_test add (c2 number, c3 number, c4 number, c5 number); Table altered. SQL> insert into auto_test values (1, 2, 3, 4, 5); 1 row created. SQL> insert into auto_test select * from auto_test; 1 row created. SQL> / 2 rows created. ... ... ... ... SQL> / 131072 rows created. SQL> / 262144 rows created. SQL> / 524288 rows created. SQL> / 1048576 rows created. SQL> commit;

data .

Page 135: Oracle History #6

[email protected] - 135 -

Oracle9i New Features http://www.ggola.com

SQL> exec dbms_space.space_usage('SCOTT', 'AUTO_TEST', 'TABLE', :unfbs, :unfbt, - > :fs1bs, :fs1bt, :fs2bs, :fs2bt, :fs3bs, :fs3bt, :fs4bs, :fs4bt, :fbs, :fbt) pl/sql procedure successfully completed. SQL> print unfbs unfbt fbs fbt UNFBS ---------- 0 UNFBT ---------- 0 FBS ---------- 6574 FBT ---------- 53854208

unformatted block insert block 6574 size 53854208 bytes . (insert ? pctfree ) SQL> print fs1bs fs1bt fs2bs fs2bt fs3bs fs3bt fs4bs fs4bt FS1BS ---------- 0 FS1BT ---------- 0 FS2BS ---------- 0 FS2BT ---------- 0 FS3BS ---------- 0 FS3BT ---------- 0 FS4BS ---------- 36 FS4BT ---------- 294912

fs1 0 ~ 25%, fs2 25 ~ 50%, fs3 50 ~ 75%, fs4 75 ~ 100% free space (HWM ) block size . 75 ~ 100%

block 36 294912 bytes .

Page 136: Oracle History #6

[email protected] - 136 -

Oracle9i New Features http://www.ggola.com

- 0 ~ 25% 0 ? data insert blocks . pctfree

fs1 fs2 free space . , fs1 pctfree full fs1 .

- pctfree block pctfree section (fs1, fs2, fs2, fs4 section ) pctfree

full . , section full

.

- block bytes blocks * db block size . ( ,

9i multi block size )

repair block management

pctfree alter table command . freelists space management auto alter command

bmb status rebuild .

procedure segment_fix_status .

dbms_repair package

1. block setting (corrupted block ) EX. exec dbms_repari.segment_fix_status(owner, name, type, fileno, blockno, status, partition) CF. status_value : 1(full), 2(fs1), 3(fs2), 4(fs3), 5(fs4)

2. pctfree data bmb rebuild

EX. exec dbms_repari.segment_fix_status(owner, name)

example

SQL> conn scott/tiger SQL> create public synonym DBMS_REPAIR for DBMS_REPAIR; SQL> grant execute on dbms_repair to scott; SQL> conn scott/tiger

Page 137: Oracle History #6

[email protected] - 137 -

Oracle9i New Features http://www.ggola.com

manual and auto space management

manual (freelists )

SQL> desc dbms_repair ... PROCEDURE SEGMENT_FIX_STATUS Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- SEGMENT_OWNER VARCHAR2 IN SEGMENT_NAME VARCHAR2 IN SEGMENT_TYPE BINARY_INTEGER IN DEFAULT FILE_NUMBER BINARY_INTEGER IN DEFAULT BLOCK_NUMBER BINARY_INTEGER IN DEFAULT STATUS_VALUE BINARY_INTEGER IN DEFAULT PARTITION_NAME VARCHAR2 IN DEFAULT ... SQL> exec dbms_repair.segment_fix_status('SCOTT', 'AUTO_TEST', file_number => 13, - > block_number => 69, status_value => 1);

scott schema auto_test table 13 datafile 69 block status 1 .

SQL> exec dbms_repair.segment_fix_status('SCOTT', 'AUTO_TEST');

scott auto_test bmb rebuild . .

SQL> conn system/manager SQL> create tablespace manual_tbs 2 datafile '/app/oracle/oradata/NEWSVC/manual_tbs.dbf' size 100M; SQL> conn scott/tiger SQL> create table mant (m number) tablespace manual_tbs; SQL> declare 2 i integer ; 3 j integer ; 4 begin 5 for i in 1..20 loop 6 for j in 1..300 loop 7 insert into mant values(j); 8 end loop; 9 end loop; 10 end; 11 / SQL> commit;

Page 138: Oracle History #6

[email protected] - 138 -

Oracle9i New Features http://www.ggola.com

SQL> select dbms_rowid.rowid_block_number(rowid), count(*) 2 from mant 3 group by dbms_rowid.rowid_block_number(rowid) ; DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(*) ------------------------------------ ---------- 10 660 11 660 12 660 13 660 14 660 15 660 16 660 17 660 18 660 19 60 10 rows selected.

. SQL> delete from mant where m < 100; 1980 rows deleted. SQL> commit; SQL> select dbms_rowid.rowid_block_number(rowid), count(*) 2 from mant 3 group by dbms_rowid.rowid_block_number(rowid) ; DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(*) ------------------------------------ ---------- 10 402 11 423 12 462 13 462 14 462 15 402 16 423 17 462 18 462 19 60 10 rows selected.

. . SQL> declare 2 i integer ; 3 j integer ; 4 begin 5 for i in 1..20 loop 6 for j in 1..300 loop 7 insert into mant values(j); 8 end loop; 9 end loop; 10 end; 11 / SQL> commit;

Page 139: Oracle History #6

[email protected] - 139 -

Oracle9i New Features http://www.ggola.com

auto (bmb )

SQL> select dbms_rowid.rowid_block_number(rowid), count(*) 2 from mant 3 group by dbms_rowid.rowid_block_number(rowid); DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(*) ------------------------------------ ---------- 10 402 11 423 12 462 13 462 14 462 15 402 16 423 17 462 18 462 19 660 20 660 21 660 22 660 23 660 24 660 25 660 26 660 27 660 28 120 19 rows selected.

. insert freelists free space insert .

SQL> conn system/manager SQL> create tablespace automatic_tbs 2 datafile '/app/oracle/oradata/NEWSVC/automatic_tbs.dbf' size 100M 3 extent management local uniform size 128K 4 segment space management auto; SQL> create table autot (a number) tablespace automatic_tbs; SQL> declare 2 i integer ; 3 j integer ; 4 begin 5 for i in 1..20 loop 6 for j in 1..300 loop 7 insert into autot values (j); 8 end loop; 9 end loop; 10 end; 11 / SQL> commit;

Page 140: Oracle History #6

[email protected] - 140 -

Oracle9i New Features http://www.ggola.com

SQL> select dbms_rowid.rowid_block_number(rowid), count(*) 2 from autot 3 group by dbms_rowid.rowid_block_number(rowid) ; DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(*) ------------------------------------ ---------- 12 660 13 660 15 660 16 660 17 660 18 660 19 660 20 660 21 60 24 660 10 rows selected.

freelists . SQL> delete from autot where a < 100; 1980 rows deleted. SQL> commit; SQL> select dbms_rowid.rowid_block_number(rowid), count(*) 2 from autot 3 group by dbms_rowid.rowid_block_number(rowid) ; DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(*) ------------------------------------ ---------- 12 423 13 462 15 462 16 462 17 402 18 423 19 462 20 462 21 60 24 402 10 rows selected.

freelists . SQL> exec dbms_repair.segment_fix_status('SCOTT', 'AUTOT');

bmb . SQL> declare 2 i integer ; 3 j integer ; 4 begin 5 for i in 1..20 loop 6 for j in 1..300 loop 7 insert into autot values (j); 8 end loop; 9 end loop; 10 end; 11 / SQL> commit;

Page 141: Oracle History #6

[email protected] - 141 -

Oracle9i New Features http://www.ggola.com

dictionary views

bmb views .

new data dictionary

1. segment_space_management of dba_tablespaces

2. changed meaning blocks, empty_blocks of dba_tables

example

SQL> select tablespace_name, segment_space_management 2 from dba_tablespaces 3 where tablespace_name in ('AUTOTBS', 'SYSTEM');

TABLESPACE_NAME SEGMEN ------------------------------ ------ SYSTEM MANUAL AUTOTBS AUTO

manual, new feature auto .

SQL> select dbms_rowid.rowid_block_number(rowid), count(*) 2 from autot 3 group by dbms_rowid.rowid_block_number(rowid) ; DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(*) ------------------------------------ ---------- 12 660 13 660 14 660 15 660 16 660 17 660 18 660 19 660 20 660 21 660 22 660 23 660 24 660 38 660 39 660 40 120 16 rows selected.

. freelists data . , space .

Page 142: Oracle History #6

[email protected] - 142 -

Oracle9i New Features http://www.ggola.com

SQL> analyze table auto_test compute statistics;

Table analyzed.

SQL> select blocks, empty_blocks from dba_tables 2 where table_name = 'AUTO_TEST';

BLOCKS EMPTY_BLOCKS ---------- ------------ 6610 110

manual tablespace blocks used blocks empty_blocks blocks auto tablespace blocks full table scan read blocks empty_blocks full table scan blocks .

migration

automatic space-management features compatible 9.0.0 .

migration , objects auto manual alter command . . space management tablespace

level .

objects tablespace move or rebuild space management

.

bitmap join index

dw system query join . 9i bitmap join index dw new

feature .

concept

- from table join columns index , table index .

architecture

- emp_btm table dept_btm table . table dept_id foreign

key .

Page 143: Oracle History #6

[email protected] - 143 -

Oracle9i New Features http://www.ggola.com

- table primary key relationship .

bitmap join index .

- [condition value][start rowid][end rowid][bitmap] , real value rowid rowid

row bitmap .

EX. 'SALES'1.1.120.7000.7100100011111000 'MARKETING'1.1.120.7000.7010010000000000 'SYSTEM'1.1.120.7000.7001001000000110 'CRM'1.1.120.7000.7000000100000001

bit . bit fact data map . , data bit .

example

- . test table

key data test .

- test database noarchivelog mode .

SQL> conn scott/tiger SQL> @?/rdbms/admin/utlxplan.sql SQL> !more plan.sql column plan_view format a100 select substr(lpad(' ',2*(level-1))||operation||' '||options ||' '||object_name,1,200) || '-- COST : ' || COST "Plan View" from plan_table start with id=0 and statement_id = 'test' connect by prior id = parent_id and STATEMENT_ID='test' order by id; delete from plan_table where statement_id='test' ; commit ;

test plan table plan sql . SQL> create table emp_btm (emp_id number, dept_id number) nologging; SQL> create table dept_btm (dept_id number, dept_name varchar2(10)) nologging; SQL> alter table emp_btm add constraint pk_emp_btm primary key(emp_id); SQL> alter table dept_btm add constraint pk_dept_btm primary key(dept_id); SQL> alter index pk_dept_btm nologging;

Page 144: Oracle History #6

[email protected] - 144 -

Oracle9i New Features http://www.ggola.com

SQL> alter index pk_emp_btm nologging; SQL> alter table emp_btm add constraint fk_emp_dept 2 foreign key (dept_id) references dept_btm; SQL> alter table emp_btm disable constraint fk_emp_dept;

object data . SQL> get test.sql 1 declare 2 i integer; 3 j integer; 4 k integer; 5 f integer; 6 begin 7 for i in 1..500 loop 8 for j in 1..10000 loop 9 k := to_number(to_char(i) || substr(to_char(j, '00000'),2)); 10 if j < 1000 then 11 insert into dept_btm values (k, 'SALES'); 12 elsif j < 2000 then 13 insert into dept_btm values (k, 'SYSTEM'); 14 elsif j < 3000 then 15 insert into dept_btm values (k, 'MARKETING'); 16 elsif j < 4000 then 17 insert into dept_btm values (k, 'EBIZ'); 18 elsif j < 5000 then 19 insert into dept_btm values (k, 'CISC'); 20 elsif j < 6000 then 21 insert into dept_btm values (k, 'PAYMENT'); 22 elsif j < 7000 then 23 insert into dept_btm values (k, 'ERP'); 24 elsif j < 8000 then 25 insert into dept_btm values (k, 'STATISTICS'); 26 elsif j < 9000 then 27 insert into dept_btm values (k, 'MATERIAL'); 28 else 29 insert into dept_btm values (k, 'CRM'); 30 end if; 31 f := to_number(to_char(i) || to_char(i) || substr(to_char(j, '00000'),2)); 32 insert into emp_btm values (f, k); 33 end loop; 34 commit; 35 end loop; 36 commit; 37 end; 38 / SQL> commit; SQL> select count(*) from emp_btm; COUNT(*) ---------- 5000000 SQL> select count(*) from dept_btm; COUNT(*) ---------- 5000000

Page 145: Oracle History #6

[email protected] - 145 -

Oracle9i New Features http://www.ggola.com

SQL> alter table emp_btm enable constraint fk_emp_dept;

foreign key . SQL> analyze table emp_btm compute statistics; SQL> analyze table dept_btm compute statistics; SQL> explain plan set statement_id = 'test' for 2 select d.dept_name, sum(emp_id), sum(1) from emp_btm e, dept_btm d 3 where e.dept_id = d.dept_id and d.dept_name in ('EBIZ', 'CRM') 4 and e.emp_id < 200000000 and d.dept_id < 200000000 5 group by d.dept_name; Explained. SQL> @plan Plan View -------------------------------------------------------------------------------- SELECT STATEMENT -- COST : 1484 SORT GROUP BY -- COST : 1484 HASH JOIN -- COST : 1417 TABLE ACCESS BY INDEX ROWID EMP_BTM-- COST : 99 INDEX RANGE SCAN PK_EMP_BTM-- COST : 47 TABLE ACCESS FULL DEPT_BTM-- COST : 757 SQL> select d.dept_name, sum(emp_id), sum(1) from emp_btm e, dept_btm d 2 where e.dept_id = d.dept_id and d.dept_name in ('EBIZ', 'CRM') 3 and e.emp_id < 200000000 and d.dept_id < 200000000 4 group by d.dept_name; DEPT_NAME SUM(EMP_ID) SUM(1) ---------- ----------- ---------- CRM 1.5157E+12 19019 EBIZ 1.5141E+12 19000 Elapsed: 00:00:16.47

sql . SQL> create index ik_dept_name on dept_btm(dept_name); SQL> analyze index ik_dept_name compute statistics; SQL> explain plan set statement_id = 'test' for 2 select d.dept_name, sum(emp_id), sum(1) from emp_btm e, dept_btm d 3 where e.dept_id = d.dept_id and d.dept_name in ('EBIZ', 'CRM') 4 and e.emp_id < 200000000 and d.dept_id < 200000000 5 group by d.dept_name; Explained. SQL> @plan Plan View -------------------------------------------------------------------------------- SELECT STATEMENT -- COST : 1484 SORT GROUP BY -- COST : 1484 HASH JOIN -- COST : 1417 TABLE ACCESS BY INDEX ROWID EMP_BTM-- COST : 99 INDEX RANGE SCAN PK_EMP_BTM-- COST : 47 TABLE ACCESS FULL DEPT_BTM-- COST : 757

plan . , dept_name index . .

Page 146: Oracle History #6

[email protected] - 146 -

Oracle9i New Features http://www.ggola.com

SQL> select d.dept_name, sum(emp_id), sum(1) from emp_btm e, dept_btm d 2 where e.dept_id = d.dept_id and d.dept_name in ('EBIZ', 'CRM') 3 and e.emp_id < 200000000 and d.dept_id < 200000000 4 group by d.dept_name; DEPT_NAME SUM(EMP_ID) SUM(1) ---------- ----------- ---------- CRM 1.5157E+12 19019 EBIZ 1.5141E+12 19000 Elapsed: 00:00:13.46

buffer . SQL> create bitmap index bit_emp_dept_name on emp_btm(d.dept_name) 2 from emp_btm e, dept_btm d 3 where e.dept_id = d.dept_id; Index created.

bitmap join index . SQL> explain plan set statement_id = 'test' for 2 select d.dept_name, sum(emp_id), sum(1) from emp_btm e, dept_btm d 3 where e.dept_id = d.dept_id and d.dept_name in ('EBIZ', 'CRM') 4 and e.emp_id < 200000000 and d.dept_id < 200000000 5 group by d.dept_name; Explained. SQL> @plan Plan View -------------------------------------------------------------------------------- SELECT STATEMENT -- COST : 1484 SORT GROUP BY -- COST : 1484 HASH JOIN -- COST : 1417 TABLE ACCESS BY INDEX ROWID EMP_BTM-- COST : 99 INDEX RANGE SCAN PK_EMP_BTM-- COST : 47 TABLE ACCESS FULL DEPT_BTM-- COST : 757

sql plan 3 . bitmap index . bitmap join index dw star schema 50 table data new index feature .

hint index . SQL> explain plan set statement_id = 'test' for 2 select /*+ INDEX(e BIT_EMP_DEPT_NAME) */ 3 d.dept_name, sum(emp_id), sum(1) 4 from emp_btm e, dept_btm d 5 where e.dept_id = d.dept_id and d.dept_name in ('EBIZ', 'CRM') 6 and e.emp_id < 200000000 and d.dept_id < 200000000 7 group by d.dept_name; Explained.

Page 147: Oracle History #6

[email protected] - 147 -

Oracle9i New Features http://www.ggola.com

SQL> @plan Plan View -------------------------------------------------------------------------------- SELECT STATEMENT -- COST : 2280 SORT GROUP BY -- COST : 2280 HASH JOIN -- COST : 2214 TABLE ACCESS BY INDEX ROWID EMP_BTM-- COST : 895 BITMAP CONVERSION TO ROWIDS -- COST : BITMAP AND -- COST : BITMAP OR -- COST : BITMAP INDEX SINGLE VALUE BIT_EMP_DEPT_NAME-- COST : BITMAP INDEX SINGLE VALUE BIT_EMP_DEPT_NAME-- COST : BITMAP CONVERSION FROM ROWIDS -- COST : SORT ORDER BY -- COST : INDEX RANGE SCAN PK_EMP_BTM-- COST : 47 TABLE ACCESS FULL DEPT_BTM-- COST : 757

COST . . SQL> select /*+ INDEX(e BIT_EMP_DEPT_NAME) */ 2 d.dept_name, sum(emp_id), sum(1) 3 from emp_btm e, dept_btm d 4 where e.dept_id = d.dept_id and d.dept_name in ('EBIZ', 'CRM') 5 and e.emp_id < 200000000 and d.dept_id < 200000000 6 group by d.dept_name ; DEPT_NAME SUM(EMP_ID) SUM(1) ---------- ----------- ---------- CRM 1.5157E+12 19019 EBIZ 1.5141E+12 19000 Elapsed: 00:00:10.05

. . ( memory )

. hint sql SQL#1, hint bitmap join index sql SQL#2 .

SQL#1> 5 : 9.4 SQL#2> 5 : 8.4

test plan bitmap join index 1 . . emp_id dept_id . SQL> select d.dept_name, sum(emp_id), sum(1) 2 from emp_btm e, dept_btm d 3 where e.dept_id = d.dept_id and d.dept_name in ('EBIZ', 'CRM') 4 and e.emp_id < 2000000000 and d.dept_id < 2000000000 5 group by d.dept_name ; DEPT_NAME SUM(EMP_ID) SUM(1) ---------- ----------- ---------- CRM 4.9641E+13 99099 EBIZ 4.9590E+13 99000 SQL#1> 5 : 33.1

Page 148: Oracle History #6

[email protected] - 148 -

Oracle9i New Features http://www.ggola.com

monitor and characteristics

dba_indexes

- dba_indexes : join_index column

- 9i join index true, false 9i R2

YES or NO .

- bit_emp_dept_name index table emp_btm

column emp_btm . .

dba_ind_columns

- dba_ind_columns : bitmap join index table_name, table_owner dba_indexes . (bitmap join index tables

)

SQL> select /*+ INDEX(e BIT_EMP_DEPT_NAME) */ 2 d.dept_name, sum(emp_id), sum(1) 3 from emp_btm e, dept_btm d 4 where e.dept_id = d.dept_id and d.dept_name in ('EBIZ', 'CRM') 5 and e.emp_id < 2000000000 and d.dept_id < 2000000000 6 group by d.dept_name ; DEPT_NAME SUM(EMP_ID) SUM(1) ---------- ----------- ---------- CRM 4.9641E+13 99099 EBIZ 4.9590E+13 99000 SQL#2> 5 : 34.6

hint sql . , .

bitmap join index test case table join data . bitmap join index .

SQL> select table_name, table_type, index_name, index_type, join_index 2 from user_indexes 3 where table_name = 'EMP_BTM'; TABLE_NAME TABLE_TYPE INDEX_NAME INDEX_TYPE JOI -------------------- ---------- -------------------- ---------- --- EMP_BTM TABLE BIT_EMP_DEPT_NAME BITMAP YES EMP_BTM TABLE PK_EMP_BTM NORMAL NO

Page 149: Oracle History #6

[email protected] - 149 -

Oracle9i New Features http://www.ggola.com

- dba_join_ind_columns : bitmap join index join condition .

characteristics

1. merit : good join query performance . indexes space .

dw star schema large dimension bitmap join index materialized view indexes space

.

2. demerit : query bitmap join index

. base table bitmap join index (building or refrsh) cost . ( , bitmap join index indexes

)

limitations

1. bitmap join index tables update .

2. join table .

3. function based index .

4. iot or temporary table .

5. dimension table primary key unique value(unique constraints) .

6. table primary key composite , bitmap join index pk columns join

.

SQL> select index_name, table_name, column_name 2 from user_ind_columns 3 where index_name = 'BIT_EMP_DEPT_NAME'; INDEX_NAME TABLE_NAME COLUMN_NAM -------------------- -------------------- ---------- BIT_EMP_DEPT_NAME DEPT_BTM DEPT_NAME

bit_emp_dept_name index index column table column . SQL> select * from user_join_ind_columns ; INDEX_NAME INNER_TABL INNER_TABL INNER_TABL OUTER_TABL OUTER_TABL OUTER_TABL -------------------- ---------- ---------- ---------- ---------- ---------- ---------- BIT_EMP_DEPT_NAME SCOTT EMP_BTM DEPT_ID SCOTT DEPT_BTM DEPT_ID

bitmap join index join column .

Page 150: Oracle History #6

[email protected] - 150 -

Oracle9i New Features http://www.ggola.com

10. Advanced Performance Features for Index, Cursor, Optimizing and Statistics

unused index

indexes index

. from 9i new feature monitoring index

.

unused index space conservation, dml unnecessary statement overhead performance

.

concept

1. index usage statistics

2. index usage statistics query parse time

3. turn on index monitor

4. index monitor turn on and off compiled cursor invalidate and re-compile

application start database action

.

usage

1. alter index index_name monitoring|nomonitoring usage;

2. default nomonitoring usage .

monitoring

- v$object_usage monitoring . (real data dictionary instance crash

query parse time )

- index monitoring monitoring . (until drop

the index)

example

-

Page 151: Oracle History #6

[email protected] - 151 -

Oracle9i New Features http://www.ggola.com

SQL> conn scott/tiger SQL> select table_name, index_name, monitoring, 2 used, start_monitoring, end_monitoring 3 from v$object_usage ; no rows selected SQL> desc dept_btm Name Null? Type ----------------------------------------- -------- ---------------------------- DEPT_ID NOT NULL NUMBER DEPT_NAME VARCHAR2(10) SQL> select count(*) from dept_btm; COUNT(*) ---------- 5000000 SQL> select index_name from user_indexes 2 where table_name = 'DEPT_BTM'; INDEX_NAME ------------------------------ IK_DEPT_NAME PK_DEPT_BTM SQL> explain plan set statement_id = 'test' for 2 select sum(dept_id) from dept_btm 3 where dept_name = 'SYSTEM' and dept_id between 2000000 and 3000000 4 group by dept_name; Explained. SQL> @plan Plan View -------------------------------------------------------------------------------- SELECT STATEMENT -- COST : 469 SORT GROUP BY NOSORT -- COST : 469 TABLE ACCESS BY INDEX ROWID DEPT_BTM-- COST : 469 INDEX RANGE SCAN PK_DEPT_BTM-- COST : 203 SQL> alter index pk_dept_btm monitoring usage; Index altered. SQL> select sum(dept_id) from dept_btm 2 where dept_name = 'SYSTEM' and dept_id between 2000000 and 3000000 3 group by dept_name; SUM(DEPT_ID) ------------ 2.4515E+10 SQL> select sum(dept_id) from dept_btm 2 where dept_name = 'SYSTEM' and dept_id between 1000000 and 2000000 3 group by dept_name; SUM(DEPT_ID) ------------

1.4515E+10 SQL> explain plan set statement_id = 'test' for 2 select sum(dept_id) from dept_btm 3 where dept_name = 'SYSTEM' 4 group by dept_name; Explained.

Page 152: Oracle History #6

[email protected] - 152 -

Oracle9i New Features http://www.ggola.com

- monitoring user access

application monitoring .

SQL> @plan Plan View -------------------------------------------------------------------------------- SELECT STATEMENT -- COST : 757 SORT GROUP BY NOSORT -- COST : 757 TABLE ACCESS FULL DEPT_BTM-- COST : 757 SQL> select sum(dept_id) from dept_btm 2 where dept_name = 'SYSTEM' 3 group by dept_name; SUM(DEPT_ID) ------------

1.2526E+13 index full table scan monitoring

( plan parsing monitoring ) SQL> select table_name, index_name, monitoring, 2 used, start_monitoring, end_monitoring

3 from v$object_usage ;

TABLE_NAME INDEX_NAME MON USE START_MONITORING END_MONITORING ---------- --------------- --- --- ------------------- ------------------- DEPT_BTM PK_DEPT_BTM YES YES 10/07/2003 13:54:48

dept_btm pk_dept_btm index monitoring start_monitoring monitoring = YES , used = YES , . SQL> select sum(dept_id) from dept_btm 2 where dept_name = 'SYSTEM' and dept_id between 1000000 and 1300000 3 group by dept_name; SUM(DEPT_ID) ------------

3304498500 SQL> alter index pk_dept_btm nomonitoring usage; Index altered.

index nomonitoring usage SQL> select table_name, index_name, monitoring, 2 used, start_monitoring, end_monitoring

3 from v$object_usage ;

TABLE_NAME INDEX_NAME MON USE START_MONITORING END_MONITORING ---------- --------------- --- --- ------------------- ------------------- DEPT_BTM PK_DEPT_BTM NO YES 10/07/2003 13:54:48 10/07/2003 14:00:21

monitoring = NO , monitoring end_monitoring monitoring . used YES, NO

. index view index monitoring monitoring index drop

v$object_usage .

Page 153: Oracle History #6

[email protected] - 153 -

Oracle9i New Features http://www.ggola.com

skip scanning algorithm

leading column index scanning

- composite index column leading column

.

- leading column where condition index (full table scan or fast full index scan) leading column where condition index

.

- from 9i leading column index . skip

scanning .

merit and limit

- merit

1. leading column column value query .

2. index dml .

3. composite index leading column .

( composite index 2

index )

- limit reverse key, bitmap, domain, function-based index

.

algorithm

1. index branch block leaf block access .

2. branch block first entry last entry column .

3. leaf block read .

Page 154: Oracle History #6

[email protected] - 154 -

Oracle9i New Features http://www.ggola.com

4. (branch block ) skip

5. read skip

6. skip scan read index leaf block read .

CF. , skip block fast full index scan .

sample process

1. branch block . "1 F", "2 B", "5 C" "5 C", "8 K", "9 A"

2. C .

3. first branch block leaf block "1 F" "C" . ( scan)

4. first branch block leaf block "1 E" "C" .

5. first branch block leaf block "1 E" "2 B" "C" . ( skip)

6. first branch block leaf block "5 C" read

7. read "4 C" block “4D” "5 C" "C"

. ( skip)

skip or skip leading column index scan .

example

SQL> create table dept_skip as select * from dept_btm where rownum < 4000000; Table created. SQL> select count(*) from dept_skip; COUNT(*) ---------- 3999999 SQL> create index ik_dept_skip_comp on dept_skip(dept_id, dept_name); Index created. SQL> analyze table dept_skip compute statistics; Table analyzed.

Page 155: Oracle History #6

[email protected] - 155 -

Oracle9i New Features http://www.ggola.com

SQL> explain plan for 2 select /*+ index_ss(a ik_dept_skip_comp) */ 3 dept_name, sum(1) 4 from dept_skip a 5 where dept_name = 'CRM' 6 group by dept_name; Explained. SQL> @?/rdbms/admin/utlxpls.sql PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 6 | 4000K| | 1 | SORT GROUP BY NOSORT| | 1 | 6 | 4000K| |* 2 | INDEX SKIP SCAN | IK_DEPT_SKIP_COMP | 400K| 2343K| 4000K| --------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------------------- 2 - access("A"."DEPT_NAME"='CRM') filter("A"."DEPT_NAME"='CRM') Note: cpu costing is off SQL> delete from plan_table; SQL> commit; SQL> explain plan for 2 select dept_name, sum(1) 3 from dept_skip a 4 where dept_name = 'CRM' 5 group by dept_name; Explained. SQL> @?/rdbms/admin/utlxpls.sql PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------------------- -------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 6 | 613 | | 1 | SORT GROUP BY NOSORT| | 1 | 6 | 613 | |* 2 | TABLE ACCESS FULL | DEPT_SKIP | 400K| 2343K| 613 | -------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------------------- 2 - filter("A"."DEPT_NAME"='CRM')

index skip scan full table scan cost . skip scanning table

. ...

Page 156: Oracle History #6

[email protected] - 156 -

Oracle9i New Features http://www.ggola.com

cursor sharing

option

1. 8i initial parameter cursor_sharing option sharing sql . EX. cursor_sharing = force|exact

2. , force setting bind variable literal value sql literal value cursor sharing option . (default exact sql text cursor sharing)

3. from 9i similar option . option force literal

value sql literal value cursor sharing .

, safe literal only plan (force option ) plan

. safe literal literal value plan

literal value .

SQL> select /*+ index_ss(a ik_dept_skip_comp) */ 2 dept_name, sum(1) 3 from dept_skip a 4 where dept_name = 'CRM' 5 group by dept_name; DEPT_NAME SUM(1) ---------- ---------- CRM 399994 Elapsed: 00:00:05.71 SQL> select dept_name, sum(1) 2 from dept_skip a 3 where dept_name = 'CRM' 4 group by dept_name; DEPT_NAME SUM(1) ---------- ---------- CRM 399994 Elapsed: 00:00:04.29

full table scan . ? test table table index columns . , full table scan . table (full table scan multi block read )

index scan skip block skip index scan . ( full table scan database buffer cache )

Page 157: Oracle History #6

[email protected] - 157 -

Oracle9i New Features http://www.ggola.com

option

1. cursor sharing safe .

2. sql (binding ) literal value plan .

3. , literal value index plan

full table scan force option .

4. similar option histogram cursor sharing plan

.

1. initial parameter : cursor_sharing = force

2. system level : alter system set cursor_sharing = exact

3. session level : alter session set cursor_sharing = similar

example

SQL> drop index ik_dept_skip_comp; Index dropped. SQL> insert into dept_skip values (100, 'NEWPART'); 1 row created. SQL> update dept_skip set dept_name = 'SYSTEM' 2 where dept_name = 'SALES'; 399600 rows updated. SQL> update dept_skip set dept_name = 'SYSTEM' 2 where dept_name = 'MARKETING'; 400000 rows updated. SQL> commit; SQL> create index ik_deptskip_name on dept_skip(dept_name); Index created. SQL> analyze table dept_skip compute statistics; Table analyzed.

literal value trace . force#1.

Page 158: Oracle History #6

[email protected] - 158 -

Oracle9i New Features http://www.ggola.com

SQL> alter session set cursor_sharing = FORCE; Session altered. SQL> alter session set sql_trace=true; Session altered. SQL> select dept_name, sum(dept_id) from dept_skip 2 where dept_name = 'SYSTEM' 3 group by dept_name; DEPT_NAME SUM(DEPT_ID) ---------- ------------ SYSTEM 2.4054E+13 SQL> alter session set sql_trace=false; Session altered. SQL> exit

literal value trace . force #2. [NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/udump> sqlplus scott/tiger SQL> alter session set cursor_sharing = FORCE; Session altered. SQL> alter session set sql_trace=true; Session altered. SQL> select dept_name, sum(dept_id) from dept_skip 2 where dept_name = 'NEWPART' 3 group by dept_name; DEPT_NAME SUM(DEPT_ID) ---------- ------------ NEWPART 100 SQL> alter session set sql_trace=false; Session altered.

. cursor sharing option shared pool flush . SQL> conn system/manager SQL> alter system flush shared_pool; System altered. SQL> exit

literal value trace . similar #1.

Page 159: Oracle History #6

[email protected] - 159 -

Oracle9i New Features http://www.ggola.com

- 4 trace .

1. force #1 : force option literal value "SYSTEM" . (full table scan )

2. force #2 : force option literal value "NEWPART" . (1 index range scan

)

3. similar #1 : similar option literal value "SYSTEM" . (full table scan )

4. similar #2 : similar option literal value "NEWPART" . (1 index range scan )

[NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/udump> sqlplus scott/tiger SQL> alter session set cursor_sharing = SIMILAR; Session altered. SQL> alter session set sql_trace=true; Session altered. SQL> select dept_name, sum(dept_id) from dept_skip 2 where dept_name = 'SYSTEM' 3 group by dept_name; DEPT_NAME SUM(DEPT_ID) ---------- ------------ SYSTEM 2.4054E+13 SQL> alter session set sql_trace=false; Session altered. SQL> exit

literal value trace similar #2. [NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/udump> sqlplus scott/tiger SQL> alter session set cursor_sharing = SIMILAR; Session altered. SQL> alter session set sql_trace=true; Session altered. SQL> select dept_name, sum(dept_id) from dept_skip 2 where dept_name = 'NEWPART' 3 group by dept_name; DEPT_NAME SUM(DEPT_ID) ---------- ------------ NEWPART 100 SQL> alter session set sql_trace=false; Session altered.

Page 160: Oracle History #6

[email protected] - 160 -

Oracle9i New Features http://www.ggola.com

force #1

force#2

select dept_name, sum(dept_id) from dept_skip where dept_name = :"SYS_B_0" group by dept_name call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.01 0.00 0 84 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 2 3.93 5.51 3342 9986 0 1 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 4 3.94 5.52 3342 10070 0 1 Rows Row Source Operation ------- --------------------------------------------------- 1 SORT GROUP BY NOSORT 1199600 TABLE ACCESS FULL DEPT_SKIP Rows Execution Plan ------- --------------------------------------------------- 0 SELECT STATEMENT GOAL: CHOOSE 1 SORT (GROUP BY NOSORT) 1199600 TABLE ACCESS GOAL: ANALYZED (FULL) OF 'DEPT_SKIP'

sql binding full table scan 10070 blocks read .

select dept_name, sum(dept_id) from dept_skip where dept_name = :"SYS_B_0" group by dept_name call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 2 2.35 4.70 3342 9986 0 1 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 4 2.35 4.70 3342 9986 0 1 Rows Row Source Operation ------- --------------------------------------------------- 1 SORT GROUP BY NOSORT 1 TABLE ACCESS FULL DEPT_SKIP Rows Execution Plan ------- --------------------------------------------------- 0 SELECT STATEMENT GOAL: CHOOSE 1 SORT (GROUP BY NOSORT) 1 TABLE ACCESS GOAL: ANALYZED (FULL) OF 'DEPT_SKIP'

sql binding full table scan 9986 blocks read . index force option parsed sql

parse query block 0 . , binding sql literal value sql hard parse .

Page 161: Oracle History #6

[email protected] - 161 -

Oracle9i New Features http://www.ggola.com

similar #1

similar #2

select dept_name, sum(dept_id) from dept_skip where dept_name = :"SYS_B_0" group by dept_name call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.01 0.00 0 84 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 2 3.99 5.32 3342 9986 0 1 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 4 4.00 5.33 3342 10070 0 1 Rows Row Source Operation ------- --------------------------------------------------- 1 SORT GROUP BY NOSORT 1199600 TABLE ACCESS FULL DEPT_SKIP Rows Execution Plan ------- --------------------------------------------------- 0 SELECT STATEMENT GOAL: CHOOSE 1 SORT (GROUP BY NOSORT) 1199600 TABLE ACCESS GOAL: ANALYZED (FULL) OF 'DEPT_SKIP'

sql binding full table scan 10070 blocks read . , force #1 .

select dept_name, sum(dept_id) from dept_skip where dept_name = :"SYS_B_0" group by dept_name call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 2 0.00 0.00 0 4 0 1 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 4 0.00 0.00 0 4 0 1 Rows Row Source Operation ------- --------------------------------------------------- 1 SORT GROUP BY NOSORT 1 TABLE ACCESS BY INDEX ROWID DEPT_SKIP 1 INDEX RANGE SCAN IK_DEPTSKIP_NAME (object id 28787) Rows Execution Plan ------- --------------------------------------------------- 0 SELECT STATEMENT GOAL: CHOOSE 1 SORT (GROUP BY NOSORT) 1 TABLE ACCESS GOAL: ANALYZED (FULL) OF 'DEPT_SKIP'

sql binding index range scan 4 blocks read . index range scan cursor sharing option parsed sql parse query block 0 . , binding sql literal value sql hard parse execution plan row source operation index range scan

.

Page 162: Oracle History #6

[email protected] - 162 -

Oracle9i New Features http://www.ggola.com

pl/sql

[NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/udump> sqlplus scott/tiger SQL> alter session set cursor_sharing = FORCE; Session altered. SQL> alter session set sql_trace=true; Session altered. SQL> set serveroutput on SQL> declare 2 vn_cnt number; 3 vs_name string(30); 4 begin 5 select dept_name, sum(dept_id) 6 into vs_name, vn_cnt 7 from dept_skip 8 where dept_name = 'MATERIAL' 9 group by dept_name; 10 dbms_output.put_line(vs_name || ':' || to_char(vn_cnt)); 11 end; 12 / SYSTEM:24053779400000 SQL> alter session set sql_trace=false; Session altered.

trace . SELECT dept_name, sum(dept_id) from dept_skip where dept_name = 'MATERIAL' group by dept_name call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.01 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 1 2.96 4.96 3342 9986 0 1 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 3 2.97 4.97 3342 9986 0 1 Rows Row Source Operation ------- --------------------------------------------------- 1 SORT GROUP BY NOSORT 400000 TABLE ACCESS FULL DEPT_SKIP Rows Execution Plan ------- --------------------------------------------------- 0 SELECT STATEMENT GOAL: CHOOSE 1 SORT (GROUP BY NOSORT) 400000 TABLE ACCESS GOAL: ANALYZED (FULL) OF 'DEPT_SKIP'

. pl/sql block sql binding . , cursor sharing . pl/sql block table data

plan hint . parse query block 0 pl/sql block parsing parse . , cursor sharing option default exact literal value parse block binding .

Page 163: Oracle History #6

[email protected] - 163 -

Oracle9i New Features http://www.ggola.com

cached plan

meaning

1. sql tuning application sql tuning sql .

2. sql plan tuning plan .

3. cached plan sql plan (actual plan) memory .

CF. sql library cache age out actual plan .

?

- dynamic performance view v$sql_plan actual plan .

- v$sql plan_hash_value v$sql_plan .

example

SQL> conn system/manager SQL> alter system flush shared_pool; SQL> conn scott/tiger SQL> select dept_name, sum(dept_id) from dept_skip 2 where dept_name = 'NEWPART' 3 group by dept_name; DEPT_NAME SUM(DEPT_ID) ---------- ------------ NEWPART 100 SQL> select substr(lpad(' ',2*(level-1))||operation||' '||options 2 ||' '||object_name,1,200) || '-- COST : ' || COST "Plan View" 3 from v$sql_plan 4 where (address, hash_value, child_number) 5 in (select address, hash_value, child_number 6 from v$sql 7 where sql_text like '%dept_name%'); Plan View ----------------------------------------- SELECT STATEMENT -- COST : 618 SORT GROUP BY NOSORT -- COST : 618 TABLE ACCESS FULL DEPT_SKIP-- COST : 618

Page 164: Oracle History #6

[email protected] - 164 -

Oracle9i New Features http://www.ggola.com

extended first_rows optimizer mode

meaning

1. to 8i first_rows index return time plan .

2. first_rows plan .

3. first_rows option plan .

how?

1. optimizer mode goal .

2. optimizer_mode = first_rows_[1~n] CF. n .

1, 10, 100, 1000 . .

3. n rows return plan .

CF. first_rows_n _n first_rows mode .

1. initial parameter : first_rows_[1 | 10 | 100 | 1000]

2. session level : alter session set optimizer_mode = first_rows_1000;

3. statement level : select /*+ first_rows(1000) */ ...

new gathering statistics (estimates)

estimates?

1. cost based optimizer statistics statistics

gathering .

2. database statistics compute gathering

. , temporary space compute statistics

gathering . ( ,

Page 165: Oracle History #6

[email protected] - 165 -

Oracle9i New Features http://www.ggola.com

data blocks index depth(from root to leaf blocks) compute statistics

)

3. from 9i dbms_stats estimate_percent value sub procedure auto_sample_size sample size method_opt options statistics gathering .

method_opt parameter

1. repeat : gathering histogram columns histogram gathering . (

column histogram statistics gathering )

2. auto : histogram data distribution application .

range . ( , application application workload

skewonly option )

3. skewonly : application data distribution .

CF. statistics gathering skewonly option application auto option gathering

.

CF. workload hard parse sga disk write . ( , 9i

memory disk structure access )

EX. exec dbms_stats.gather_schema_stats (ownname => 'HR', estimate_percent => dbms_stats.auto_sample_size, method_opt => 'for all columns size AUTO');

added value for gather_schema_stats option parameter

- statistics gathering to 8i monitoring flag setting gather stale option object statistics gathering

gather empty option statistics objects statistics gathering .

- auto : option gather auto gather stale + gather empty . EX. exec dbms_stats.gather_schema_stats (ownname => 'HR', options => 'GATHER AUTO');

Page 166: Oracle History #6

[email protected] - 166 -

Oracle9i New Features http://www.ggola.com

example

SQL> conn system/manager

SQL> exec dbms_stats.gather_schema_stats (ownname => 'SCOTT', estimate_percent => dbms_stats.auto_sample_size, method_opt => 'for all columns size AUTO');

pl/sql procedure successfully completed.

system statistics

new procedure for system statistics system statistics i/o, cpu utilization

execution plan cpu io cost .

new procedure

1. dbms_stats.gather_system_stats : system statistics gathering

2. dbms_stats.get_system_stats : stats table or dictionary system parameter

value (parameter system statistics )

3. dbms_stats.set_system_stats : stats table or dictionary system parameter value

set

CF. parameters : 1. sreadtim : average time to read single block (random read), in milliseconds 2. mreadtim : average time to read an mbrc block at once (sequential read), in milliseconds 3. cpuspeed : average number of cpu cycles per second, in millions 4. mbrc : average multiblock read count for sequential read, in blocks 5. maxthr : maximum i/o system throughput, in bytes/sec 6. slavethr : average slave i/o throughput, in bytes/sec

usage

- oltp batch .

system statistics .

- system statistics procedure .

Page 167: Oracle History #6

[email protected] - 167 -

Oracle9i New Features http://www.ggola.com

1. statistics gathering stats table . EX. dbms_stats.create_stat_table(ownname => 'SCOTT', stattab => 'stat_newsvc', tblspace => 'TOOLS')

2. 9 system statistics gathering user defined table stat_newsvc

EX. 09:00 dbms_stats.gather_system_stats(gathering_mode => 'INTERVAL', interval => 540, stattab => 'stat_newsvc', statid => 'oltp', statown => 'SCOTT')

3. batch 5 system statistic gathering table ( id )

EX. 19:30 dbms_stats.gather_system_stats(gathering_mode => 'INTERVAL', interval => 300, stattab => 'stat_newsvc', statid => 'batch', statown => 'SCOTT')

4. EX. dbms_stats.gather_system_stats(gathering_mode => 'STOP')

5. system statistics gathering . EX. dbms_stats.gather_system_stats(gathering_mode => 'START') (interval )

, start issue stop issue system statistics gathering

6. . oltp

plan . EX. dbms_stats.import_system_stats(stattab => 'stat_newsvc', statid => 'oltp', statown => 'SCOTT')

7. batch job batch system statistics . EX. dbms_stats.delete_system_stats; ( oltp ) dbms_stats.import_system_stats(stattab => 'stat_newsvc', statid => 'batch', statown => 'SCOTT') CF. interval

job process ? job_queue_process . , initial parameter

. EX. alter system set job_queue_processes = 1; CF. system statistics ? job

system statistics import process .

example

- system load system statistics gathering .

Page 168: Oracle History #6

[email protected] - 168 -

Oracle9i New Features http://www.ggola.com

SQL> conn scott/tiger Connected. SQL> exec dbms_stats.create_stat_table(ownname => 'SCOTT',- > stattab => 'stat_newsvc', tblspace => 'TOOLS'); pl/sql procedure successfully completed. SQL> exec dbms_stats.gather_system_stats(gathering_mode => 'INTERVAL', interval => 60, stattab

=> 'stat_newsvc', statid => 'oltp', statown => 'SCOTT'); pl/sql procedure successfully completed.

cpu disk i/o write .

SQL> select, insert, update, delete.... SQL> !more stat_chk.sql set serveroutput on DECLARE STATUS VARCHAR2(20); DSTART DATE; DSTOP DATE; PVALUE NUMBER; PNAME VARCHAR2(30); BEGIN PNAME := 'cpuspeed'; DBMS_STATS.GET_SYSTEM_STATS(status, dstart, dstop, pname, pvalue, stattab =>

'stat_newsvc', statid => 'oltp', statown => 'SCOTT'); DBMS_OUTPUT.PUT_LINE('status : '||status); DBMS_OUTPUT.PUT_LINE('cpu in mhz : '||pvalue); PNAME := 'sreadtim'; DBMS_STATS.GET_SYSTEM_STATS(status, dstart, dstop, pname, pvalue, stattab =>

'stat_newsvc', statid => 'oltp', statown => 'SCOTT'); DBMS_OUTPUT.PUT_LINE('single block readtime in ms : '||pvalue); PNAME := 'mreadtim'; DBMS_STATS.GET_SYSTEM_STATS(status, dstart, dstop, pname, pvalue, stattab =>

'stat_newsvc', statid => 'oltp', statown => 'SCOTT'); DBMS_OUTPUT.PUT_LINE('multiblock readtime in ms : '||pvalue); PNAME := 'mbrc'; DBMS_STATS.GET_SYSTEM_STATS(status, dstart, dstop, pname, pvalue, stattab =>

'stat_newsvc', statid => 'oltp', statown => 'SCOTT'); DBMS_OUTPUT.PUT_LINE('average multiblock readcount: '||pvalue); END; / SQL> @stat_chk status : COMPLETED cpu in mhz : 435 single block readtime in ms : 4.392 multiblock readtime in ms : 2.224 average multiblock readcount: 8 pl/sql procedure successfully completed.

system statistics gathering .

Page 169: Oracle History #6

[email protected] - 169 -

Oracle9i New Features http://www.ggola.com

new cost model by optimizer

"cpu, io, temp only for cost based optimizer" plan_table

cpu_cost, io_cost, temp_space column .

cpu, io cost temp bytes . ( cpu, io cost system statistics

gathering )

SQL> exec dbms_stats.import_system_stats(stattab => 'stat_newsvc',- > statown => 'SCOTT', statid => 'oltp'); BEGIN dbms_stats.import_system_stats(stattab => 'stat_newsvc', statown => 'SCOTT', statid => 'oltp') ; END; * ERROR at line 1: ORA-20000: Unable to import system statistics stats from user stat table SCOTT.STAT_NEWSVC: does not exist or insufficient privileges ORA-06512: at "SYS.DBMS_STATS", line 5366 ORA-06512: at line 1

scott user dictionary . SQL> conn system/manager Connected. SQL> exec dbms_stats.import_system_stats(stattab => 'stat_newsvc',- > statid => 'oltp', statown => 'SCOTT'); pl/sql procedure successfully completed. SQL> select pval2 from sys.aux_stats$ 2 where sname = 'SYSSTATS_INFO' and pname = 'STATUS'; PVAL2 -------------------------------------------------------------------------------- COMPLETED

imported statistics . SQL> select pname, pval1 from sys.aux_stats$ 2 where sname = 'SYSSTATS_MAIN'; PNAME PVAL1 ------------------------------ ---------- CPUSPEED 435 MAXTHR 9610240 MBRC 8 MREADTIM 2.224 SLAVETHR -1 SREADTIM 4.392 6 rows selected.

import .

Page 170: Oracle History #6

[email protected] - 170 -

Oracle9i New Features http://www.ggola.com

plan .

example

SQL> !more xplan.sql set linesize 100 column "OPERATION" format a60 column "TMP/MB" format 9999 select substr(lpad(' ',2*(level-1))||operation||' '||options ||' '||object_name,1,200) "OPERATION", COST "COST", cpu_cost "CPU", io_cost "IO", round(temp_space/1024/1024) "TMP/MB" from plan_table start with id=0 and statement_id = 'test' connect by prior id = parent_id and STATEMENT_ID='test' order by id; delete from plan_table where statement_id='test' ; commit ; SQL> explain plan set statement_id = 'test' for 2 select dept_name, sum(dept_id) 3 from dept_skip 4 where dept_name = 'NEWPART' 5 group by dept_name 6 order by 2; Explained. SQL> @xplan OPERATION COST CPU IO TMP/MB ------------------------------------------------------------ ---------- ---------- ---------- ------ SELECT STATEMENT 6 1932077 4 SORT ORDER BY 6 1932077 4 SORT GROUP BY NOSORT 6 1932077 4 TABLE ACCESS BY INDEX ROWID DEPT_SKIP 5 21557 4 INDEX RANGE SCAN IK_DEPTSKIP_NAME 4 14351 3 SQL> explain plan set statement_id = 'test' for 2 select dept_name, sum(dept_id) 3 from dept_skip 4 where dept_name = 'SYSTEM' 5 group by dept_name 6 order by 2; Explained. SQL> @xplan OPERATION COST CPU IO TMP/MB ------------------------------------------------------------ ---------- ---------- ---------- ------ SELECT STATEMENT 6317 2129576945 5202 SORT ORDER BY 6317 2129576945 5202 46 SORT GROUP BY NOSORT 6317 2129576945 5202 TABLE ACCESS FULL DEPT_SKIP 1117 952869782 618

literal value sql plan cost . from 9i plan package plan

.

Page 171: Oracle History #6

[email protected] - 171 -

Oracle9i New Features http://www.ggola.com

SQL> explain plan set statement_id = 'test' for 2 select dept_name, sum(dept_id) 3 from dept_skip 4 where dept_name = 'SYSTEM' 5 group by dept_name 6 order by 2; Explained. SQL> select plan_table_output from table(dbms_xplan.display('plan_table','test','serial')); PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| ---------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 12 | | 6317 (18)| | 1 | SORT ORDER BY | | 1 | 12 | 45M| 6317 (18)| | 2 | SORT GROUP BY NOSORT| | 1 | 12 | | 6317 (18)| |* 3 | TABLE ACCESS FULL | DEPT_SKIP | 1196K| 13M| | 1117 (45)| ---------------------------------------------------------------------------------- Predicate Information (identified by operation id): PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------------------- 3 - filter("DEPT_SKIP"."DEPT_NAME"='SYSTEM') SQL> delete from plan_table where statement_id = 'test'; SQL> commit;

dbms_xplan.display(table_name, statement_id, option) argument plan table name . (default "PLAN_TABLE") argument plan statement id . (default NULL) argument plan format . (default TYPICAL)

format : basic (operation ), typical (cost plan ) all ( ), serial (parallel typical )

Page 172: Oracle History #6

[email protected] - 172 -

Oracle9i New Features http://www.ggola.com

11. Scalable Session Management

shared server

changed terminology and parameters

- : mts(multithreaded server) shared server net8i oracle net

- initial parameter mts_dispatchers dispatchers mts_max_dispatchers max_dispatchers mts_servers shared_servers mts_max_servers max_shared_servers

new features for shared server

1. from 9i oracle net services dispatcher connection direct handoff .

2. polling . (using common event model)

3. oem .

direct handoff

- overhead network messages

- to 8i(redirect method) : listener dispatcher's address dispatcher connection

client return dispatcher communication .

- from 9i(handoff method) : connection .

1. listener client shared server connection request connection socket establish

2. listener connection socket dispatcher client dispatcher connection socket

.

Page 173: Oracle History #6

[email protected] - 173 -

Oracle9i New Features http://www.ggola.com

3. client connection processing step 1 connection socket dispatcher communication .

CF. handoff network messages .

common event model

- to 8i dispatcher network and database .

- event network database events check .

event models time resources .

- from 9i common event model event notification shared server

.

- common event model database and network polling cpu .

performance manager

- oem pack gui shared servers, dispatchers, listeners monitoring shared server performance session sql statement .

- shared server parameters value recommendation .

example

- shared server .

[NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/pfile> vi initNEWSVC.ora . . . . # -------------------------- MTS (shared server) parameters ------------------------ ## MTS dispatchers = '(pro=tcp)(dis=2)' # new parameter #mts_dispatchers = '(pro=tcp)(dis=2)' # will be obsoleted max_dispatchers = 5 # new parameter #mtx_max_dispatchers = 5 # will be obsoleted shared_servers = 5 # new parameter #mts_servers = 5 # will be obsoleted max_shared_servers = 10 # new parameter #mts_max_servers = 10 # will be obsoleted #mts_max_servers = 10 # will be oboleted ~ "initNEWSVC.ora" 182L, 6699C written [NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/pfile> cd ../work/ [NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/work> sqlplus /nolog SQL> conn /as sysdba Connected. SQL> shutdown immediate .. SQL> startup

Page 174: Oracle History #6

[email protected] - 174 -

Oracle9i New Features http://www.ggola.com

SQL> !ps -ef | grep ora_ oracle 3166 1 0 10:27 ? 00:00:00 ora_pmon_NEWSVC oracle 3168 1 0 10:27 ? 00:00:00 ora_dbw0_NEWSVC oracle 3170 1 0 10:27 ? 00:00:00 ora_lgwr_NEWSVC oracle 3172 1 0 10:27 ? 00:00:00 ora_ckpt_NEWSVC oracle 3174 1 0 10:27 ? 00:00:00 ora_smon_NEWSVC oracle 3176 1 0 10:27 ? 00:00:00 ora_reco_NEWSVC oracle 3178 1 0 10:27 ? 00:00:00 ora_cjq0_NEWSVC oracle 3180 1 0 10:27 ? 00:00:00 ora_s000_NEWSVC oracle 3182 1 0 10:27 ? 00:00:00 ora_s001_NEWSVC oracle 3184 1 0 10:27 ? 00:00:00 ora_s002_NEWSVC oracle 3186 1 0 10:27 ? 00:00:00 ora_s003_NEWSVC oracle 3188 1 0 10:27 ? 00:00:00 ora_s004_NEWSVC oracle 3190 1 0 10:27 ? 00:00:00 ora_d000_NEWSVC oracle 3192 1 0 10:27 ? 00:00:00 ora_d001_NEWSVC

shared server 5 dispatchers 2 start . SQL> exit [NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/work> sqlplus scott/tiger SQL> !ps -ef | grep oracleNEWSVC oracle 3289 3288 0 10:38 ? 00:00:00 oracleNEWSVC (DESCRIPTION=(LOCAL oracle 3292 3290 0 10:38 pts/1 00:00:00 grep oracleNEWSVC

remote [NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/work> sqlplus scott/tiger@newsvc SQL> !ps -ef | grep oracleNEWSVC oracle 3289 3288 0 10:38 ? 00:00:00 oracleNEWSVC (DESCRIPTION=(LOCAL oracle 3296 3294 0 10:39 pts/2 00:00:00 grep oracleNEWSVC

oracle process start . . SQL> select spid from v$process where addr = 2 (select paddr from v$session where audsid = userenv('SESSIONID')); SPID ------------ 3180 SQL> !ps -ef | grep 3180 oracle 3180 1 0 10:27 ? 00:00:00 ora_s000_NEWSVC oracle 3300 3293 0 10:40 pts/2 00:00:00 /bin/bash -c ps -ef | grep 3180 oracle 3302 3300 0 10:40 pts/2 00:00:00 /bin/bash -c ps -ef | grep 3180

shared server . , client tnsnames.ora (SERVER = DEDICATED) shared server dedicated server .

Page 175: Oracle History #6

[email protected] - 175 -

Oracle9i New Features http://www.ggola.com

external procedure agent

external procedure agent pl/sql block c program . to 8i external procedure default agent extproc .

from 9i external procedure dedicated external procedure option .

dedicated external procedure

1. dedicated agent libraries external procedures grouping multiple agents(multiple machines ) load load-balancing scalability

.

2. pl/sql agent machine agent .

3. agents machines procedure .

CF. extproc agent local server database agent

. tns information server local service .

external procedure libraries

1. create library environment variable agent different machines

external procedure library . (os )

2. create library agent agent create procedure or function argument

run time agent name .

3. agent name database link name .

example

- remote database newsvc_rmt $ORACLE_BASE/ext/lib/pxlib.so library shared libraries agent .

SQL> create database link newsvc_agent using 'NEWSVC_RMT';

Page 176: Oracle History #6

[email protected] - 176 -

Oracle9i New Features http://www.ggola.com

SQL> create or replace library pxlib is 2 '$ORACLE_BASE/ext/lib/pxlib.so' agent 'NEWSVC_AGENT'; 3 /

CF. external procedure .

.

multithreaded hs agent

to 8i heterogeneous service call process . (single processing per call) from 9i mts

architecture multithreaded .

architecture

1. clients heterogeneous service request .

2. oracle requests dispatcher . ( dispatcher )

3. dispatcher request task thread queue . ( , request dispatcher

task task thread )

4. non-oracle system task thread queue request pick up operation

dispatcher queue .

5. dispatcher queue pick up request server .

thread : 3 thread

1. single monitor thread : listener dispatchers registering process load monitoring . threads check threads start and stop

2. dispatcher thread : shared server dispatcher . oracle server communication

task threads request send and receive result .

3. task thread : oracle request queue .

Page 177: Oracle History #6

[email protected] - 177 -

Oracle9i New Features http://www.ggola.com

hs agent initialization parameters

1. max_dispatchers : maximum dispatchers

2. tcp_dispatchers : tcp listening dispatchers ( ipc )

3. max_task_threads : task threads

4. listener_address : listener listening address registration .

5. shutdown_address : agtctl shutdown message listening agent address

connection pooling

3rd party vendor middle tier connection pooling oci library

.

, oci connection pooling taf(transparent application failover) .

general step

1. OCIHandleAlloc() : connection pooling pool handle

2. OCIConnectionPoolCreate() : connection pool handle initialize

3. OCILogn2() : log on to database

4. OCILogoff() : log off from database

5. OCIConnectionPoolDestroy() : destroy connection pooling

6. OCIHandleFree() : free pool handle

, application coding application .

Page 178: Oracle History #6

[email protected] - 178 -

Oracle9i New Features http://www.ggola.com

core library

from 9i oracle kernel module module dependency .

9i application module dependency application

memory usage . oracle kernel .

Page 179: Oracle History #6

[email protected] - 179 -

Oracle9i New Features http://www.ggola.com

12. Real Application Cluster

basic overview

rac ops(oracle parallel server)

. , . ops system availability solution (

)

This illustration shows three instances, instances X, Y, and Z, accessing data files. The instances are all conneted to an interconnect that they use for internode communication. Within each node there are the following structures: the variable part of the System Global Area (SGA), a redo log buffer, and a database buffer cache. The Diagnostic process (DIAG) also appears within each instance. The variable SGA launches the following sub-processes: LMON, LMD, and LCK. The Interprocess Communication (IPC) connects the LMON of each instance to each other. The redo log buffer writes to the Log Writer Process (LGWR) which writes to the redo logs. The Database Buffer Cache writes to the Database Writer process (DBWR) which writes to the shared disks. The Database Buffer Cache also writes to the Global Cache Service (LMSn) processes.

manual .

Page 180: Oracle History #6

[email protected] - 180 -

Oracle9i New Features http://www.ggola.com

rac ops performance . global cache management cache

fusion .

rac

- rac same database multiple instance database system .

- instance node oracle excutables archive logs node local disk

datafiles shared disks . ( , excutables shared disk system availability local archive logs local disk and shared disk

node local disk archive logs )

CF. from 9i spfile initial parameter spfile shared disk parameter file

1 rac configuration .

- , node cpu, processes, shared memory, disks node interconnect disks share node message (node high-speed ehternet ) cms communication . CF. cms : cluster management software hardware vendor

.

interconnect communication

1. nodes high-speed ethernet(ex. giganet, servernet..) .

2. nodes oracle node instance messages block cgs .

CF. cgs : cluster group services

3. inter-node communication : 1. oracle cgs node cms message . 2. message cms interconnect node cms message . 3. node cms node cgs message

.

Page 181: Oracle History #6

[email protected] - 181 -

Oracle9i New Features http://www.ggola.com

main background processes only for rac

- background process single instance .

1. LMSn(0 ~ 9) : Global Cache Service Processes remote instances message flow control global data access . cache fusion . message traffic processes .

database block resources

2. LMON : Global Enqueue Service Monitor cluster global enqueues and resources monitoring

global enqueue recovery operations .

3. LMD : Global Enqueue Service Daemon global enqueue and global resource access instance incoming remote resource requests . (ops

lmd0~n process ) non-database block resources

4. LCK : Lock Process non-cache fusion resource requests(library and row cache requests ) .

5. DIAG : Diagnosability Daemon instances process failures data capture . daemon operation alert.log

.

CF. ops 8i cache fusion bsp(block server process) . lms cache fusion .

merit of rac (running multiple instances(each on its own node))

- nodes .

- . ( node )

- node resource parallel components application .

- node down session available node reconnection taf . (availabilty)

Page 182: Oracle History #6

[email protected] - 182 -

Oracle9i New Features http://www.ggola.com

lms : global cache service

global resource directory

- global cache and global enqueue services active instance memory global resource directory .

- resources instance master . instance shared resource master instance message .

message flow interconnect communication .

global cache service

- database blocks global cache service resource statuses list resources instances acquiring and releasing .

- transaction node list master block node block grant list

.

- , instance resource resource instance resource exclusive access .

- , X mode resource instance instance .

dynamic resource remastering

- to 8i instance master resources node start up or shutdown .

- from 9i global resource directory dynamically resources remaster . (moving to different instances)

- lazy dynamic remastering instances exclusively blocks instances

remastering .

- instance shutdown normal shutdown instance global resource directory

remastering .

Page 183: Oracle History #6

[email protected] - 183 -

Oracle9i New Features http://www.ggola.com

resource mode :

- resource FIFO queue 3 mode transaction or row level locking

.

- Null(N) : block instance holding , mode . (

default mode)

- Shared (S) : block read mode . multiple instances shared mode

. (cannot modify resource)

- Exclusive (X) : instance block mode . instances block Null mode . older resource consistent reads

.

resource role

- global cache service cache fusion resource roles .

- local : block instance's cache read instance read block locally managed . gcs local role assign .

- global : local role block instance block globally managed gcs global role . data block dirty (past image) disk write past image .

block transfer

mechanism

- changed blocks node cache fusion 9i new feature . (8i new feature unchanged blocks cache fusion )

1. forced disk write : ops 8i ops 8i writing instances block changed blocks

disk write requet instance read block ping .(from 9i default

gc_file_to_locks parameter

)

Page 184: Oracle History #6

[email protected] - 184 -

Oracle9i New Features http://www.ggola.com

2. consistent read cache fusion : writing instance buffer cache read-consistent image query

instance image instance buffer cache cache fusion . (ops 8i cache fusion)

3. cache fusion block transfer : clean or dirty image cluster interconnect instance images rac 9i cache fusion .

simple step

- 3 instance rac system .

1. 200 block master node A global resource directory( grd) block NL0

. 200 block null mode, local role past image ,

.

2. instance B update block global cache service( gcs) grd B node XL0 copy block access . 200 block instance B

. ( )

3. instance B block commit 200 block scn (disk 200

block scn ) instance C read consistency scn image B node scn rbs image instance C . master node grd "B node : XL0 scn ", "C node : NL0 scn "

. instance C block image shared mode null mode .

4. instance C block image gcs instance B scn 200 block instance C . master node grd "B node : NG1 scn ", "C node : XG0 scn " . , block copy global role scn block

C node X mode B node Null mode . B node block past image(1) C node block current image(0) .

5. instance C block C node block version .

Page 185: Oracle History #6

[email protected] - 185 -

Oracle9i New Features http://www.ggola.com

6. dbwr write . instance block dbwr

write . mechanism .

6.1 version C node dbwr write write 6.2 version B node dbwr write master node A grd version

( scn) node ( C node ) write C node write .

CF. write grd history record buffer free .

- from 9i block cache fusion interconnect

node block transfer users(applications) and data partitioning

. ( forced disk write block transfer )

high availability

gloal cache service : down node resource remastering downtime .

instance recovery global resource directory remastering concurrently resources

. ( ops lock database reconfiguration deffered recovery )

cluster group services : oracle cgs hardware vendor cms check monitoring

service interuption grd reconfiguration .

chapter "General High Availability Technology" two-pass redo log processing

cache fusion past images recovery time .

CF. cache fusion past image recovery

past image block recovery block node

.

rac guard oracle parallel fail safe(on NT) oracle parallel HA (on UNIX) .

Page 186: Oracle History #6

[email protected] - 186 -

Oracle9i New Features http://www.ggola.com

rac guard

real application cluster data guard mission critical system high availability

.

rac guard

- rac guard initial parameter file active_instance_count=1 .

- primary instance secondary instance primary instance global resource directory oracle net services

database connection . secondary instance primary instance .

monitor

1. instance monitor local instance secondary node failover instance restart

.

2. listener monitor listener check restart .(rac guard clients public listener tool private listener

listener monitor ) primary node rac secondary node

failover primary instance restart .

3. hearbeat monitor instance availability check . monitor primary instance capable of work

local update instance hearbeat check . primary database unavailable primary role 3 check takeover .

CF. rac guard H/A software oracle os level cluster

rad guard .

Page 187: Oracle History #6

[email protected] - 187 -

Oracle9i New Features http://www.ggola.com

shared parameter file

rac nodes parameter file node . parameter file

. spfile database .

spfile

1. node single shared parameter file .

2. spfile shared disk device .

3. parameter file spfile convert device name .

4. node initial parameter spfile link .

CF. shared parameter file node parameter node

instance name dot notaion . ( , text parameter file spfile )

EX. inst1.cursor_sharing=force inst2.cursor_sharing=similar inst3.cursor_sharing=exact

step

- parameter file 1 parameter value instance parameter instance

name dot notaion .

- sqlplus mode (database start ) create spfile from pfile

spfile .

- $ORACLE_HOME/dbs/init INSTANCE.ora file spfile link .

1. vi init$ORACLE_SID.ora ... ... newsvc1.cursor_sharing=force newsvc2.cursor_sharing=similar ... compatible=9.2.0.0.0 nls_date_format="YYYY/MM/DD" ...

Page 188: Oracle History #6

[email protected] - 188 -

Oracle9i New Features http://www.ggola.com

... newsvc1.timed_statistics=true newsvc2.timed_statistics=false ...

2. SQL> create spfile='/dev/rvdisk111' from pfile

3. # cd $ORACLE_HOME/dbs ( node ) # ln init$ORACLE_SID.ora /dev/rvdisk111

srvctl for rac command line interface

srvctl

- instance rac system node .

- opsctl srvctl .

process node .

EX. # gsd

CF. node srvctl gsd process .

step

- # srvctl command option

.

1. srvctl start -p newsvc lsnr rac database newsvc instance start

listener .

2. srvctl stop -p newsvc -n newsvc1 -x lsnr rac database newsvc node newsvc1 stop

listener .

3. srvctl status -p newsvc -i newsvc2 -s inst rac database newsvc node newsvc2 instance

.

4. srvctl get env -p newsvc rac database newsvc .

Page 189: Oracle History #6

[email protected] - 189 -

Oracle9i New Features http://www.ggola.com

oem enhancements for rac management

oem

- threads redo log assignment

- clustered database and instances target report generation .

- wizard tool cluster database .

- oem and performance pack monitoring event .

- exp/imp/load, backup , analyzing .

- spfile handling .

- instance configuration .

- cluster database instance users, used sql monitoring killing sessing .

- instance current lock list .

- resource consumer groups monitoring .

related initialization parameters

related initialization parameters

- gc_files_to_locks : fixed lock releasable flag "R" option ops 8i

. parameter files cache fusion

. CF. read-only, read-mostly or data modified mostly by a single database .

- instance_number : default 1 clustered database instance .

instance unique .

- instance_name : instances name unique . ( $ORACLE_SID )

Page 190: Oracle History #6

[email protected] - 190 -

Oracle9i New Features http://www.ggola.com

- cluster_database : clustered database (true|false) ops parallel_server

parameter .

- cluster_server_instances : clustered database instances maximum .

ops parallel_server_instances .

- gc_releasable_locks : ops releasable locks . from 9i block releasble resources

parameter .

- gc_rollback_locks : ops rbs modifying distributed locks .

from 9i .

- gc_defer_time : ops parameter force disk write deferred

. , force disk write . from 9i

blocks cache fusion write mechanism ( block transfer write mechanism)

parameter .

Page 191: Oracle History #6

[email protected] - 191 -

Oracle9i New Features http://www.ggola.com

13. Oracle Managed Files

basic omf(oracle managed file)

to 8i tablespace or datafile oracle file drop operation oracle dictionary

files .

from 9i oracle managed file files operation os files .

merit

- dba

- operation os disk space .

- test database .

CF. ? omf . , omf files non-omf files .

CF. raw device database .

parameter

1. db_create_file_dest : directory for all files

2. db_create_online_log_dest_[1|2|n] : directory for redo log and control files

3. 1 “..file_dest” files 1 .

4. 2 “.._log_dest_n” redo log control files parameters dest multiplexing . 2

“..log_dest_n” parameter .

CF. , directory directory oracle user . parameters values alter system or alter session

parameter .

Page 192: Oracle History #6

[email protected] - 192 -

Oracle9i New Features http://www.ggola.com

omf naming rule

- control files : ora_%u.ctl

- redo log files : ora_%g_%u.log

- data files : ora_%t_%u.

- temporary data files : ora_%t_%u.tmp

CF. filename format omf .

symbol

- %u : 8 character string for uniqueness

- %t : tablespace name

- %g : log file group number

- ora_ : omf

omf database creation

control file

1. omf parameter create database destination datafile

database . omf create database default

directory, “ $ORACLE_HOME/dbs” omf naming naming database .

naming : cntrl$ORACLE_SID.dbf, log2$ORACLE_SID.dbf, log1$ORACLE_SID.dbf, dbu1$ORACLE_SID.dbf, dbs1$ORACLE_SID.dbf SQL> create database;

2. parameter value file (db_create_online_log_dest_n, db_create_file_dest)

control_files parameter control_files parameter

.

3. omf control_files parameter default directory data files, redo log files, control file non-omf size .

unix $ORACLE_HOME/dbs default directory .

4. database creation initial parameter control file control_files parameter database

Page 193: Oracle History #6

[email protected] - 193 -

Oracle9i New Features http://www.ggola.com

restart control file .

- omf database system, undo, redo log, control file .

- system, redo log 100M manul datafile 100M .

- undo 10M, control file size .

CF. db_create_file_dest redo log 2 control file 1 omf database db_create_online_log_dest_n .

create controlfile statement

- create controlfile omf datafiles spfile

initial parameter file control_files parameter .

- , omf redo log files noresetlogs option omf redo logfiles resetlogs

option omf .

archive

- arvhived redo logs files omf file .

omf management

redo log files

- log file add logfile size 100M, size

EX. alter database add logfile [size ?m];

- drop group os level log files

tablespace

- datafile tablespace datafile (size default 100M)

- tablespace drop os level data files

Page 194: Oracle History #6

[email protected] - 194 -

Oracle9i New Features http://www.ggola.com

- omf tablespace default locally managed tablespace and autoallocate, datafile default size 100M and autoextensible CF. , size datafile autoextensible

. EX. create tablespace name [datafile size ?M]; alter tablespace add datafile [size ?M];

omf and standby

standby initialization parameter

- standby_file_management =[default FALSE|AUTO|MANAUL]

- db_file_name_convert

data guard

- CASE 1) primary database , file add or drop "standby_file_management=auto" standby database . ( omf or non-omf )

- auto standby database operation .

alter database rename, add|drop logfile, add|drop logfile member, create datafile as

omf files primary database os level files standby database .

- CASE 2) primary database standby databse (management parameter auto

) file name convert primary database convert .

- file name convert , directory path . EX. db_file_name_convert="/app/oracle/oradata/newsvc/", "/app/oracle/oradata/newsvc/std/") value first string primary database, second string standby database . value pair .

- , multple pairs . ("," pair primary, standby value )

Page 195: Oracle History #6

[email protected] - 195 -

Oracle9i New Features http://www.ggola.com

automatic drop files

new option for removing os files

- tablespace : drop tablespace including contents and datafiles [cascade constraints];

- alter database tempfile '/app/.../name.dbf' drop including datafiles;

os level files

- omf : new option(including datafiles) os level files .

- non-omf : new option os level files .

- redo log : omf non-omf manual .

- datafile rollback

to 8i : os level file manual .

from 9i : rollback os level file .

example

- omf database creation database omf file .

[NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/work> sqlplus /nolog SQL> connect / as sysdba Connected. SQL> shutdown; Database closed. Database dismounted. ORACLE instance shut down. SQL> exit

test database shutdown omf database . [NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/work> cd [NEWSVC]LIRACLE:/app/oracle> cd oradata [NEWSVC]LIRACLE:/app/oracle/oradata> ls -ltr total 4 drwxrwxr-x 3 oracle dba 4096 Oct 7 18:03 NEWSVC [NEWSVC]LIRACLE:/app/oracle/oradata> mkdir OMFSVR [NEWSVC]LIRACLE:/app/oracle/oradata> cd OMFSVR [NEWSVC]LIRACLE:/app/oracle/oradata/OMFSVR> mkdir u01 [NEWSVC]LIRACLE:/app/oracle/oradata/OMFSVR> mkdir u02 [NEWSVC]LIRACLE:/app/oracle/oradata/OMFSVR> mkdir u03

Page 196: Oracle History #6

[email protected] - 196 -

Oracle9i New Features http://www.ggola.com

[NEWSVC]LIRACLE:/app/oracle/oradata/OMFSVR> ls -l total 12 drwxr-xr-x 2 oracle dba 4096 Oct 14 13:55 u01 drwxr-xr-x 2 oracle dba 4096 Oct 14 13:55 u02 drwxr-xr-x 2 oracle dba 4096 Oct 14 13:55 u03 [NEWSVC]LIRACLE:/app/oracle/admin/OMFSVR> export ORACLE_SID=OMFSVR [OMFSVR]LIRACLE:/app/oracle/admin/OMFSVR> cp -r ../NEWSVC/* ./ [OMFSVR]LIRACLE:/app/oracle/admin/OMFSVR> cd pfile [OMFSVR]LIRACLE:/app/oracle/admin/OMFSVR/pfile> mv initNEWSVC.ora initOMFSVR.ora [OMFSVR]LIRACLE:/app/oracle/admin/OMFSVR/pfile> vi initOMFSVR.ora .. .. # ------------------------------ OMF parameters ------------------------------------------- db_create_file_dest='/app/oracle/oradata/OMFSVR/u01/' db_create_online_log_dest_1='/app/oracle/oradata/OMFSVR/u02/' db_create_online_log_dest_2='/app/oracle/oradata/OMFSVR/u03/' .. .. ## Control file Configuration #control_files =( "/app/oracle/oradata/NEWSVC/controlNEWSVC01.ctl", # "/app/oracle/oradata/NEWSVC/controlNEWSVC02.ctl", # "/app/oracle/oradata/NEWSVC/controlNEWSVC03.ctl" ) .. .. ~ ~ :wq "initOMFSVR.ora" 183L, 6836C written [OMFSVR]LIRACLE:/app/oracle/admin/OMFSVR/pfile>

omf parameter control file parameter . [OMFSVR]LIRACLE:/app/oracle/admin/OMFSVR/pfile> sqlplus /nolog SQL> conn /as sysdba Connected to an idle instance. SQL> startup nomount pfile=initOMFSVR.ora ORACLE instance started. SQL> create database; Database created. SQL> create tablespace users; Tablespace created. SQL> create temporary tablespace temp; Tablespace created. SQL> @/app/oracle/product/9.2.0/rdbms/admin/catalog.sql; SQL> @/app/oracle/product/9.2.0/rdbms/admin/catexp7.sql; SQL> @/app/oracle/product/9.2.0/rdbms/admin/catblock.sql; SQL> @/app/oracle/product/9.2.0/rdbms/admin/catproc.sql; SQL> @/app/oracle/product/9.2.0/rdbms/admin/owminst.plb; SQL> @/app/oracle/product/9.2.0/rdbms/admin/catoctk.sql; SQL> conn system/manager Connected. SQL> @/app/oracle/product/9.2.0/sqlplus/admin/pupbld.sql;

Page 197: Oracle History #6

[email protected] - 197 -

Oracle9i New Features http://www.ggola.com

SQL> select tablespace_name, file_name, round(bytes/1024/1024) MB 2 from dba_data_files 3 union all 4 select tablespace_name, file_name, round(bytes/1024/1024) MB 5 from dba_temp_files; TABLESPACE FILE_NAME MB ---------- ------------------------------------------------------------ ---------- SYSTEM /app/oracle/oradata/OMFSVR/u01/o1_mf_system_zrrkgfyd_.dbf 131 SYS_UNDOTS /app/oracle/oradata/OMFSVR/u01/o1_mf_sys_undo_zrrkh7v2_.dbf 58 USERS /app/oracle/oradata/OMFSVR/u01/o1_mf_users_zrrkx6cd_.dbf 100 TEMP /app/oracle/oradata/OMFSVR/u01/o1_mf_temp_zrrl0lpm_.tmp 100

db scripts object system, undo size default tablespace 100M .

SQL> select a.member, b.bytes/1024/1024 MB 2 from v$logfile a, v$log b 3 where a.group# = b.group#; MEMBER MB ------------------------------------------------------------ ---------- /app/oracle/oradata/OMFSVR/u02/o1_mf_1_zrrkflcl_.log 100 /app/oracle/oradata/OMFSVR/u03/o1_mf_1_zrrkfmj1_.log 100 /app/oracle/oradata/OMFSVR/u02/o1_mf_2_zrrkft2b_.log 100 /app/oracle/oradata/OMFSVR/u03/o1_mf_2_zrrkg0ff_.log 100

100M db_create_online_log_dest_n 2 redo log group member .

SQL> select name from v$controlfile; NAME ------------------------------------------------------------ /app/oracle/oradata/OMFSVR/u02/o1_mf_zrrkfl3n_.ctl /app/oracle/oradata/OMFSVR/u03/o1_mf_zrrkfl73_.ctl

db_create_online_log_dest_n 2 control file . SQL> conn /as sysdba SQL> shutdown immediate ORACLE instance shut down.

omf database database omf [OMFSVR]LIRACLE:/app/oracle/admin/OMFSVR/pfile> export ORACLE_SID=NEWSVC [NEWSVC]LIRACLE:/app/oracle/admin/OMFSVR/pfile> cd ../../NEWSVC/pfile [NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/pfile> vi initNEWSVC.ora .. # ------------------------------ OMF parameters ------------------------------------------- db_create_file_dest='/app/oracle/oradata/OMFSVR/u04/' .. ~ ~ :wq "initNEWSVC.ora" 180L, 6708C written

omf parameter 1 database startup . [NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/pfile> cd /app/oracle/oradata/OMFSVR/ [NEWSVC]LIRACLE:/app/oracle/oradata/OMFSVR> mkdir u04 [NEWSVC]LIRACLE:/app/oracle/oradata/OMFSVR> cd /app/oracle/admin/NEWSVC/work [NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/work> sqlplus /nolog

Page 198: Oracle History #6

[email protected] - 198 -

Oracle9i New Features http://www.ggola.com

SQL> conn /as sysdba Connected to an idle instance. SQL> startup ORACLE instance started. Database mounted. Database opened. SQL> alter database add logfile; Database altered. SQL> alter database add logfile size 50M; Database altered. SQL> select a.group#, a.member, b.bytes/1024/1024 MB 2 from v$logfile a, v$log b 3 where a.group# = b.group#; GROUP# MEMBER MB ---------- ------------------------------------------------------------ ---------- 1 /app/oracle/oradata/NEWSVC/redoNEWSVC01a.log 8 1 /app/oracle/oradata/NEWSVC/redoNEWSVC01b.log 8 2 /app/oracle/oradata/NEWSVC/redoNEWSVC02a.log 8 2 /app/oracle/oradata/NEWSVC/redoNEWSVC02b.log 8 3 /app/oracle/oradata/NEWSVC/redoNEWSVC03a.log 8 3 /app/oracle/oradata/NEWSVC/redoNEWSVC03b.log 8 4 /app/oracle/oradata/NEWSVC/redoNEWSVC04a.log 8 4 /app/oracle/oradata/NEWSVC/redoNEWSVC04b.log 8 5 /app/oracle/oradata/OMFSVR/u04/o1_mf_5_zrrtbjf0_.log 100 6 /app/oracle/oradata/OMFSVR/u04/o1_mf_6_zrrtdgv7_.log 50 10 rows selected.

log file . size 50M default 100M . db_create_online_log_dest_n parameter

mirrored member db_create_file_dest 1 .

SQL> create tablespace omf_tbs ; Tablespace created. SQL> alter tablespace omf_tbs add datafile ; Tablespace altered. SQL> alter tablespace omf_tbs add datafile size 10M; Tablespace altered. SQL> alter tablespace omf_tbs add datafile size 20M, size 30M; Tablespace altered.

Page 199: Oracle History #6

[email protected] - 199 -

Oracle9i New Features http://www.ggola.com

SQL> select a.tablespace_name tname, b.file_name fname, 2 a.initial_extent init, a.next_extent next, 3 a.extent_management mgm, b.autoextensible auto, 4 round(b.bytes/1024/1024) mb 5 from dba_tablespaces a, dba_data_files b 6 where a.tablespace_name = b.tablespace_name 7 and a.tablespace_name = 'OMF_TBS' ; TNAME FNAME INIT NEXT MGM AUT MB ------- ------------------------------------------------------------ ------- ---- ----- --- ---- OMF_TBS /app/oracle/oradata/OMFSVR/u04/o1_mf_omf_tbs_zrrv7pfl_.dbf 65536 LOCAL YES 100 OMF_TBS /app/oracle/oradata/OMFSVR/u04/o1_mf_omf_tbs_zrrvb4rs_.dbf 65536 LOCAL YES 100 OMF_TBS /app/oracle/oradata/OMFSVR/u04/o1_mf_omf_tbs_zrrvbkj5_.dbf 65536 LOCAL NO 10 OMF_TBS /app/oracle/oradata/OMFSVR/u04/o1_mf_omf_tbs_zrrvc3fz_.dbf 65536 LOCAL NO 20 OMF_TBS /app/oracle/oradata/OMFSVR/u04/o1_mf_omf_tbs_zrrvc3o0_.dbf 65536 LOCAL NO 30

omf tablespace locally managed tablespace autoallocate . size datafile default 100M autoextensible . CF. size autoextensible .

SQL> create tablespace nonomf datafile 2 '/app/oracle/oradata/OMFSVR/u04/nonomf01.dbf' size 10M; Tablespace created. SQL> create temporary tablespace nontmp tempfile 2 '/app/oracle/oradata/OMFSVR/u04/nontmp01.dbf' size 10M; Tablespace created.

tablespace temporary tablespace drop test SQL> select a.tablespace_name tname, b.file_name fname, 2 a.initial_extent init, a.next_extent next, 3 a.extent_management mgm, b.autoextensible auto, 4 round(b.bytes/1024/1024) mb 5 from dba_tablespaces a, dba_data_files b 6 where a.tablespace_name = b.tablespace_name 7 and a.tablespace_name in ('OMF_TBS', 'NONOMF') 8 union all 9 select tablespace_name, file_name, null, null, null, 10 autoextensible auto, round(bytes/1024/1024) MB 11 from dba_temp_files 12 where tablespace_name = 'NONTMP'; TNAME FNAME INIT NEXT MGM AUT MB ------- ------------------------------------------------------------ ------- ---- ----- --- ---- OMF_TBS /app/oracle/oradata/OMFSVR/u04/o1_mf_omf_tbs_zrrv7pfl_.dbf 65536 LOCAL YES 100 OMF_TBS /app/oracle/oradata/OMFSVR/u04/o1_mf_omf_tbs_zrrvb4rs_.dbf 65536 LOCAL YES 100 OMF_TBS /app/oracle/oradata/OMFSVR/u04/o1_mf_omf_tbs_zrrvbkj5_.dbf 65536 LOCAL NO 10 OMF_TBS /app/oracle/oradata/OMFSVR/u04/o1_mf_omf_tbs_zrrvc3fz_.dbf 65536 LOCAL NO 20 OMF_TBS /app/oracle/oradata/OMFSVR/u04/o1_mf_omf_tbs_zrrvc3o0_.dbf 65536 LOCAL NO 30 NONOMF /app/oracle/oradata/OMFSVR/u04/nonomf01.dbf 65536 LOCAL NO 10 NONTMP /app/oracle/oradata/OMFSVR/u04/nontmp01.dbf NO 10 SQL> drop tablespace omf_tbs; Tablespace dropped. SQL> !ls -ltr /app/oracle/oradata/OMFSVR/u04/ total 164108 -rw-r----- 1 oracle dba 104858112 Oct 14 17:23 o1_mf_5_zrrtbjf0_.log -rw-r----- 1 oracle dba 52429312 Oct 14 17:24 o1_mf_6_zrrtdgv7_.log -rw-r----- 1 oracle dba 10493952 Oct 14 18:15 nonomf01.dbf -rw-r----- 1 oracle dba 10493952 Oct 14 18:16 nontmp01.dbf

option omf tablespace datafiles .

Page 200: Oracle History #6

[email protected] - 200 -

Oracle9i New Features http://www.ggola.com

SQL> drop tablespace nonomf including contents and datafiles; Tablespace dropped. SQL> !ls -ltr /app/oracle/oradata/OMFSVR/u04/ total 153844 -rw-r----- 1 oracle dba 104858112 Oct 14 17:23 o1_mf_5_zrrtbjf0_.log -rw-r----- 1 oracle dba 52429312 Oct 14 17:24 o1_mf_6_zrrtdgv7_.log -rw-r----- 1 oracle dba 10493952 Oct 14 18:16 nontmp01.dbf

tablespace drop datafiles option non-omf files os level . SQL> !ls -ltr /app/oracle/oradata/OMFSVR/u04/ total 153768 -rw-r----- 1 oracle dba 104858112 Oct 14 17:23 o1_mf_5_zrrtbjf0_.log -rw-r----- 1 oracle dba 52429312 Oct 14 17:24 o1_mf_6_zrrtdgv7_.log SQL> alter database tempfile '/app/oracle/oradata/OMFSVR/u04/nontmp01.dbf' 2 drop including datafiles; Database altered. SQL> !ls -ltr /app/oracle/oradata/OMFSVR/u04/ total 153768 -rw-r----- 1 oracle dba 104858112 Oct 14 17:23 o1_mf_5_zrrtbjf0_.log -rw-r----- 1 oracle dba 52429312 Oct 14 17:24 o1_mf_6_zrrtdgv7_.log

temp file new option os level . , nontmp tablespace tempfile 1 tablespace .

SQL> select group#, member from v$logfile; GROUP# MEMBER ---------- ------------------------------------------------------------ 1 /app/oracle/oradata/NEWSVC/redoNEWSVC01a.log 1 /app/oracle/oradata/NEWSVC/redoNEWSVC01b.log 2 /app/oracle/oradata/NEWSVC/redoNEWSVC02a.log 2 /app/oracle/oradata/NEWSVC/redoNEWSVC02b.log 3 /app/oracle/oradata/NEWSVC/redoNEWSVC03a.log 3 /app/oracle/oradata/NEWSVC/redoNEWSVC03b.log 4 /app/oracle/oradata/NEWSVC/redoNEWSVC04a.log 4 /app/oracle/oradata/NEWSVC/redoNEWSVC04b.log 5 /app/oracle/oradata/OMFSVR/u04/o1_mf_5_zrrtbjf0_.log 6 /app/oracle/oradata/OMFSVR/u04/o1_mf_6_zrrtdgv7_.log SQL> alter database drop logfile group 5 ; Database altered. SQL> alter database drop logfile group 6 ; Database altered. SQL> !ls -ltr /app/oracle/oradata/OMFSVR/u04/ total 0

omf logfile . SQL> alter database drop logfile group 4; Database altered.

non-omf logfile drop

Page 201: Oracle History #6

[email protected] - 201 -

Oracle9i New Features http://www.ggola.com

SQL> select group#, member from v$logfile; GROUP# MEMBER ---------- ------------------------------------------------------------ 1 /app/oracle/oradata/NEWSVC/redoNEWSVC01a.log 1 /app/oracle/oradata/NEWSVC/redoNEWSVC01b.log 2 /app/oracle/oradata/NEWSVC/redoNEWSVC02a.log 2 /app/oracle/oradata/NEWSVC/redoNEWSVC02b.log 3 /app/oracle/oradata/NEWSVC/redoNEWSVC03a.log 3 /app/oracle/oradata/NEWSVC/redoNEWSVC03b.log SQL> !ls -l /app/oracle/oradata/NEWSVC/*log -rw-r----- 1 oracle dba 8389120 Oct 14 17:06 /app/oracle/oradata/NEWSVC/redoNEWSVC01a.log -rw-r----- 1 oracle dba 8389120 Oct 14 17:06 /app/oracle/oradata/NEWSVC/redoNEWSVC01b.log -rw-r----- 1 oracle dba 8389120 Oct 14 17:06 /app/oracle/oradata/NEWSVC/redoNEWSVC02a.log -rw-r----- 1 oracle dba 8389120 Oct 14 17:06 /app/oracle/oradata/NEWSVC/redoNEWSVC02b.log -rw-r----- 1 oracle dba 8389120 Oct 14 18:44 /app/oracle/oradata/NEWSVC/redoNEWSVC03a.log -rw-r----- 1 oracle dba 8389120 Oct 14 18:44 /app/oracle/oradata/NEWSVC/redoNEWSVC03b.log -rw-r----- 1 oracle dba 8389120 Oct 14 17:06 /app/oracle/oradata/NEWSVC/redoNEWSVC04a.log -rw-r----- 1 oracle dba 8389120 Oct 14 17:06 /app/oracle/oradata/NEWSVC/redoNEWSVC04b.log

non-omf logfile os level files . manual . SQL> !rm /app/oracle/oradata/NEWSVC/redoNEWSVC04a.log SQL> !rm /app/oracle/oradata/NEWSVC/redoNEWSVC04b.log SQL> !ls -l /app/oracle/oradata/NEWSVC/*log -rw-r----- 1 oracle dba 8389120 Oct 14 17:06 /app/oracle/oradata/NEWSVC/redoNEWSVC01a.log -rw-r----- 1 oracle dba 8389120 Oct 14 17:06 /app/oracle/oradata/NEWSVC/redoNEWSVC01b.log -rw-r----- 1 oracle dba 8389120 Oct 14 17:06 /app/oracle/oradata/NEWSVC/redoNEWSVC02a.log -rw-r----- 1 oracle dba 8389120 Oct 14 17:06 /app/oracle/oradata/NEWSVC/redoNEWSVC02b.log -rw-r----- 1 oracle dba 8389120 Oct 14 18:46 /app/oracle/oradata/NEWSVC/redoNEWSVC03a.log -rw-r----- 1 oracle dba 8389120 Oct 14 18:46 /app/oracle/oradata/NEWSVC/redoNEWSVC03b.log

omf datafile SQL> create tablespace omf_tbs datafile size 1024M; ...

[NEWSVC]LIRACLE:/app/oracle/oradata/OMFSVR/u04> ls -ltr total 744796 -rw-r----- 1 oracle dba 1073750016 Oct 14 18:52 o1_mf_omf_tbs_zrrzhoo5_.dbf

SQL> create tablespace omf_tbs datafile size 1024M; ... ( rollback )

[NEWSVC]LIRACLE:/app/oracle/oradata/OMFSVR/u04> ls -ltr total 0

file . SQL> create tablespace nonomf datafile '/app/oracle/oradata/OMFSVR/u04/test.dbf' size 1024M; ..

[NEWSVC]LIRACLE:/app/oracle/oradata/OMFSVR/u04> ls -ltr total 344284 -rw-r----- 1 oracle dba 1073750016 Oct 14 18:55 test.dbf

SQL> create tablespace nonomf datafile '/app/oracle/oradata/OMFSVR/u04/test.dbf' size 1024M; ... ( rollback )

[NEWSVC]LIRACLE:/app/oracle/oradata/OMFSVR/u04> ls -ltr total 0

datafile rollback os level file . from 9i os level file .

Page 202: Oracle History #6

[email protected] - 202 -

Oracle9i New Features http://www.ggola.com

14. New Tablespace Management

default temporary tablespace

from 9i database creation default temporary tablespace locally managed temporary tablespace . system default temporary tablespace .

to 8i user system tablespace default tablespace temporary tablespace

.

usage

- default temporary tablespace locally or dictionary managed tablespace create database locally managed tablespace temporary tablespace

tablespace temporary .

- create database default temporary tablespace from 9i default temporary tablespace user temporary tablespace .

- default temporary tablespace standard block size . standard block size

initial parameter db_block_size block size . from 9i multi block size block size . ,

default temporary tablespace block size db_block_size size .

management

- default temporary tablespace tablespace offline or drop . ( . user sort

)

- default temporary tablespace offline or drop tablespace default temporary tablespace .

Page 203: Oracle History #6

[email protected] - 203 -

Oracle9i New Features http://www.ggola.com

specifying to user

- dba temporary tablespace user .

- , default temporary tablespace temporary tablespace

system tablespace temporary tablespace default temporary tablespace users

, system temporary tablespace users default temporary tablespace

temporary tablespace .

- system default temporary tablespace system

default temporary tablespace .

- , default temporary tablespace to 8i system default .

-

specifying default temporary tablespace

- create database

SQL> conn system/manager SQL> select * from database_properties 2 where property_name = 'DEFAULT_TEMP_TABLESPACE'; PROPERTY_NAME PROPERTY_VALUE DESCRIPTION ------------------------------ -------------------- -------------------------------------- DEFAULT_TEMP_TABLESPACE TEMP Name of default temporary tablespace

CREATE DATABASE NEWSVC MAXINSTANCES 1 MAXLOGHISTORY 1000 MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 2000 DATAFILE '/app/oracle/oradata/NEWSVC/systemNEWSVC01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 1024M EXTENT MANAGEMENT LOCAL DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/app/oracle/oradata/NEWSVC/tempNEWSVC01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 5120M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M UNDO TABLESPACE "UNDO01" DATAFILE '/app/oracle/oradata/NEWSVC/undo01NEWSVC01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 5120M CHARACTER SET KO16KSC5601 NATIONAL CHARACTER SET AL16UTF16 LOGFILE GROUP 1 ('/app/oracle/oradata/NEWSVC/redoNEWSVC01a.log', '/app/oracle/oradata/NEWSVC/redoNEWSVC01b.log') SIZE 8M , GROUP 2 ('/app/oracle/oradata/NEWSVC/redoNEWSVC02a.log', '/app/oracle/oradata/NEWSVC/redoNEWSVC02b.log') SIZE 8M , GROUP 3 ('/app/oracle/oradata/NEWSVC/redoNEWSVC03a.log', '/app/oracle/oradata/NEWSVC/redoNEWSVC03b.log') SIZE 8M ;

Page 204: Oracle History #6

[email protected] - 204 -

Oracle9i New Features http://www.ggola.com

- alter database

SQL> alter database default temporary tablespace temp_sort;

simple example

SQL> conn system/manager SQL> create tablespace temp_sort datafile 2 '/app/oracle/oradata/NEWSVC/temp_sort01.dbf' size 30M ; Tablespace created. SQL> alter database default temporary tablespace temp_sort; alter database default temporary tablespace temp_sort * ERROR at line 1: ORA-12901: default temporary tablespace must be of TEMPORARY type

temporary tablespace temporary tablespace temporary . SQL> alter tablespace temp_sort temporary ; alter tablespace temp_sort temporary * ERROR at line 1: ORA-03218: invalid option for CREATE/ALTER TABLESPACE

system tablespace locally managed tablespace tablespace dictionary managed tablespace . tablespace temporary dictionary tablespace error .

SQL> drop tablespace temp_sort including contents and datafiles; Tablespace dropped. SQL> create temporary tablespace temp_sort tempfile 2 '/app/oracle/oradata/NEWSVC/temp_sort01.dbf' size 30M ; Tablespace created. SQL> alter database default temporary tablespace temp_sort; Database altered.

default temporary tablespace . SQL> drop tablespace temp_sort; drop tablespace temp_sort * ERROR at line 1: ORA-12906: cannot drop default temporary tablespace

default temporary tablespace drop . SQL> alter tablespace temp_sort offline; alter tablespace temp_sort offline * ERROR at line 1: ORA-03217: invalid option for alter of TEMPORARY TABLESPACE

default temporary tablespace offline error temporary tablespace offline error . , dictionary managed

tablespace temporary tablespace message default temporary tablespace offline . SQL> alter database default temporary tablespace temp; Database altered. SQL> drop tablespace temp_sort including contents and datafiles; Tablespace dropped.

Page 205: Oracle History #6

[email protected] - 205 -

Oracle9i New Features http://www.ggola.com

automatic undo management

rollback mode

- from 9i undo_management parameter rollback . , rollback mechanism

. aum mode(automatic undo management).

- rbu mode(rollback segment undo) .

EX. undo_management=[MANUAL|AUTO] (manual default) manual to 8i rollback segment

auto undo mechanism undo_tablespace=tbs_name tablespace undo(means rollback) .

CF. undo? undo ? . rollback segment contention undo

header, undo block .

undo_management

- auto undo_tablespace tablespace undo .

- undo tablespace error undo tablespace oracle

undo tablespace system rollback segments .

- ? undo tablespace dynamic .

aum mode database start rbu mode parameters .

basic concept of undo management

1. undo tablespace : undo management instance(rac instances) undo

tablespace “General High Availability Technology” flash back query undo_retention size

. , size rollback

segment , transaction dba . ( automatic . oracle

automatic )

Page 206: Oracle History #6

[email protected] - 206 -

Oracle9i New Features http://www.ggola.com

2. undo objects : undo management rollback segment . rollback segment undo tablespace undo object . rollback segment undo segment . ( undo segment create, alter, drop operation )

3. undo segment : segment rollback segment dynamic extent

. undo tablespace uniform bitmap undo segment rollback segment

ddl (rollback segment ) extent . ( )

4. shrink : to 8i rollback segment shrink optimal size shrink .

from 9i smon shrink .

every 12 hours shrink foreground process undo space

signal shrink

5. transaction allocation : (1) dml undo segment (2) undo segment 1 transaction (3) transaction transaction undo segment 1:1 inactive undo segment shrink and online (4) undo segment new undo segment creation and online (5) undo segment ( )

undo segment least-used undo segment , to 8i undo segment

. (6) undo_retention( )

undo segments flash back query . , undo segments

. flash back query snap shot too old error .

extents transfer

- transfer : undo segment to 8i undo segments undo space ( , undo segment extents ) dynamic .

- reuse : transaction undo space current undo segment space

extent . space . to 8i rollback tablespace error return from 9i another

Page 207: Oracle History #6

[email protected] - 207 -

Oracle9i New Features http://www.ggola.com

inactive undo space . ( stolen . ?) undo management

undo tablespace ora-30036 error return .

CF. ora-30036 : unable to extend segment by %s in undo tablespace '%s

undo tablespace management

create database

CREATE DATABASE NEWSVC MAXINSTANCES 1 MAXLOGHISTORY 1000 MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 2000 DATAFILE '/app/oracle/oradata/NEWSVC/systemNEWSVC01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 1024M EXTENT MANAGEMENT LOCAL DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/app/oracle/oradata/NEWSVC/tempNEWSVC01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 5120M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M UNDO TABLESPACE "UNDO01" DATAFILE '/app/oracle/oradata/NEWSVC/undo01NEWSVC01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 5120M CHARACTER SET KO16KSC5601 NATIONAL CHARACTER SET AL16UTF16 LOGFILE GROUP 1 ('/app/oracle/oradata/NEWSVC/redoNEWSVC01a.log', '/app/oracle/oradata/NEWSVC/redoNEWSVC01b.log') SIZE 8M , GROUP 2 ('/app/oracle/oradata/NEWSVC/redoNEWSVC02a.log', '/app/oracle/oradata/NEWSVC/redoNEWSVC02b.log') SIZE 8M , GROUP 3 ('/app/oracle/oradata/NEWSVC/redoNEWSVC03a.log', '/app/oracle/oradata/NEWSVC/redoNEWSVC03b.log') SIZE 8M ;

create database initial parameter undo_management=auto undo tablespace database creation . undo tablespace oracle default sys_undotbs

undo tablespace default 10M autoextend on dbu1$ORACLE_SID.dbf file . ( oracle managed files )

undo tablespace sys_undotbs sys_undots . .

undo tablespace default 10 undo segments 2 extents .

Page 208: Oracle History #6

[email protected] - 208 -

Oracle9i New Features http://www.ggola.com

after database creation

EX. create undo tablespace undo01 datafile '/app/oracle/.../..dbf' size ?M;

- undo tablespace . instance active undo tablespace 1 .

, undo tablespace database restart undo_tablespace parameter dynamic .

- undo tablespace permanent and locally managed tablespace read-write and logging mode

. undo segment extent oracle uniform size . , extent

management local extent management local error .

alter undo tablespace :

EX. alter tablespace undo01 add datafile '/app/oracle/.../..dbf' size ?M autoextend on;

- undo tablespace oracle alter .

1. add or resize datafile

2. rename datafile

3. datafile online and offline

4. begin and end backup

drop undo tablespace :

EX. drop tablespace undo01;

- undo tablespace drop undo_tablespace .

- undo tablespace drop including contents .

- non-omf file datafils option . , undo tablespace drop .

- drop transaction recover undo information .

Page 209: Oracle History #6

[email protected] - 209 -

Oracle9i New Features http://www.ggola.com

- undo retention expired .

- query dropped undo information snap shot too old error .

switch undo tablespace

- undo tablespace instance . undo_tablespace system level dynamic

parameter .

EX. alter system set undo_tablespace=undo01; alter system set undo_tablespace=''; (rbu mode )

- switch undo tablespace active transaction wait . , transcation pending transaction undo tablespace pending offline .

- switch undo tablespace new transaction pending transaction .( , undo tablespace )

- pending transaction undo tablespace offline .

instance (rac ) undo tablespace .

undo retention

- flash back query undo_retention parameter rollback

. , undo retention flash back query long

running query snap shot too old error .

- instance crash undo undo_retention .

- undo_retention system level dynamic parameter .

- transaction undo tablespace expire undo space

retention .

- retention : undospace = UR * UPS + overhead UR : undo retention seconds

Page 210: Oracle History #6

[email protected] - 210 -

Oracle9i New Features http://www.ggola.com

UPS : undo blocks per second overhead : metadata small overhead (transactions, bitmaps )

EX. 300 blocks undo segment retention 1 (block size 8K)

undo size = (3600 * (300 * 8KB)) + overhead (overhead UPS 1/10 ) undo size = (3600 * (300 * 8KB)) + (30 * 8KB) = 8.24 GB ( undostat )

data dictionary

- v$undostat : aum, rbu mode . instance rollback segment

workload undo space . view instance

restart 10 . , begin time check end

time . begin, end_time : interval undoblcks : total number of used undo blocks (system

workload undo size ) maxconcurrency : maximum number of

transactions txntotal : period total number of transactions maxquerylen : maximum length of queriy

( query undo retention )

ssolderrcnt : snap shot too old error (undo retention ) CF. 1008 rows 7 data .

- dba_undo_extents : undo tablespace extents commit time .

- v$transaction, v$rollstat : rollback segments undo segments .

parameters

- undo_management = auto

- undo_tabespace = tablespace_name

- undo_retention = ?

- undo_suppress_errors = true|false ( ) parameter aum mode rbu mode

command error . true error return .

Page 211: Oracle History #6

[email protected] - 211 -

Oracle9i New Features http://www.ggola.com

set transaction use rollback segment aum mode .

error return .

example

SQL> conn system/manager SQL> select tablespace_name, segment_name, status 2 from dba_rollback_segs; TABLESPACE SEGMENT_NAME STATUS ---------- --------------- ---------- SYSTEM SYSTEM ONLINE UNDO01 _SYSSMU1$ ONLINE UNDO01 _SYSSMU2$ ONLINE UNDO01 _SYSSMU3$ ONLINE UNDO01 _SYSSMU4$ ONLINE UNDO01 _SYSSMU5$ ONLINE UNDO01 _SYSSMU6$ ONLINE UNDO01 _SYSSMU7$ ONLINE UNDO01 _SYSSMU8$ ONLINE UNDO01 _SYSSMU9$ ONLINE UNDO01 _SYSSMU10$ ONLINE 11 rows selected.

system 10 undo segments . database undo tablespace undo01 .

SQL> create undo tablespace undo_test 2 datafile '/app/oracle/oradata/NEWSVC/undotest01.db' size 30M; Tablespace created. SQL> select tablespace_name, segment_name, status 2 from dba_rollback_segs; TABLESPACE SEGMENT_NAME STATUS ---------- --------------- ---------- SYSTEM SYSTEM ONLINE UNDO01 _SYSSMU1$ ONLINE UNDO01 _SYSSMU2$ ONLINE UNDO01 _SYSSMU3$ ONLINE UNDO01 _SYSSMU4$ ONLINE UNDO01 _SYSSMU5$ ONLINE UNDO01 _SYSSMU6$ ONLINE UNDO01 _SYSSMU7$ ONLINE UNDO01 _SYSSMU8$ ONLINE UNDO01 _SYSSMU9$ ONLINE UNDO01 _SYSSMU10$ ONLINE UNDO_TEST _SYSSMU11$ OFFLINE UNDO_TEST _SYSSMU12$ OFFLINE UNDO_TEST _SYSSMU13$ OFFLINE UNDO_TEST _SYSSMU14$ OFFLINE UNDO_TEST _SYSSMU15$ OFFLINE UNDO_TEST _SYSSMU16$ OFFLINE UNDO_TEST _SYSSMU17$ OFFLINE UNDO_TEST _SYSSMU18$ OFFLINE UNDO_TEST _SYSSMU19$ OFFLINE UNDO_TEST _SYSSMU20$ OFFLINE 21 rows selected.

undo tablespace default 10 undo segments . , offline .

Page 212: Oracle History #6

[email protected] - 212 -

Oracle9i New Features http://www.ggola.com

SQL> alter system set undo_tablespace=undo_test; System altered. SQL> select tablespace_name, segment_name, status 2 from dba_rollback_segs; TABLESPACE SEGMENT_NAME STATUS ---------- --------------- ---------- SYSTEM SYSTEM ONLINE UNDO01 _SYSSMU1$ OFFLINE UNDO01 _SYSSMU2$ OFFLINE UNDO01 _SYSSMU3$ OFFLINE UNDO01 _SYSSMU4$ OFFLINE UNDO01 _SYSSMU5$ OFFLINE UNDO01 _SYSSMU6$ OFFLINE UNDO01 _SYSSMU7$ OFFLINE UNDO01 _SYSSMU8$ OFFLINE UNDO01 _SYSSMU9$ OFFLINE UNDO01 _SYSSMU10$ OFFLINE UNDO_TEST _SYSSMU11$ ONLINE UNDO_TEST _SYSSMU12$ ONLINE UNDO_TEST _SYSSMU13$ ONLINE UNDO_TEST _SYSSMU14$ ONLINE UNDO_TEST _SYSSMU15$ ONLINE UNDO_TEST _SYSSMU16$ ONLINE UNDO_TEST _SYSSMU17$ ONLINE UNDO_TEST _SYSSMU18$ ONLINE UNDO_TEST _SYSSMU19$ ONLINE UNDO_TEST _SYSSMU20$ ONLINE 21 rows selected.

online and offline . SQL> alter system set undo_tablespace=''; System altered.

rbu mode . SQL> create table rbstest (x number); Table created. SQL> drop table rbstest; Table dropped.

rollback segment system system . SQL> create table rbstest (x number) 2 tablespace users; create table rbstest (x number) * ERROR at line 1: ORA-01552: cannot use system rollback segment for non-system tablespace 'USERS'

system rollback segment system tablespace .

Page 213: Oracle History #6

[email protected] - 213 -

Oracle9i New Features http://www.ggola.com

SQL> select tablespace_name, segment_name, status 2 from dba_rollback_segs; TABLESPACE SEGMENT_NAME STATUS ---------- --------------- ---------- SYSTEM SYSTEM ONLINE UNDO01 _SYSSMU1$ OFFLINE UNDO01 _SYSSMU2$ OFFLINE UNDO01 _SYSSMU3$ OFFLINE UNDO01 _SYSSMU4$ OFFLINE UNDO01 _SYSSMU5$ OFFLINE UNDO01 _SYSSMU6$ OFFLINE UNDO01 _SYSSMU7$ OFFLINE UNDO01 _SYSSMU8$ OFFLINE UNDO01 _SYSSMU9$ OFFLINE UNDO01 _SYSSMU10$ OFFLINE UNDO_TEST _SYSSMU11$ OFFLINE UNDO_TEST _SYSSMU12$ OFFLINE UNDO_TEST _SYSSMU13$ OFFLINE UNDO_TEST _SYSSMU14$ OFFLINE UNDO_TEST _SYSSMU15$ OFFLINE UNDO_TEST _SYSSMU16$ OFFLINE UNDO_TEST _SYSSMU17$ OFFLINE UNDO_TEST _SYSSMU18$ OFFLINE UNDO_TEST _SYSSMU19$ OFFLINE UNDO_TEST _SYSSMU20$ OFFLINE 21 rows selected.

system online . SQL> alter system set undo_tablespace=undo01; System altered. SQL> drop tablespace undo_test including contents and datafiles ; Tablespace dropped. SQL> select tablespace_name, segment_name, status 2 from dba_rollback_segs; TABLESPACE SEGMENT_NAME STATUS ---------- --------------- ---------- SYSTEM SYSTEM ONLINE UNDO01 _SYSSMU1$ ONLINE UNDO01 _SYSSMU2$ ONLINE UNDO01 _SYSSMU3$ ONLINE UNDO01 _SYSSMU4$ ONLINE UNDO01 _SYSSMU5$ ONLINE UNDO01 _SYSSMU6$ ONLINE UNDO01 _SYSSMU7$ ONLINE UNDO01 _SYSSMU8$ ONLINE UNDO01 _SYSSMU9$ ONLINE UNDO01 _SYSSMU10$ ONLINE 11 rows selected.

. SQL> select begin_time bt, end_time et, name, undoblks blks, 2 txncount txcnt, maxquerylen maxq, maxconcurrency maxc, ssolderrcnt srcnt 3 from v$undostat a, v$tablespace b 4 where a.undotsn = b.ts#; BT ET NAME BLKS TXCNT MAXQ MAXC SRCNT ----------------- ----------------- ---------- ------ ------ ------ ------ ------ 20031016 14:39:48 20031016 14:41:43 UNDO01 0 0 0 0 0 20031016 14:29:48 20031016 14:39:48 UNDO01 3 142 0 1 0 20031016 11:39:48 20031016 14:19:48 UNDO01 0 0 0 0 0 20031016 11:29:48 20031016 11:39:48 UNDO01 1 2 3 1 0

undo stat 10 undo segment . transaction .

Page 214: Oracle History #6

[email protected] - 214 -

Oracle9i New Features http://www.ggola.com

SQL> insert... SQL> insert... SQL> select begin_time bt, end_time et, name, undoblks blks, 2 txncount txcnt, maxquerylen maxq, maxconcurrency maxc, ssolderrcnt srcnt 3 from v$undostat a, v$tablespace b 4 where a.undotsn = b.ts#; BT ET NAME BLKS TXCNT MAXQ MAXC SRCNT ----------------- ----------------- ---------- ------ ------ ------ ------ ------ 20031016 14:49:48 20031016 14:54:32 UNDO01 0 0 0 0 0 20031016 14:39:48 20031016 14:49:48 UNDO01 672 182 88 1 0 20031016 14:29:48 20031016 14:39:48 UNDO01 3 142 0 1 0 20031016 11:29:48 20031016 11:39:48 UNDO01 1 2 3 1 0 20031016 11:39:48 20031016 14:19:48 UNDO01 0 0 0 0 0

transaction . row maxquerylen 88 . undo retention 88 snap shot too old error 88 flash back query .

SQL> select SEGMENT_NAME, EXTENT_ID, COMMIT_JTIME, COMMIT_WTIME, STATUS 2 from dba_undo_extents; SEGMENT_NAME EXTENT_ID COMMIT_JTIME COMMIT_WTIME STATUS --------------- ---------- ------------ -------------------- ---------- _SYSSMU10$ 0 EXPIRED _SYSSMU10$ 1 EXPIRED _SYSSMU9$ 0 EXPIRED _SYSSMU9$ 1 EXPIRED _SYSSMU8$ 0 EXPIRED _SYSSMU8$ 1 EXPIRED _SYSSMU7$ 0 EXPIRED _SYSSMU7$ 1 UNEXPIRED _SYSSMU6$ 0 EXPIRED _SYSSMU6$ 1 EXPIRED _SYSSMU5$ 0 UNEXPIRED _SYSSMU5$ 1 EXPIRED _SYSSMU4$ 0 EXPIRED _SYSSMU4$ 1 EXPIRED _SYSSMU3$ 0 EXPIRED _SYSSMU3$ 1 EXPIRED _SYSSMU2$ 0 EXPIRED _SYSSMU2$ 1 EXPIRED _SYSSMU1$ 0 UNEXPIRED _SYSSMU1$ 1 UNEXPIRED _SYSSMU1$ 2 UNEXPIRED _SYSSMU1$ 3 UNEXPIRED _SYSSMU1$ 4 UNEXPIRED _SYSSMU1$ 5 UNEXPIRED _SYSSMU1$ 6 UNEXPIRED _SYSSMU1$ 7 UNEXPIRED _SYSSMU1$ 8 UNEXPIRED _SYSSMU1$ 9 UNEXPIRED _SYSSMU1$ 10 UNEXPIRED _SYSSMU1$ 11 UNEXPIRED _SYSSMU1$ 12 UNEXPIRED _SYSSMU1$ 13 UNEXPIRED _SYSSMU1$ 14 UNEXPIRED _SYSSMU1$ 15 UNEXPIRED _SYSSMU1$ 16 UNEXPIRED _SYSSMU1$ 17 UNEXPIRED _SYSSMU1$ 18 UNEXPIRED _SYSSMU1$ 19 UNEXPIRED _SYSSMU1$ 20 UNEXPIRED 39 rows selected.

status unexpired retention time undo information . commit time .

.

Page 215: Oracle History #6

[email protected] - 215 -

Oracle9i New Features http://www.ggola.com

multi database block size

concept

- oracle database db_block_size database

.

- from 9i db_block_size . i/o i/o

i/o .

- db_block_size standard block size non standard block size . database 1 standard block size 4 block size

.

- system, temporary tablespace standard block size . 2K ~ 32K . (2K, 4K , 8K, 16K, 32K)

usage : db_nk_cache_size

- block cache block size tablespace i/o

cache .

- db_2,4,8,16,32_cache_size parameter . standard block size db_nk_cache_size n

. standard db_block_size .

- additional cache size size one granule . (granule ) one granule sga 128mb

4mb 16mb .

- tablespace additional block size database block size tablespace transport additional block size tablespace

.

rules

- object all partitions same block size . ( , block size tablespace

)

- iot overflow out-of-line log segment base table block size tablespace .

Page 216: Oracle History #6

[email protected] - 216 -

Oracle9i New Features http://www.ggola.com

example

SQL> conn system/manager SQL> create tablespace tbs32k datafile 2 '/app/oracle/oradata/NEWSVC/tbs32k01.dbf' 3 size 40M blocksize 32k; create tablespace tbs32k datafile * ERROR at line 1: ORA-00382: 32768 not a valid block size, valid range [2048..16384] SQL> !oerr ora 382 00382, 00000, "%s not a valid block size, valid range [%s..%s]" // *Cause: User specified a value for db_nk_cache_size where n is one of // {2, 4, 8, 16, 32}, but nk is not a valid block size for this // platform. // *Action: Remove corresponding parameter from the "init.ora" file and // restart the instance.

32K range 16k . os . .

SQL> create tablespace tbs16k datafile 2 '/app/oracle/oradata/NEWSVC/tbs32k01.dbf' 3 size 40M blocksize 16k; create tablespace tbs16k datafile * ERROR at line 1: ORA-29339: tablespace block size 16384 does not match configured block sizes

. . db_16k_cache_size parameter . , DB_BLOCK_SIZE: 2048 to 16384 (Linux, Solaris) 2048 to 32768 (AIX, HP, Tru64) . version

linux platform 32k block .

SQL> !vi initNEWSVC.ora .. .. # -------------------------- Memory and I/O parameters ------------------------ ## Database block cache and I/O db_block_size = 8192 # 8K ( 2003-07-23) db_cache_size = 209715200 # 200M db_16k_cache_size = 41943040 # 40M .. .. ~ ~ "initNEWSVC.ora" 181L, 6744C written SQL> conn /as sysdba shutdown.... startup..... SQL> create tablespace tbs16k datafile 2 '/app/oracle/oradata/NEWSVC/tbs32k01.dbf' 3 size 40M blocksize 16k; Tablespace created. SQL> conn scott/tiger SQL> create table mlttbs (x number) 2 storage ( minextents 10) tablespace tbs16k; Table created.

Page 217: Oracle History #6

[email protected] - 217 -

Oracle9i New Features http://www.ggola.com

SQL> select tablespace_name, bytes/1024 kbsz, blocks 2 from user_segments 3 where segment_name = 'MLTTBS'; TABLESPACE_NAME KBSZ BLOCKS ------------------------------ ---------- ---------- TBS16K 64 4

4 blocks 64kb . , block size 16kb .

Page 218: Oracle History #6

[email protected] - 218 -

Oracle9i New Features http://www.ggola.com

15. New Memory Management

automatic sql execution memory management

. to 8i ?_area_size , sql action

parameters ( size sql memory allocation ) .

oracle server process sql memory allocation .

merit

- memory tuning . memory tuning .

- users system better throughput .

- query response time .

- process run out of memory .

from 9i

- 9i . .

- , to 8i session ?_area_size sql memory session memory

memory session memory memory dynamic adjusing .

new pga management

pga memory = tunable memory + untunable memory

- tunable memory : sql working area

- untunable memory :

Page 219: Oracle History #6

[email protected] - 219 -

Oracle9i New Features http://www.ggola.com

concept

- pga session memory allocation .

- , overall pga memory => pga_aggregate_target <= untunable memory + tunable memory

memory .

usage

- automatic pga memory allocation .

1. pga_aggregate_target . pga pga memory size 10mb ~ 4000mb

. system level dynamic parameter .

2. workarea_size_policy=manual|auto automatic sql execution memory management

. auto auto manual ?_area_size parameters

. session system level dynamic parameter .

- ? auto mode target . , pga target size

policy auto . error .

- ? instance start manual mode . target size memory

auto .

- pga_aggregate_target workarea_size_policy parameter auto . . parameter pga_aggregate_target

?_area_size manual .

- alter system or session dynamic . .

Page 220: Oracle History #6

[email protected] - 220 -

Oracle9i New Features http://www.ggola.com

monitor

1. v$sysstat(v$sessstat) workarea memory allocated : kb workarea

total amount of pga memory workarea executions - optimal : optimal size

cumulative count of workarea (no disk used) workarea executions - onepass : one pass size

cumulative count of workarea (disk big workarea )

workarea executions - multipass : one pass cumulative count of workarea ( disk

tuning )

2. v$process pga_used_mem : pga memory pga_alloc_mem : allocation pga memory

( release memory ) pga_max_mem : allocation maximum

pga memory

3. v$sql_workarea : sql cursors workarea . workarea

. (sql address v$sql join sql text )

4. v$sql_workarea_active : system workarea . (workarea address

v$sql_workarea )

5. v$pgastat : memory usage statistics .

SQL> select name, value from v$sysstat 2 where name like '%workarea%'; NAME VALUE ---------------------------------------- ---------- workarea memory allocated 0 workarea executions - optimal 654 workarea executions - onepass 0 workarea executions - multipass 0

SQL> select sum(pga_used_mem), sum(pga_alloc_mem), 2 sum(pga_max_mem) from v$process; SUM(PGA_USED_MEM) SUM(PGA_ALLOC_MEM) SUM(PGA_MAX_MEM) ----------------- ------------------ ---------------- 6975832 16574500 16771108

Page 221: Oracle History #6

[email protected] - 221 -

Oracle9i New Features http://www.ggola.com

tuning access

1. workarea percent of optimal memory size

2. top ten workareas of the most cache use

SQL> select * from v$pgastat ; NAME VALUE UNIT ---------------------------------------- ---------- ------------ aggregate PGA target parameter 104857600 bytes aggregate PGA auto target 87948288 bytes global memory bound 5242880 bytes total PGA inuse 7141376 bytes total PGA allocated 17067008 bytes maximum PGA allocated 19495936 bytes total freeable PGA memory 589824 bytes PGA memory freed back to OS 1114112 bytes total PGA used for auto workareas 0 bytes maximum PGA used for auto workareas 0 bytes total PGA used for manual workareas 0 bytes maximum PGA used for manual workareas 16384 bytes over allocation count 0 bytes processed 7286784 bytes extra bytes read/written 0 bytes cache hit percentage 100 percent

SQL> select trunc ( 2 (sum(case when name like 'workarea executions - optimal' 3 then value else 0 end) * 100) / 4 (sum(case when name like 'workarea executions - optimal' 5 then value else 0 end) + 6 sum(case when name like 'workarea executions - one pass' 7 then value else 0 end) + 8 sum(case when name like 'workarea executions - multipass' 9 then value else 0 end)) 10 ) optimal_percent 11 from v$sysstat 12 where name like 'workarea executions - %' ; OPTIMAL_PERCENT --------------- 100

SQL> select * 2 from (select workarea_address wadr, operation_type opt, 3 policy plc, estimated_optimal_size eos_kb 4 from v$sql_workarea 5 order by estimated_optimal_size DESC) 6 where ROWNUM <=10; WADR OPT PLC EOS_KB -------- ---------- ---------- ---------- 55B65304 HASH-JOIN MANUAL 1010688 55B653F4 HASH-JOIN MANUAL 919552 55B4FEB8 HASH-JOIN MANUAL 766976 55B4FF58 HASH-JOIN MANUAL 758784 55B78FFC HASH-JOIN MANUAL 734208 55BD5528 SORT MANUAL 73728 55DC787C SORT AUTO 73728 55C43DD8 SORT AUTO 73728 55E6FA10 SORT AUTO 73728 55CFCD18 SORT AUTO 73728

Page 222: Oracle History #6

[email protected] - 222 -

Oracle9i New Features http://www.ggola.com

3. average workarea percent of the optimal execution operation

4. top ten biggest workareas currently allocated in the system

5. percentage of the over and under allocated memory

SQL> select operation_type opt, 2 sum(optimal_executions) * 100 / sum(total_executions) avg 3 from v$sql_workarea 4 where policy='AUTO' 5 and optimal_executions > 0 6 group by operation_type; OPT AVG ------------------------------ ---------- BUFFER 100 CONNECT-BY (SORT) 100 GROUP BY (SORT) 100 SORT 100

SQL> select c.sql_text, w.operation_type, top_ten.wasize tt_was_kb 2 from (select * from 3 (select workarea_address, actual_mem_used wasize 4 from v$sql_workarea_active 5 order by actual_mem_used) 6 where rownum <=10) top_ten, 7 v$sql_workarea w, 8 v$sql c 9 where w.workarea_address=top_ten.workarea_address 10 and c.address=w.address 11 and c.child_number = w.child_number 12 and c.hash_value=w.hash_value; SQL_TEXT OPERATION_ TT_WAS_KB -------------------------------------------------- ---------- ---------- select c.sql_text, w.operation_type, top_ten.wasiz SORT 278528 e from (select * from (select workarea_address, ac tual_mem_used wasize from v$sql_workarea_active or der by actual_mem_used) where rownum <=:"SYS_B_0") top_ten, v$sql_workarea w, v$sql c where w.workar ea_address=top_ten.workarea_address and c.address= w.address and c.child_number = w.child_number and c.hash_value=w.hash_value

SQL> select total_used used_tot, 2 under*100/(total_used+1) pct_under_kb, 3 over*100/(total_used+1) pct_over_kb 4 from (select 5 sum(case when expected_size > actual_mem_used 6 then actual_mem_used else 0 end) under, 7 sum(case when expected_size < actual_mem_used 8 then actual_mem_used else 0 end) over, 9 sum(actual_mem_used) total_used 10 from v$sql_workarea_active 11 where policy='auto') usage; USED_TOT PCT_UNDER_KB PCT_OVER_KB ---------- ------------ -----------

Page 223: Oracle History #6

[email protected] - 223 -

Oracle9i New Features http://www.ggola.com

new sga management

database shutdown and restart dba command dynamic sga . (dba can grow and shrink sga(shared pool and buffer cache) dynamically using alter system) dynamic sga .

sga memory ( )

.

shared pool and buffer cache memory size grow and shrink . different block size

.

allocation unit

- granule memory allocation . contiguous virtual memory , memory .

- memory size sga_max_size parameter granule .

: sga_max_size < 128mb 4mb granule : sga_max_size => 128mb 16mb granule

- test sga_max_size sga size parameter default

. sga_max_size .

- sga granule . . , sga 3 granule . one

granule for fixed sga(including redo buffer), one granule for buffer cache, one granule for shared pool ( fixed sga(including redo buffer) 451080 + 3289088 < 16mb . , fixed sga(including redo buffer) one granule )

SQL> conn system/manager SQL> sho sga Total System Global Area 574165512 bytes Fixed Size 451080 bytes Variable Size 301989888 bytes Database Buffers 268435456 bytes Redo Buffers 3289088 bytes SQL> sho parameter sga_max_size NAME TYPE VALUE ----------------------- --------------- --------- sga_max_sizebig integer 574165512

Page 224: Oracle History #6

[email protected] - 224 -

Oracle9i New Features http://www.ggola.com

- v$buffer_pool buffer cache allocation and deallocation . EX. id : buffer pool id name : default(general buffer for using standard and non-standard block size) keep, recycle(specific buffer only for using standard block size) block_size : block size of the buffer pool resize_state : static (resize general status) allocating ( memory allocation . user can cancel) activating ( new buffers creation . user cannot cancel) shrinking ( buffers deletion . user can cancel) current_size : current cache size im mega bytes buffers : current number of buffers target_size : resize_state static , resizing buffer target size in mega bytes ( , resize_state static current_size ) target_buffers : resize_state static , resizing buffer target buffers ( , resize_state static buffers ) prev_size : 0 resize

buffer size prev_buffers : 0 resize buffers

alter system

- shared pool : alter system set shared_pool_size = ?m; (? = granule * n) CF. sga size sga_max_size granule size integer .

- buffer cache : alter system set db_cache_size = ?m; (? = granule * n) CF. sga size sga_max_size granule size

integer . cache size 0 0 invalid value error

. ( . shared pool limits 0 0

error . )

SQL> select id, name, block_size blk_sz, resize_state, 2 current_size curr_sz, buffers buffs, target_size tg_sz, 3 target_buffers tg_bf, prev_size prv_sz, prev_buffers prv_bf 4 from v$buffer_pool; ID NAME BLK_SZ RESIZE CURR_SZ BUFFS TG_SZ TG_BF PRV_SZ PRV_BF --- ------- ------ ------ ------- ------- ------ ------- ------ ------ 3 DEFAULT 8192 STATIC 208 26026 208 26026 0 0 7 DEFAULT 16384 STATIC 48 3036 48 3036 0 0

Page 225: Oracle History #6

[email protected] - 225 -

Oracle9i New Features http://www.ggola.com

new and changed parameters

- , parameters .

- db_cache_size, db_keep_cache_size, db_recycle_cache_size parameters size to 8i

db_block_buffers, buffer_pool_keep, buffer_pool_recycle .

buffers buffres parameters obsolete

. warnning message display . to 8i parameters dynamic size parameters .

to 8i buffers parameters db_block_lru_latches parameter dba value

from 9i obsolete ignored and internal calculation .

- multi block size parameters db_nk_cache_size (n = 2, 4, ,8, 16, 32)

parameter db_block_size . linux or solaris

platform oracle 9.0.1 version 16k maximum .

buffer cache advisory

- . buffer cache cache size .

from 9i option cache size .

- db_cache_advice = on|off|ready (system level dynamic parameter)

on : advisory turned on (cpu and memory ) ( level statistics_level parameter basic

on default) off : advisory turned off ( level

statistics_level parameter basic off default) ready : advisory turned off and advisory memory remain)

(memory )

- cache advisory off on . (ora-04031 errror )

mechanism on ready cache advisory shared pool

memory allocation . CF. oracle ready on, off

error test . .

Page 226: Oracle History #6

[email protected] - 226 -

Oracle9i New Features http://www.ggola.com

- cache advisory v$db_cache_size buffer 21 rows simulation . , current size

-10% 10 +10% 10 simulation .

- standard block size default buffer advisory .

- physical read factor 1 current buffer cache . 1 10% 20 simulation .

- 1 cache size(mega bytes), 2 buffers , 3 1 simulation physical read , 4 physical reads .

- . . 1 buffer cache buffer cacahe

.

SQL> select size_for_estimate est_sz_mb, buffers_for_estimate est_bf, 2 estd_physical_read_factor est_ph_fat, estd_physical_reads est_ph_rd 3 from v$db_cache_advice 4 where name = 'DEFAULT' and block_size = 5 (select value from v$parameter 6 where name = 'db_block_size') 7 and advice_status = 'ON'; EST_SZ_MB EST_BF EST_PH_FAT EST_PH_RD ---------- ---------- ---------- ---------- 96 11478 18.7054 327624993 192 22956 18.5522 324942572 288 34434 18.4252 322717116 384 45912 3.0058 52646898 480 57390 2.7917 48896081 576 68868 2.6919 47148558 672 80346 2.3669 41455621 768 91824 1.0128 17738704 864 103302 1.0061 17622537 960 114780 1.0023 17554476 1008 120519 1 17515028 1056 126258 .9991 17499910 1152 137736 .8959 15691424 1248 149214 .8935 15649999 1344 160692 .8916 15617185 1440 172170 .8836 15476515 1536 183648 .8781 15379658 1632 195126 .8766 15353760 1728 206604 .8735 15299149 1824 218082 .8694 15228281 1920 229560 .8171 14311235 21 rows selected.

Page 227: Oracle History #6

[email protected] - 227 -

Oracle9i New Features http://www.ggola.com

- buffer cache 30% physical reads

. +10% buffer memory . +20% ~ +100% buffer

.

- , buffer cache 18% .

dynamic sga example

SQL> !vi initNEWSVC.ora .. ## estimated sga max sie sga_max_size = 524288000 # 500M ## Database block cache and I/O db_block_size = 8192 # 8K ( 2003-07-23) db_cache_size = 83886080 # 80M db_4k_cache_size = 20971520 # 20M db_16k_cache_size = 31457280 # 30M db_keep_cache_size = 10485760 # 10M db_recycle_cache_size = 10485760 # 10M ## Redo log buffer size log_buffer = 3145728 # 5M ( 2003-07-23) ## Shared and other pools shared_pool_size = 62914560 # 60M ( 2003-07-23) java_pool_size = 10485760 # 10M ( 2003-07-23) large_pool_size = 41943040 # 40M (oracle derived value is too large) ## PGA, Sort, Hash Joins, Bitmap Indexes and others pga_aggregate_target = 104857600 # 100M workarea_size_policy = AUTO # oracle will control server process memory .. ~ "initNEWSVC.ora" 185L, 6836C written SQL> sho sga Total System Global Area 540611040 bytes Fixed Size 451040 bytes Variable Size 352321536 bytes Database Buffers 184549376 bytes Redo Buffers 3289088 bytes

. initial parameter ? setting 80+20+30+10+10+5+60+10+40=265 mb . total size

sga_max_size 500M 540611040 = 515.6 mb . .

SQL> sho parameter db_cache_size NAME TYPE VALUE ----------------------- --------------- --------- db_cache_sizebig integer 83886080

Page 228: Oracle History #6

[email protected] - 228 -

Oracle9i New Features http://www.ggola.com

SQL> sho parameter db_keep_cache_size NAME TYPE VALUE ----------------------- --------------- --------- db_keep_cache_sizebig integer 16777216

db_cache_size db_keep_cache_size allocation . memory allocation unit granule .

sga_max_size 128mb 16mb granule unit . 10mb 16mb 20mb 30mb 32mb . db_cache_size 80mb 16 5

. total sga . 265mb granule

80+32+32+16+16+5+64+16+48=309 mb . total sga ?

. buffer cache : 80+32+32+16+16=176 (176*1024*1024=184549376) sho sga 184549376 . ! redo buffers : parameter 3145728 3289088 . .

fixed sga + redo log buffer one granule one granule . fixed size + redo buffers = 451040 + 3289088 = 3740128 = 3.6mb

shared pool . shared pool granule 64+16+48=128 mb . sho sga shared pool . , variable size

352321536 = 336mb = 21 granule . buffer cache + variable = 184549376 + 352321536 = 536870912 = 512mb

, sga_max_size 500mb granule 512mb fixed size + redo buffer total sga .

database startup oracle sga parameters granule sga_max_size granule

variable size . .

SQL> alter system set db_cache_size = 100m; System altered.

db_cache_size 100mb . granule 112mb . 112+32+32+16+16=208 208*1024*1024=218103808 bytes

SQL> sho sga Total System Global Area 540611040 bytes Fixed Size 451040 bytes Variable Size 318767104 bytes Database Buffers 218103808 bytes Redo Buffers 3289088 bytes

database buffers . total sga . .

SQL> alter system set db_cache_size = 80m; System altered. SQL> sho sga Total System Global Area 540611040 bytes Fixed Size 451040 bytes Variable Size 352321536 bytes Database Buffers 184549376 bytes Redo Buffers 3289088 bytes

. granule variable size granule .

Page 229: Oracle History #6

[email protected] - 229 -

Oracle9i New Features http://www.ggola.com

16. Oracle Enterprise Manager

basic description

oem 8i 4 from 9i master and detail , 2 . database administration features oem console .

launching

- stand alone : oem monitor server (client tnsnames.ora )

- oms : oracle management server host userid/password

oms

- oms oms oms .

. event notify stand alone .

1. oms 3tier repository job, event .

2. oms node 1 agent . (3tier )

stand alone limits

1. target database .

2. events, jobs group .

3. 3 tier 2 tier multi database , oracle management server

repository stand alone repository web-enabled applications

.

4. no paging and e-mail : e-mail notify .

5. rman gui .

6. customizing, scheduling reports .

CF. stand alone oms .

Page 230: Oracle History #6

[email protected] - 230 -

Oracle9i New Features http://www.ggola.com

stand alone repository

- standalone repository database single user database repository schema .

- database sql analyze, index tuning wizard, tablespace map .

supporting for database features

dba

- dba oem gui . parameter file (spfile ) undo

tablespace , buffer cache size advice new features .

report

- oem html database reports generation .

1. database configuration report

2. report

3. object dependencies report

events

- user-defined events : condition event automatic monitoring .

- oracle9i intelligent agent event scripts can be written in any language on the host server.

- user-defined condition scripts .

event handler

- event trigger event handler event information file

os command . 3rd-party tool .

CF. oem oracle new feature oem

. oracle oem ,

Page 231: Oracle History #6

[email protected] - 231 -

Oracle9i New Features http://www.ggola.com

. 9i oem oms report generation . oem .

Page 232: Oracle History #6

[email protected] - 232 -

Oracle9i New Features http://www.ggola.com

17. New and Standard SQL

basic description

SQL:1999 (SQL:1999 notations of both ANSI and ISO/IEC standards)

CF. "ISO/IEC 9075-1:1999." sql .

, from 9i .

1. sql code third party application migration .

2. 9i db ANSI ISO/IEC standards .

3. database 9i .

new function

1. case expression

2. scalar subquery

3. explicit default value

4. merge

5. analytical functions and grouping sets

6. using naming query block with "with" clause

detail description and example

- SQL:1999 join

- .

- . , . .

Page 233: Oracle History #6

[email protected] - 233 -

Oracle9i New Features http://www.ggola.com

SQL> conn scott/tiger Connected. SQL> drop table emp; Table dropped. SQL> drop table dept; Table dropped. SQL> create table emp (emp_id varchar2(10), emp_name varchar2(10), 2 dept_id varchar2(10), salary number) tablespace users; SQL> create table dept (dept_id varchar2(10), dept_name varchar2(10), 2 remark varchar2(10)) tablespace users; SQL> insert into dept values ('A001', 'SALES', ''); SQL> insert into dept values ('B001', 'SYSTEM', ''); SQL> insert into dept values ('C001', 'DATABASE', ''); SQL> insert into emp values ('A101200010', 'JOHN', 'A001', 100000); SQL> insert into emp values ('A102200102', 'ELLISON', 'A001', 200000); SQL> insert into emp values ('B101200101', 'LEE', 'B001', 150000); SQL> insert into emp values ('B102200208', 'JANG', 'B001', 145000); SQL> insert into emp values ('C101200101', 'KATE', 'C001', 302000); SQL> insert into emp values ('C102200302', 'CHOI', 'C001', 450000); SQL> alter table emp add constraint pk_emp_id primary key (emp_id); SQL> alter table dept add constraint pk_dept_id primary key (dept_id); SQL> alter table emp add constraint fk_emp_dept_id 2 foreign key (dept_id) references dept (dept_id); SQL> select * from emp; EMP_ID EMP_NAME DEPT_ID SALARY ---------- ---------- ---------- ---------- A101200010 JOHN A001 100000 A102200102 ELLISON A001 200000 B101200101 LEE B001 150000 B102200208 JANG B001 145000 C101200101 KATE C001 302000 C102200302 CHOI C001 450000 SQL> select * from dept; DEPT_ID DEPT_NAME REMARK ---------- ---------- ---------- A001 SALES B001 SYSTEM C001 DATABASE

Page 234: Oracle History #6

[email protected] - 234 -

Oracle9i New Features http://www.ggola.com

- cross join : from table join "cross join" .

- cross join cartesian product . , row join .

- to 8i join , from table where join

.

SQL> select e.emp_name, d.dept_name 2 from emp e 3 cross join 4 dept d; EMP_NAME DEPT_NAME ---------- ---------- JOHN SALES ELLISON SALES LEE SALES JANG SALES KATE SALES CHOI SALES JOHN SYSTEM ELLISON SYSTEM LEE SYSTEM JANG SYSTEM KATE SYSTEM CHOI SYSTEM JOHN DATABASE ELLISON DATABASE LEE DATABASE JANG DATABASE KATE DATABASE CHOI DATABASE 18 rows selected.

? 6 cartesian product 18 rows return . where from "from emp e, dept d"

.

Page 235: Oracle History #6

[email protected] - 235 -

Oracle9i New Features http://www.ggola.com

- natural join : from table . table column

join data type alias .

- "select *" column column .

SQL> select * from emp 2 natural join 3 dept; DEPT_ID EMP_ID EMP_NAME SALARY DEPT_NAME REMARK ---------- ---------- ---------- ---------- ---------- ---------- A001 A101200010 JOHN 100000 SALES A001 A102200102 ELLISON 200000 SALES B001 B101200101 LEE 150000 SYSTEM B001 B102200208 JANG 145000 SYSTEM C001 C101200101 KATE 302000 DATABASE C001 C102200302 CHOI 450000 DATABASE 6 rows selected.

dept_id join dept_id . . SQL> select e.emp_name ename, d.dept_name dname 2 from emp e 3 natural join 4 dept d; ENAME DNAME ---------- ---------- JOHN SALES ELLISON SALES LEE SYSTEM JANG SYSTEM KATE DATABASE CHOI DATABASE 6 rows selected.

alias . SQL> select e.emp_name ename, d.dept_name dname, 2 e.dept_id, d.dept_id 3 from emp e 4 natural join 5 dept d; e.dept_id, d.dept_id * ERROR at line 2: ORA-25155: column used in NATURAL join cannot have qualifier SQL> select e.emp_name ename, d.dept_name dname 2 from emp e 3 natural join 4 dept d 5 where d.dept_id = 'B001'; where d.dept_id = 'B001' * ERROR at line 5: ORA-25155: column used in NATURAL join cannot have qualifier

, natural join column alias alias . table 3 .

.

Page 236: Oracle History #6

[email protected] - 236 -

Oracle9i New Features http://www.ggola.com

- equijoin and using clause with or without on clause : where "=" join from . ( . natural join column join

column . natural join using

on )

SQL> create table reg_test (remark varchar2(10), 2 reg_name varchar2(10)) tablespace users; SQL> insert into reg_test values ('E01', 'EAST'); SQL> insert into reg_test values ('W01', 'WEST'); SQL> insert into reg_test values ('S01', 'SOUTH'); SQL> insert into reg_test values ('N01', 'NORTH'); SQL> update dept set remark = 'E01' where dept_id = 'A001'; SQL> update dept set remark = 'W01' where dept_id = 'B001'; SQL> update dept set remark = 'S01' where dept_id = 'C001'; SQL> alter table reg_test add constraint pk_reg_test 2 primary key(remark); SQL> select r.reg_name region, e.emp_name ename, 2 d.dept_name dname 3 from emp e natural join dept d 4 natural join reg_test r 5 where r.reg_name in ('EAST', 'SOUTH'); REGION ENAME DNAME ---------- ---------- ---------- EAST JOHN SALES EAST ELLISON SALES SOUTH KATE DATABASE SOUTH CHOI DATABASE

. . . same name, same data type! CF. . region table key region id column remark . region table key remark reg_id natural join . . .

SQL> create table region (reg_id varchar2(10), 2 reg_name varchar2(10)) tablespace users; SQL> insert into region values ('E01', 'EAST'); SQL> insert into region values ('W01', 'WEST'); SQL> insert into region values ('S01', 'SOUTH'); SQL> insert into region values ('N01', 'NORTH'); SQL> alter table region add constraint pk_region_id 2 primary key(reg_id); SQL> alter table dept add constraint fk_dept_reg 2 foreign key(remark) references region(reg_id);

Page 237: Oracle History #6

[email protected] - 237 -

Oracle9i New Features http://www.ggola.com

SQL> select * from dept; DEPT_ID DEPT_NAME REMARK ---------- ---------- ---------- A001 SALES E01 B001 SYSTEM W01 C001 DATABASE S01 SQL> select * from region; REG_ID REG_NAME ---------- ---------- E01 EAST W01 WEST S01 SOUTH N01 NORTH SQL> commit; SQL> select r.reg_name rname, e.emp_name ename, 2 d.dept_name dname, e.salary money 3 from dept d join 4 emp e using (dept_id) join 5 region r on (d.remark = r.reg_id) 6 where r.reg_id in ('E01', 'W01'); RNAME ENAME DNAME MONEY ---------- ---------- ---------- ---------- WEST LEE SYSTEM 150000 WEST JANG SYSTEM 145000 EAST JOHN SALES 100000 EAST ELLISON SALES 200000

. on alias . on "=" equijoin . SQL> select r.reg_name rname, e.emp_name ename, 2 d.dept_name dname, e.salary money 3 from dept d join 4 emp e using (dept_id) join 5 region r on (d.remark = r.reg_id) 6 where r.reg_id in ('E01', 'W01') and d.dept_id like 'B%'; where r.reg_id in ('E01', 'W01') and d.dept_id like 'B%' * ERROR at line 6: ORA-25154: column part of USING clause cannot have qualifier

natural join using join column alias error . SQL> select r.reg_name rname, d.dept_name dname, e.emp_name ename 2 from dept d join region r on (d.remark = r.reg_id) join 3 emp e on (e.dept_id = d.dept_id); RNAME DNAME ENAME ---------- ---------- ---------- EAST SALES JOHN EAST SALES ELLISON WEST SYSTEM LEE WEST SYSTEM JANG SOUTH DATABASE KATE SOUTH DATABASE CHOI

alias error . , using on alias error .

Page 238: Oracle History #6

[email protected] - 238 -

Oracle9i New Features http://www.ggola.com

- outer join : join (+) .

SQL> select r.reg_name rname, d.dept_name dname, e.emp_name ename 2 from dept d join region r on (d.remark = r.reg_id) join 3 emp e on (e.dept_id = d.dept_id) 4 where e.dept_id like 'A%'; RNAME DNAME ENAME ---------- ---------- ---------- EAST SALES JOHN EAST SALES ELLISON

where alias error . , on column where alias .

on type . , join column 3 table table table join

join .

SQL> insert into dept values 2 ('D001', 'ERP', 'N01'); SQL> insert into emp values 2 ('D101200310', 'HONG', '', 645000); SQL> commit; SQL> select * from emp; EMP_ID EMP_NAME DEPT_ID SALARY ---------- ---------- ---------- ---------- A101200010 JOHN A001 100000 A102200102 ELLISON A001 200000 B101200101 LEE B001 150000 B102200208 JANG B001 145000 C101200101 KATE C001 302000 C102200302 CHOI C001 450000 D101200310 HONG 645000

7 rows ( 7 1 ) SQL> select * from dept; DEPT_ID DEPT_NAME REMARK ---------- ---------- ---------- A001 SALES E01 B001 SYSTEM W01 C001 DATABASE S01 D001 ERP N01

4 rows ( ERP )

Page 239: Oracle History #6

[email protected] - 239 -

Oracle9i New Features http://www.ggola.com

SQL> select e.emp_name, d.dept_name 2 from emp e left join 3 dept d on (e.dept_id = d.dept_id); EMP_NAME DEPT_NAME ---------- ---------- ELLISON SALES JOHN SALES JANG SYSTEM LEE SYSTEM CHOI DATABASE KATE DATABASE HONG

left outer join 7 rows ( (+) ) SQL> select e.emp_name, d.dept_name 2 from emp e right outer join 3 dept d on (e.dept_id = d.dept_id); EMP_NAME DEPT_NAME ---------- ---------- JOHN SALES ELLISON SALES LEE SYSTEM JANG SYSTEM KATE DATABASE CHOI DATABASE ERP

right outer join 7 rows ( (+) ) SQL> select e.emp_name, d.dept_name 2 from emp e full join 3 dept d on (e.dept_id = d.dept_id); EMP_NAME DEPT_NAME ---------- ---------- ELLISON SALES JOHN SALES JANG SYSTEM LEE SYSTEM CHOI DATABASE KATE DATABASE HONG ERP

full outer join 8 rows ( (+) ) CF. right outer join outer . ,

outer left|right|full .

Page 240: Oracle History #6

[email protected] - 240 -

Oracle9i New Features http://www.ggola.com

SQL:1999 case expression

- simple case expression (available in oracle8i) : decode .

- searched case expression : decode .

SQL> select r.reg_name rname, d.dept_name dname, 2 e.emp_name ename, 3 (case e.salary/1000 4 when 100 then 'lowest' 5 when 145 then 'lower' 6 when 150 then 'low' 7 else 'not low' 8 end) "money(k)" 9 from dept d join 10 emp e using (dept_id) join 11 region r on (d.remark = r.reg_id) 12 where r.reg_id in ('E01', 'W01'); RNAME DNAME ENAME money(k) ---------- ---------- ---------- ---------- WEST SYSTEM LEE low WEST SYSTEM JANG lower EAST SALES JOHN lowest EAST SALES ELLISON not low

decode . case .

SQL> alter table emp add hire_date date ; SQL> update emp e set hire_date = 2 (select to_date(substr(emp_id, 5) || '01', 'YYYYMMDD') 3 from emp where emp_id = e.emp_id); 7 rows updated. SQL> alter session set nls_date_format='yyyymmdd'; SQL> select * from emp; EMP_ID EMP_NAME DEPT_ID SALARY HIRE_DAT ---------- ---------- ---------- ---------- -------- A101200010 JOHN A001 100000 20001001 A102200102 ELLISON A001 200000 20010201 B101200101 LEE B001 150000 20010101 B102200208 JANG B001 145000 20020801 C101200101 KATE C001 302000 20010101 C102200302 CHOI C001 450000 20030201 D101200310 HONG 645000 20031001

update .

Page 241: Oracle History #6

[email protected] - 241 -

Oracle9i New Features http://www.ggola.com

- nullif and coalesce(case abbreviation) : nvl function .

1. nullif(arg1, arg2) = (case when arg1 = arg2 then null else arg1 end) (2 argument )

2. coalesce(arg1, arg2, arg3) = (case when arg1 is not null then arg1 when arg2 is not null then arg2 else arg3 end) (2

argument )

SQL> commit; SQL> select r.reg_name rname, d.dept_name dname, 2 (case 3 when e.salary/1000 <= 200 then e.emp_name ||' : low' 4 when e.salary/1000 <= 400 then e.emp_name ||' : middle' 5 else 'high' 6 end) "money(k)", 7 (case 8 when e.emp_name = 'ELLISON' then 'ceo' 9 when extract(year from e.hire_date) < 2002 then 'old boy' 10 when extract(year from e.hire_date) < 2003 then 'new boy' 11 else 'who are you?' 12 end) "man power" 13 from dept d join 14 emp e using (dept_id) join 15 region r on (d.remark = r.reg_id) 16 order by 4; RNAME DNAME money(k) man power ---------- ---------- --------------- --------------- EAST SALES ELLISON : low ceo WEST SYSTEM JANG : low new boy EAST SALES JOHN : low old boy SOUTH DATABASE KATE : middle old boy WEST SYSTEM LEE : low old boy SOUTH DATABASE high who are you?

searched case case column column .

SQL> select r.reg_name rname, d.dept_name dname, 2 e.emp_name ename, 3 coalesce(dept_id, r.reg_id, 'odd boy') "dept or other" 4 from dept d full join 5 emp e using (dept_id) full join 6 region r on (d.remark = r.reg_id); RNAME DNAME ENAME dept or ot ---------- ---------- ---------- ---------- EAST SALES ELLISON A001 EAST SALES JOHN A001 WEST SYSTEM JANG B001 WEST SYSTEM LEE B001 SOUTH DATABASE CHOI C001 SOUTH DATABASE KATE C001 NORTH ERP D001 HONG odd boy

full outer join 8 rows . "HONG" "odd boy" .

Page 242: Oracle History #6

[email protected] - 242 -

Oracle9i New Features http://www.ggola.com

- scalar subquery : select expression in select or where clause limited : column default value, return clause, hash expression, function-based index, check constraint column, when condition of trigger, group by clause

SQL> select * from emp order by salary desc; EMP_ID EMP_NAME DEPT_ID SALARY HIRE_DAT ---------- ---------- ---------- ---------- -------- D101200310 HONG 645000 20031001 C102200302 CHOI C001 450000 20030201 C101200101 KATE C001 302000 20010101 A102200102 ELLISON A001 200000 20010201 B101200101 LEE B001 150000 20010101 B102200208 JANG B001 145000 20020801 A101200010 JOHN A001 100000 20001001 7 rows selected.

? SQL> select sum(salary) - sum(nullif(salary, 645000)) 2 from emp; SUM(SALARY)-SUM(NULLIF(SALARY, ------------------------------ 645000

645000 1 . 645000 * 2 = 1290000 . ceo ellison HONG ? SQL> update emp set salary = 645000 2 where emp_name = 'ELLISON'; SQL> select sum(salary) - sum(nullif(salary, 645000)) 2 from emp; SUM(SALARY)-SUM(NULLIF(SALARY, ------------------------------ 1290000 SQL> rollback;

SQL> update dept set remark = 'E01' 2 where dept_name = 'ERP'; SQL> commit; SQL> select r.reg_name rname, d.dept_name dname, 2 coalesce(dept_id, r.reg_id, 'odd boy') "dept or other", 3 (select count(*) from dept where remark = r.reg_id) total_dept 4 from dept d join 5 emp e using (dept_id) join 6 region r on (d.remark = r.reg_id) 7 where (select extract(year from hire_date) from emp where emp_id = e.emp_id) < 8 (select extract(year from sysdate) from dual) 9 order by 4; RNAME DNAME dept or ot TOTAL_DEPT ---------- ---------- ---------- ---------- WEST SYSTEM B001 1 WEST SYSTEM B001 1 SOUTH DATABASE C001 1 EAST SALES A001 2 EAST SALES A001 2

select where select . data .

Page 243: Oracle History #6

[email protected] - 243 -

Oracle9i New Features http://www.ggola.com

- default : user can speicfy default keyword using column default value from data dictionary.

- sql default keyword default value sql

( , ) .

SQL> insert into region values ('SE1', default); SQL> insert into region values ('NE1', 'NOEAT'); SQL> select * from region; REG_ID REG_NAME ---------- ---------- E01 EAST W01 WEST S01 SOUTH N01 NORTH SE1 NE1 NOEAT SQL> update region set reg_name = default 2 where reg_id = 'NE1'; SQL> select * from region; REG_ID REG_NAME ---------- ---------- E01 EAST W01 WEST S01 SOUTH N01 NORTH SE1 NE1

default value default null . SQL> alter table region modify reg_name default 'N/A'; SQL> select * from region; REG_ID REG_NAME ---------- ---------- E01 EAST W01 WEST S01 SOUTH N01 NORTH SE1 NE1 SQL> update region set reg_name = default 2 where reg_id = 'SE1'; SQL> select * from region; REG_ID REG_NAME ---------- ---------- E01 EAST W01 WEST S01 SOUTH N01 NORTH SE1 N/A NE1

default value .

Page 244: Oracle History #6

[email protected] - 244 -

Oracle9i New Features http://www.ggola.com

- merge : table data update insert logical

1 sql .

- .

- 1 sql better performance . (especially efficient in data warehousing) ( upsert

)

SQL> alter table region modify reg_name default 'NO USE'; SQL> update region set reg_name = default 2 where reg_id = 'NE1'; SQL> select * from region; REG_ID REG_NAME ---------- ---------- E01 EAST W01 WEST S01 SOUTH N01 NORTH SE1 N/A NE1 NO USE

default value .

SQL> select * from emp; EMP_ID EMP_NAME DEPT_ID SALARY HIRE_DATE ---------- ---------- ---------- ---------- --------- A101200010 JOHN A001 100000 01-OCT-00 A102200102 ELLISON A001 200000 01-FEB-01 B101200101 LEE B001 150000 01-JAN-01 B102200208 JANG B001 145000 01-AUG-02 C101200101 KATE C001 302000 01-JAN-01 C102200302 CHOI C001 450000 01-FEB-03 D101200310 HONG 645000 01-OCT-03 7 rows selected. SQL> select * from dept; DEPT_ID DEPT_NAME REMARK ---------- ---------- ---------- A001 SALES E01 B001 SYSTEM W01 C001 DATABASE S01 D001 ERP E01

. HONG ERP entry ID .

SQL HONG ERP ID .

Page 245: Oracle History #6

[email protected] - 245 -

Oracle9i New Features http://www.ggola.com

analytical function

- rank function : rank, dense_rank, percent_rank

SQL> merge into emp em 2 using (select emp_name, dept_id from emp where emp_name = 'HONG') ep 3 on (em.emp_name = ep.emp_name and ep.dept_id is null) 4 when matched then update set dept_id = 5 (select dept_id from dept where dept_name = 'ERP') 6 when not matched then insert values ('D102200310','', '', 0, sysdate); 1 row merged. SQL> / 1 row merged. SQL> select * from emp; EMP_ID EMP_NAME DEPT_ID SALARY HIRE_DATE ---------- ---------- ---------- ---------- --------- A101200010 JOHN A001 100000 01-OCT-00 A102200102 ELLISON A001 200000 01-FEB-01 B101200101 LEE B001 150000 01-JAN-01 B102200208 JANG B001 145000 01-AUG-02 C101200101 KATE C001 302000 01-JAN-01 C102200302 CHOI C001 450000 01-FEB-03 D101200310 HONG D001 645000 01-OCT-03 D102200310 0 22-OCT-03 8 rows selected. SQL> commit;

update, insert . , merge using table data on true,

false . , if on is true then update else insert .

SQL> alter table emp add commission number(5,2); SQL> update emp e set commission = 2 (select to_number('0.0' || substr(emp_id, 4, 1)) from emp p 3 where e.emp_id = p.emp_id);

test 4 commssion percent .

SQL> select * from emp; EMP_ID EMP_NAME DEPT_ID SALARY HIRE_DATE COMMISSION ---------- ---------- ---------- ---------- --------- ---------- A101200010 JOHN A001 100000 01-OCT-00 .01 A102200102 ELLISON A001 200000 01-FEB-01 .02 B101200101 LEE B001 150000 01-JAN-01 .01 B102200208 JANG B001 145000 01-AUG-02 .02 C101200101 KATE C001 302000 01-JAN-01 .01 C102200302 CHOI C001 450000 01-FEB-03 .02 D101200310 HONG D001 645000 01-OCT-03 .01 D102200310 0 22-OCT-03 .02

.

Page 246: Oracle History #6

[email protected] - 246 -

Oracle9i New Features http://www.ggola.com

SQL> update emp set emp_name = 'GRACE', salary = 150000, dept_id = 'C001' 2 where emp_id = 'D102200310'; 1 row updated. SQL> update emp set salary = 250000 where dept_id = 'C001'; 3 rows updated.

. SQL> select * from emp order by salary, commission; EMP_ID EMP_NAME DEPT_ID SALARY HIRE_DATE COMMISSION ---------- ---------- ---------- ---------- --------- ---------- A101200010 JOHN A001 100000 01-OCT-00 .01 B102200208 JANG B001 145000 01-AUG-02 .02 B101200101 LEE B001 150000 01-JAN-01 .01 A102200102 ELLISON A001 200000 01-FEB-01 .02 C101200101 KATE C001 250000 01-JAN-01 .01 C102200302 CHOI C001 250000 01-FEB-03 .02 D102200310 GRACE C001 250000 22-OCT-03 .02 D101200310 HONG D001 645000 01-OCT-03 .01 SQL> commit; SQL> select 2 rank(250000, .01) within group 3 (order by salary, commission desc) "rank1", 4 dense_rank(250000, .01) within group 5 (order by salary, commission desc) "drank1", 6 percent_rank(250000, .01) within group 7 (order by salary, commission desc) "prank1", 8 rank(250000, .02) within group 9 (order by salary, commission desc) "rank2", 10 dense_rank(250000, .02) within group 11 (order by salary, commission desc) "drank2", 12 percent_rank(250000, .02) within group 13 (order by salary, commission desc) "prank2" 14 from emp; rank1 drank1 prank1 rank2 drank2 prank2 ---------- ---------- ---------- ---------- ---------- ---------- 7 6 .75 5 5 .5

250000 commission 0.01 or 0.02 ranking . (salray desc

commission ranking )

aggregation example . rank ranking . dense_rank ranking

ranking ranking . percent_rank ranking percent .

Page 247: Oracle History #6

[email protected] - 247 -

Oracle9i New Features http://www.ggola.com

- percentile and distribution function : percentile_cont, percentile_disc, cume_dist

SQL> select dept_name, emp_name, salary, commission, 2 rank() over (order by salary desc, commission) "rank", 3 dense_rank() over (order by salary desc, commission) "drank", 4 percent_rank() over (order by salary desc, commission) "prank" 5 from emp natural join dept; DEPT_NAME EMP_NAME SALARY COMMISSION rank drank prank ---------- ---------- ---------- ---------- ---------- ---------- ---------- ERP HONG 645000 .01 1 1 0 DATABASE KATE 250000 .01 2 2 .142857143 DATABASE CHOI 250000 .02 3 3 .285714286 DATABASE GRACE 250000 .02 3 3 .285714286 SALES ELLISON 200000 .02 5 4 .571428571 SYSTEM LEE 150000 .01 6 5 .714285714 SYSTEM JANG 145000 .02 7 6 .857142857 SALES JOHN 100000 .01 8 7 1

analytical example . ranking percent . percent . percent ranking 1 1

0 1 .

SQL> insert into emp values ('A103200310', 'LIM', 'A001', 300000, sysdate, 0.03); SQL> insert into emp values ('A104200310', 'KIM', 'A001', 400000, sysdate, 0.04); SQL> insert into emp values ('A105200310', 'WILLSON', 'A001', 350000, sysdate, 0.05); SQL> insert into emp values ('A106200310', 'JENNY', 'A001', 450000, sysdate, 0.06); SQL> insert into emp values ('A103200311', 'JERRY', 'A001', 250000, sysdate, 0.03); SQL> insert into emp values ('A104200311', 'PERL', 'A001', 280000, sysdate, 0.04); SQL> commit; SQL> select * from emp where dept_id = 'A001' 2 order by salary; EMP_ID EMP_NAME DEPT_ID SALARY HIRE_DATE COMMISSION ---------- ---------- ---------- ---------- --------- ---------- A101200010 JOHN A001 100000 01-OCT-00 .01 A102200102 ELLISON A001 200000 01-FEB-01 .02 A103200311 JERRY A001 250000 22-OCT-03 .03 A104200311 PERL A001 280000 22-OCT-03 .04 A103200310 LIM A001 300000 22-OCT-03 .03 A105200310 WILLSON A001 350000 22-OCT-03 .05 A104200310 KIM A001 400000 22-OCT-03 .04 A106200310 JENNY A001 450000 22-OCT-03 .06

.

analytical example .

Page 248: Oracle History #6

[email protected] - 248 -

Oracle9i New Features http://www.ggola.com

SQL> select dept_name, emp_name, dept_id, salary, 2 percentile_cont(0.3) within group (order by salary desc) 3 over (partition by dept_id) "cont money", 4 percentile_disc(0.3) within group (order by salary desc) 5 over (partition by dept_id) "disc money", 6 cume_dist() over (partition by dept_id order by salary desc) "cume money", 7 percent_rank() over (partition by dept_id order by salary desc) "pct rank" 8 from emp natural join dept 9 where dept_id = 'A001'; DEPT_NAME EMP_NAME DEPT_ SALARY cont money disc money cume money pct

rank ---------- ---------- ----- ---------- ---------- ---------- ---------- ---------- SALES JENNY A001 450000 345000 350000 .125 0 SALES KIM A001 400000 345000 350000 .25 .142857143 SALES WILLSON A001 350000 345000 350000 .375 .285714286 SALES LIM A001 300000 345000 350000 .5 .428571429 SALES PERL A001 280000 345000 350000 .625 .571428571 SALES JERRY A001 250000 345000 350000 .75 .714285714 SALES ELLISON A001 200000 345000 350000 .875 .857142857 SALES JOHN A001 100000 345000 350000 1 1

. percentile_cont salary , percent rank ( 0, 1) argument percent . , percent 0.28 ~ 0.42 0.3 . (percent rank : 1 0

)

cume_dist data 1 percent . , rows 1 rows count .

percentile_disc cume_dist argument

. , percentile_disc percentile_cont data

.

aggregation example . SQL> select dept_name, sum(salary), 2 percentile_cont(0.5) within group (order by salary desc) "cont money", 3 percentile_disc(0.5) within group (order by salary desc) "disc money" 4 from emp natural join dept 5 group by dept_name; DEPT_NAME SUM(SALARY) cont money disc money ---------- ----------- ---------- ---------- DATABASE 750000 250000 250000 ERP 645000 645000 645000 SALES 2330000 290000 300000 SYSTEM 295000 147500 150000

percentile value . , percentil_cont(0.5) 1, 0 , percentil_disc(0.5)

.

Page 249: Oracle History #6

[email protected] - 249 -

Oracle9i New Features http://www.ggola.com

- first and last rank function : first, last

- ranking grouping ranking .

- width_bucket and ntile function : boundary bucket histogram function bucket count

data . .

EX. width_bucket(value, low, high, bucket count) ntile(bucket count) over (order by value)

SQL> select dept_name, 2 min(salary) keep (dense_rank first order by commission) lower, 3 max(salary) keep (dense_rank last order by commission) higer 4 from emp natural join dept 5 group by dept_name; DEPT_NAME LOWER HIGER ---------- ---------- ---------- DATABASE 250000 250000 ERP 645000 645000 SALES 100000 200000 SYSTEM 150000 145000

commission , commission commission

. system commission commission . commission system .

SQL> select dept_name, emp_name, salary, 2 width_bucket(salary, 110000, 610000, 5) histogram, 3 ntile(5) over (order by salary desc) ntiledata 4 from emp natural join dept 5 where emp_name in ( 'JOHN', 'JANG', 'LEE', 'ELLISON', 'KATE', 'CHOI', 6 'GRACE', 'HONG') order by 3; DEPT_NAME EMP_NAME SALARY HISTOGRAM NTILEDATA ---------- ---------- ---------- ---------- ---------- SALES JOHN 100000 0 5 SYSTEM JANG 145000 1 4 SYSTEM LEE 150000 1 3 SALES ELLISON 200000 1 3 DATABASE KATE 250000 2 1 DATABASE GRACE 250000 2 2 DATABASE CHOI 250000 2 2 ERP HONG 645000 6 1

width 11 61 5 . (21, 31, 41, 51, 61) , 11

0 61 6 . 3 5 , 32 ~ 61 .

, , . . ntile 8 rows 5 . , 8/5 3 1, 2, 3 .

Page 250: Oracle History #6

[email protected] - 250 -

Oracle9i New Features http://www.ggola.com

analytical grouping sets

- grouping sets : in 8i group by rollup, cube grouping sets . group by column union all approach

.

EX. , , commission , commission commission ,

.

SQL> alter table emp add recommender varchar2(10); SQL> update emp set recommender = 'CEO' 2 where mod(to_number(substr(emp_id, 4, 1)), 2) = 0; SQL> update emp set recommender = 'CIO' 2 where mod(to_number(substr(emp_id, 4, 1)), 2) = 1; SQL> commit;

4 CIO CEO .

SQL> select * from emp; EMP_ID EMP_NAME DEPT_ID SALARY HIRE_DATE COMMISSION RECOMMENDE ---------- ---------- ---------- ---------- --------- ---------- ---------- A101200010 JOHN A001 100000 01-OCT-00 .01 CIO A102200102 ELLISON A001 200000 01-FEB-01 .02 CEO B101200101 LEE B001 150000 01-JAN-01 .01 CIO B102200208 JANG B001 145000 01-AUG-02 .02 CEO C101200101 KATE C001 250000 01-JAN-01 .01 CIO C102200302 CHOI C001 250000 01-FEB-03 .02 CEO D101200310 HONG D001 645000 01-OCT-03 .01 CIO D102200310 GRACE C001 250000 22-OCT-03 .02 CEO A103200310 LIM A001 300000 22-OCT-03 .03 CIO A104200310 KIM A001 400000 22-OCT-03 .04 CEO A105200310 WILLSON A001 350000 22-OCT-03 .05 CIO A106200310 JENNY A001 450000 22-OCT-03 .06 CEO A103200311 JERRY A001 250000 22-OCT-03 .03 CIO A104200311 PERL A001 280000 22-OCT-03 .04 CEO

sql . SQL> select dept_name, recommender, commission, sum(salary) 2 from emp natural join dept 3 group by recommender, dept_name, commission 4 union all 5 select '', recommender, commission, sum(salary) 6 from emp natural join dept 7 group by recommender, commission 8 union all 9 select '', recommender, commission, sum(salary) 10 from emp natural join dept 11 group by commission, recommender;

Page 251: Oracle History #6

[email protected] - 251 -

Oracle9i New Features http://www.ggola.com

DEPT_NAME RECOMMENDE COMMISSION SUM(SALARY) -------------------------------- ---------- ---------- ----------- SALES CEO .02 200000 SALES CEO .04 680000 SALES CEO .06 450000 SYSTEM CEO .02 145000 DATABASE CEO .02 500000 ERP CIO .01 645000 SALES CIO .01 100000 SALES CIO .03 550000 SALES CIO .05 350000 SYSTEM CIO .01 150000 DATABASE CIO .01 250000 CEO .02 845000 CEO .04 680000 CEO .06 450000 CIO .01 1145000 CIO .03 550000 CIO .05 350000 CIO .01 1145000 CEO .02 845000 CIO .03 550000 CEO .04 680000 CIO .05 350000 CEO .06 450000 23 rows selected.

grouping sets . . SQL> select dept_name, recommender, commission, sum(salary) 2 from emp natural join dept 3 group by grouping sets 4 ((recommender, dept_name, commission), 5 (recommender, commission), 6 (commission, recommender)); DEPT_NAME RECOMMENDE COMMISSION SUM(SALARY) ---------- ---------- ---------- ----------- SALES CEO .02 200000 SYSTEM CEO .02 145000 DATABASE CEO .02 500000 SALES CEO .04 680000 SALES CEO .06 450000 ERP CIO .01 645000 SALES CIO .01 100000 SYSTEM CIO .01 150000 DATABASE CIO .01 250000 SALES CIO .03 550000 SALES CIO .05 350000 CEO .02 845000 CEO .04 680000 CEO .06 450000 CIO .01 1145000 CIO .03 550000 CIO .05 350000 CEO .02 845000 CEO .04 680000 CEO .06 450000 CIO .01 1145000 CIO .03 550000 CIO .05 350000 23 rows selected. CF. sql sql plan . test data

plan ..

Page 252: Oracle History #6

[email protected] - 252 -

Oracle9i New Features http://www.ggola.com

:

Rows Execution Plan ------- --------------------------------------------------- 0 SELECT STATEMENT GOAL: CHOOSE 23 UNION-ALL 11 SORT (GROUP BY) 14 NESTED LOOPS 14 TABLE ACCESS (FULL) OF 'EMP' 14 TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' 14 INDEX (UNIQUE SCAN) OF 'PK_DEPT_ID' (UNIQUE) 6 SORT (GROUP BY) 14 NESTED LOOPS 14 TABLE ACCESS (FULL) OF 'EMP' 14 INDEX (UNIQUE SCAN) OF 'PK_DEPT_ID' (UNIQUE) 6 SORT (GROUP BY) 14 NESTED LOOPS 14 TABLE ACCESS (FULL) OF 'EMP' 14 INDEX (UNIQUE SCAN) OF 'PK_DEPT_ID' (UNIQUE) call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.01 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 3 0.00 0.00 0 83 0 23 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 5 0.01 0.00 0 83 0 23

: Rows Row Source Operation ------- --------------------------------------------------- 23 23 VIEW 23 VIEW 23 UNION-ALL 11 TABLE ACCESS FULL SYS_TEMP_4254950921 6 TABLE ACCESS FULL SYS_TEMP_4254950920 6 TABLE ACCESS FULL SYS_TEMP_4254950920 call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.01 0.01 0 0 2 0 Execute 1 0.00 0.00 0 0 4 0 Fetch 3 0.00 0.00 2 15 2 23 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 5 0.01 0.01 2 15 8 23

plan read blocks . sys_temp_?? table internal sql

space internal read blocks . trace internal sql plan

. ( internal block 37 blocks read )

dw data test .

Page 253: Oracle History #6

[email protected] - 253 -

Oracle9i New Features http://www.ggola.com

- composite sets : in 8i group by rollup columns rollup . , column rollup

.

EX. , , commission , commission ? in 8i

, commission .

SQL> select recommender, dept_name, commission, sum(salary) 2 from emp natural join dept 3 group by rollup(recommender, dept_name, commission); RECOMMENDE DEPT_NAME COMMISSION SUM(SALARY) ---------- ---------- ---------- ----------- CEO SALES .02 200000 CEO SALES .04 680000 CEO SALES .06 450000 CEO SALES 1330000 CEO SYSTEM .02 145000 CEO SYSTEM 145000 CEO DATABASE .02 500000 CEO DATABASE 500000 CEO 1975000 CIO ERP .01 645000 CIO ERP 645000 CIO SALES .01 100000 CIO SALES .03 550000 CIO SALES .05 350000 CIO SALES 1000000 CIO SYSTEM .01 150000 CIO SYSTEM 150000 CIO DATABASE .01 250000 CIO DATABASE 250000 CIO 2045000 4020000 21 rows selected.

from 9i total composite columns . , commission .

SQL> select recommender, dept_name, commission, sum(salary) 2 from emp natural join dept 3 group by rollup(recommender, (dept_name, commission)); RECOMMENDE DEPT_NAME COMMISSION SUM(SALARY) ---------- ---------- ---------- ----------- CEO SALES .02 200000 CEO SALES .04 680000 CEO SALES .06 450000 CEO SYSTEM .02 145000 CEO DATABASE .02 500000 CEO 1975000 CIO ERP .01 645000 CIO SALES .01 100000 CIO SALES .03 550000 CIO SALES .05 350000 CIO SYSTEM .01 150000 CIO DATABASE .01 250000 CIO 2045000 4020000 14 rows selected.

Page 254: Oracle History #6

[email protected] - 254 -

Oracle9i New Features http://www.ggola.com

- concatenated sets : in 8i group by cube cube columns subtotal, total, grand total

. columns subtotal . from

9i cube + rollup .

EX. cube columns total columns total

.

SQL> select recommender, dept_name, commission, sum(salary) 2 from emp natural join dept 3 group by cube (recommender, dept_name, commission) 4 order by 1, 2, 3; RECOMMENDE DEPT_NAME COMMISSION SUM(SALARY) ---------- ---------- ---------- ----------- CEO DATABASE .02 500000 CEO DATABASE 500000 CEO SALES .02 200000 CEO SALES .04 680000 CEO SALES .06 450000 CEO SALES 1330000 CEO SYSTEM .02 145000 CEO SYSTEM 145000 CEO .02 845000 CEO .04 680000 CEO .06 450000 CEO 1975000 CIO DATABASE .01 250000 CIO DATABASE 250000 CIO ERP .01 645000 CIO ERP 645000 CIO SALES .01 100000 CIO SALES .03 550000 CIO SALES .05 350000 CIO SALES 1000000 CIO SYSTEM .01 150000 CIO SYSTEM 150000 CIO .01 1145000 CIO .03 550000 CIO .05 350000 CIO 2045000 DATABASE .01 250000 DATABASE .02 500000 DATABASE 750000 ERP .01 645000 ERP 645000 SALES .01 100000 SALES .02 200000 SALES .03 550000 SALES .04 680000 SALES .05 350000 SALES .06 450000 SALES 2330000 SYSTEM .01 150000 SYSTEM .02 145000 SYSTEM 295000 .01 1145000 .02 845000 .03 550000 .04 680000 .05 350000 .06 450000 4020000 48 rows selected.

, cube rollup sub total grand total .

Page 255: Oracle History #6

[email protected] - 255 -

Oracle9i New Features http://www.ggola.com

- with clause as in-line views or temporary tables

1. query blocks read query block

. ? query with

query block . ( memory table )

2. performance readiblity . . readbility

performance .

3. sql with read blocks

. , with

SQL> select recommender, dept_name, commission, sum(salary) 2 from emp natural join dept 3 group by recommender, 4 cube (dept_name), 5 rollup (commission) 6 order by 1, 2, 3; RECOMMENDE DEPT_NAME COMMISSION SUM(SALARY) ---------- ---------- ---------- ----------- CEO DATABASE .02 500000 CEO DATABASE 500000 CEO SALES .02 200000 CEO SALES .04 680000 CEO SALES .06 450000 CEO SALES 1330000 CEO SYSTEM .02 145000 CEO SYSTEM 145000 CEO .02 845000 CEO .04 680000 CEO .06 450000 CEO 1975000 CIO DATABASE .01 250000 CIO DATABASE 250000 CIO ERP .01 645000 CIO ERP 645000 CIO SALES .01 100000 CIO SALES .03 550000 CIO SALES .05 350000 CIO SALES 1000000 CIO SYSTEM .01 150000 CIO SYSTEM 150000 CIO .01 1145000 CIO .03 550000 CIO .05 350000 CIO 2045000 26 rows selected.

Page 256: Oracle History #6

[email protected] - 256 -

Oracle9i New Features http://www.ggola.com

.

EX. 20% .

constraint enhancements

to 8i primary or unique key constraints drop index drop . from 9i index drop option . create table key index full sentence

.

explicit index control

- create table with create index

SQL> select dept_name, sum(salary) 2 from emp natural join dept 3 group by dept_name 4 having sum(salary) > 5 (select sum(salary) * 0.2 from emp); DEPT_NAME SUM(SALARY) ---------- ----------- SALES 2330000

with . SQL> with sal_total as ( 2 select dept_name dname, sum(salary) esal 3 from emp natural join dept 4 group by dept_name) 5 select dname, esal from sal_total 6 where esal > 7 (select sum(salary) * 0.2 from emp); DNAME ESAL ---------- ---------- SALES 2330000

SQL> create table new_emp ( 2 emp_id varchar2(10) constraint pk_new_emp primary key using index 3 (create index pk_new_emp on new_emp (emp_id) tablespace tools), 4 emp_name varchar2(10), dept_id varchar2(10), 5 salary number);

create index clause .

Page 257: Oracle History #6

[email protected] - 257 -

Oracle9i New Features http://www.ggola.com

SQL> select constraint_name, constraint_type 2 from user_constraints 3 where table_name = 'NEW_EMP' 4 union all 5 select index_name, uniqueness 6 from user_indexes 7 where table_name = 'NEW_EMP'; CONSTRAINT_NAME CONSTRAIN ------------------------------ --------- PK_NEW_EMP P PK_NEW_EMP NONUNIQUE

primary key constraint index . index nonunique .

SQL> insert into new_emp (emp_id) values ('A010200310'); 1 row created. SQL> / insert into new_emp (emp_id) values ('A010200310') * ERROR at line 1: ORA-00001: unique constraint (SCOTT.PK_NEW_EMP) violated SQL> rollback;

. plan . .

SQL> explain plan set statement_id = 'test' for 2 select /*+ rule */ * from new_emp 3 where emp_id = 'A101200311'; Explained. SQL> @plan OPERATION -------------------------------------- SELECT STATEMENT TABLE ACCESS BY INDEX ROWID NEW_EMP INDEX RANGE SCAN PK_NEW_EMP

primary key index scan nonunique range scan . .

Page 258: Oracle History #6

[email protected] - 258 -

Oracle9i New Features http://www.ggola.com

- constraint drop, disable index drop, keep drop

.

EX. alter table table_name [drop|disable] constraint constraint_name

SQL> alter table new_emp drop constraint 2 pk_new_emp keep index;

index constraint . SQL> select constraint_name, constraint_type 2 from user_constraints 3 where table_name = 'NEW_EMP' 4 union all 5 select index_name, uniqueness 6 from user_indexes 7 where table_name = 'NEW_EMP'; CONSTRAINT_NAME CONSTRAIN ------------------------------ --------- PK_NEW_EMP NONUNIQUE SQL> insert into new_emp (emp_id) values ('A010200310'); 1 row created. SQL> / 1 row created. SQL> rollback;

unique error . . SQL> drop index pk_new_emp; SQL> alter table new_emp add constraint pk_new_emp 2 primary key (emp_id); SQL> select constraint_name, constraint_type, status 2 from user_constraints 3 where table_name = 'NEW_EMP' 4 union all 5 select index_name, uniqueness, '' 6 from user_indexes 7 where table_name = 'NEW_EMP'; CONSTRAINT_NAME CONSTRAIN STATUS ------------------------------ --------- -------- PK_NEW_EMP P ENABLED PK_NEW_EMP UNIQUE

primary key index . index unique . create index table . table

create index unique .

Page 259: Oracle History #6

[email protected] - 259 -

Oracle9i New Features http://www.ggola.com

foreign key and primary key scan

- foreign key locking mechanism

1. to 8i foreign key index .

index table level lock .

2. from 9i index foreign key table level share lock release

table level lock .

SQL> alter table new_emp add constraint pk_new_emp 2 primary key (emp_id); SQL> alter table new_emp drop constraint 2 pk_new_emp keep index;

constraint index . SQL> select constraint_name, constraint_type, status 2 from user_constraints 3 where table_name = 'NEW_EMP' 4 union all 5 select index_name, uniqueness, '' 6 from user_indexes 7 where table_name = 'NEW_EMP'; CONSTRAINT_NAME CONSTRAIN STATUS ------------------------------ --------- ------ PK_NEW_EMP UNIQUE SQL> insert into new_emp (emp_id) values ('A101200310'); 1 row created. SQL> / insert into new_emp (emp_id) values ('A101200310') * ERROR at line 1: ORA-00001: unique constraint (SCOTT.PK_NEW_EMP) violated SQL> rollback;

test index unique constraint error check .

SQL> select * from dept; DEPT_ID DEPT_NAME REMARK ---------- ---------- ---------- A001 SALES E01 B001 SYSTEM W01 C001 DATABASE S01 D001 ERP E01

Page 260: Oracle History #6

[email protected] - 260 -

Oracle9i New Features http://www.ggola.com

- session#1, session#2 test .

- cached primary key : from 9i prmiary key values 256 cache .

- foreign key insertion parent table key . from 9i primary key first 256 values

cache primary key loopup time . (only done for multirow dml

statements)

SQL> select index_name from user_ind_columns 2 where table_name = 'EMP' and column_name = 'DEPT_ID'; no rows selected SQL> insert into dept values ('TEST', '', ''); SQL> commit; SQL> delete from dept where dept_id = 'TEST'; 1 row deleted.

session #1 dept_id . emp table fk column index . SQL> insert into emp values ('T', 'T', 'A001', 0, sysdate, 0.3, ''); 1 row created. SQL> rollback;

session 2 dept_id 'A001' data insert . to 8i emp dept_id index insert waiting . dept_id ='TEST' index emp lock .

from 9i lock waiting . SQL> update emp set dept_id = 'TEST' where rownum = 1; ....waiting

session 2 dept_id 'TEST' data update waiting . . 'TEST' . session 1 commit . session 2 error return .

index fk column child table lock .

lock obtaining and releasing mechanism . from 9i .

1. savepoint 2. share lock 3. rollback to savepoint

Page 261: Oracle History #6

[email protected] - 261 -

Oracle9i New Features http://www.ggola.com

constraints and views

to 8i views cube .

from 9i base table constraints view cube . view

materialized view query rewrite .

supported constraints and state

1. primary key constraints

2. unique constraints

3. referential constraints

4. disable novalidate only

5. rely or norely

- . . constraints on

views .

1. materialized view base table constraints .

2. constraints validate .

3. novalidate rely query rewrite .

- , view materialzed view query rewrite vaild constraint view .

- view constraint from 9i view constraint

constraint check disable novalidate . , view constraint declarative .

- query rewrite constraint validate novalidate query rewrite rely . norely

query rewrite .

Page 262: Oracle History #6

[email protected] - 262 -

Oracle9i New Features http://www.ggola.com

example

SQL> create view emp_a001 (id, name, hiredt, 2 constraint pk_emp_a001 primary key(id) 3 rely disable novalidate) as 4 select emp_id, emp_name, hire_date 5 from emp 6 where dept_id = 'A001'; View created. SQL> select * from emp_a001; ID NAME HIREDT ---------- ---------- --------- A101200010 JOHN 01-OCT-00 A102200102 ELLISON 01-FEB-01 A103200310 LIM 22-OCT-03 A104200310 KIM 22-OCT-03 A105200310 WILLSON 22-OCT-03 A106200310 JENNY 22-OCT-03 A103200311 JERRY 22-OCT-03 A104200311 PERL 22-OCT-03 8 rows selected.

view . no rows constraint declarative segment .

SQL> select segment_name, bytes from user_segments 2 where segment_name = 'PK_EMP_A001'; no rows selected SQL> alter view emp_a001 add constraint uk_emp_a001 2 unique(name) rely disable novalidate; View altered. SQL> alter view emp_a001 modify constraint 2 pk_emp_a001 norely; View altered.

constraint . SQL> select owner, constraint_name, constraint_type, 2 index_name, rely, view_related 3 from user_constraints 4 where table_name = 'EMP_A001'; OWNER CONSTRAINT_NAM C INDEX_NAME RELY VIEW_RELATED ---------- -------------- - ---------- ---- -------------- SCOTT PK_EMP_A001 P DEPEND ON VIEW SCOTT UK_EMP_A001 U RELY DEPEND ON VIEW

view pk, uk index_name . SQL> alter view emp_a001 drop constraint pk_emp_a001; View altered. SQL> drop view emp_a001 cascade constraints; View dropped.

view foreign key error return . , from 9i option drop .

Page 263: Oracle History #6

[email protected] - 263 -

Oracle9i New Features http://www.ggola.com

other enhancements

index only scan for function based index

- b*tree index null value . (null ) function based

index null index .

- in 8i null index scan

.

- from 9i function based not null index scan .

example

- not null index scan .

SQL> conn system/manager SQL> grant query rewrite to scott;

function based . SQL> conn scott/tiger SQL> analyze table emp compute statistics; SQL> alter session set query_rewrite_enabled = TRUE ; SQL> alter session set query_rewrite_integrity = TRUSTED ;

cbo optimizer function based prameter setting . SQL> create index emp_sal_com_ik on emp ( salary * (1 + commission)); SQL> explain plan set statement_id = 'test' 2 for select salary * (1 + commission) from emp 3 where salary * (1 + commission) > 0 ; Explained. SQL> @plan OPERATIONCOST CPUIO TMP --------------------------------------- ---- -------- ---- ----- SELECT STATEMENT 210772 1 INDEX RANGE SCAN EMP_SAL_COM_IK 210772 1

function based index range scan .

Page 264: Oracle History #6

[email protected] - 264 -

Oracle9i New Features http://www.ggola.com

select for update

- to 8i select for update wait and nowait option . ,

. from 9i wait wait option .

EX. session #1, session #2 test . session #1 JOHN

transaction .

SQL> explain plan set statement_id = 'test' for 2 select salary * (1 + commission) from emp; Explained. SQL> @plan OPERATIONCOST CPUIO TMP --------------------------------------- ---- -------- ---- ----- SELECT STATEMENT 6 430787 5 TABLE ACCESS FULL EMP 6 430787 5

index . function based null . SQL> alter table emp modify ( salary not null, commission not null ); SQL> explain plan set statement_id = 'test' for 2 select salary * (1 + commission) from emp; Explained. SQL> @plan OPERATIONCOST CPUIO TMP --------------------------------------- ---- -------- ---- ----- SELECT STATEMENT 2 10772 1 INDEX FULL SCAN EMP_SAL_COM_IK 2 10772 1

index . function based index column not null null value . in 8i index

9i .

SQL> select emp_id, emp_name from emp 2 where emp_id = 'A101200010'; EMP_ID EMP_NAME ---------- ---------- A101200010 JOHN SQL> update emp set salary = 200000 where emp_name = 'JOHN' ; 1 row updated.

session #2 select for update JOHN data lock wait time 5 5 resource busy message . to 8i time

session #1 transaction waiting .

Page 265: Oracle History #6

[email protected] - 265 -

Oracle9i New Features http://www.ggola.com

multitable insert

- table read table insert . to 8i insert table

source table read .

- , table read .

- from 9i multitable insert read table insert new feature

.

1. insert all ( when condition1 ) into t1 [ values(list) ] ( when condition2 ) into t2 [ values(list) ] ..... else into tn [ values(list) ] select .. all rows

tables insert .

2. insert first when condition1 into t1 [ values(list) ] when condition2 into t2 [ values(list) ] ..... else into tn [ values(list) ] select .. first matching into insert .

CF. unconditional form : sub query return rows

conditional form : sub query return rows when entries .

EX. multitable insert .

SQL> select salary, commission from emp 2 where emp_id = 'A101200010' 3 for update wait 5; select salary, commission from emp * ERROR at line 1: ORA-30006: resource busy; acquire with WAIT timeout expired Elapsed: 00:00:05.11

session #1 rollback data . SQL> rollback;

Page 266: Oracle History #6

[email protected] - 266 -

Oracle9i New Features http://www.ggola.com

SQL> create table emp_copy ( 2 emp_name varchar2(10), 3 sal_total number(9,2)); SQL> create table emp_copy_2 as 2 select * from emp_copy; SQL> create table emp_upper as 2 select * from emp_copy; SQL> create table emp_lower as 2 select * from emp_copy; SQL> create table emp_first as 2 select * from emp_copy;

test 4 table . . SQL> insert all 2 into emp_copy (emp_name, sal_total) values (emp_name, salary) 3 into emp_copy_2 (emp_name, sal_total) values (emp_name, sal_total) 4 select emp_name, salary, salary * (1 + commission) sal_total 5 from emp; 28 rows created. SQL> select * from emp_copy; EMP_NAME SAL_TOTAL ---------- ---------- JOHN 100000 ELLISON 200000 LEE 150000 JANG 145000 KATE 250000 CHOI 250000 HONG 645000 GRACE 250000 LIM 300000 KIM 400000 WILLSON 350000 JENNY 450000 JERRY 250000 PERL 280000 14 rows selected. SQL> select * from emp_copy_2; EMP_NAME SAL_TOTAL ---------- ---------- JOHN 101000 ELLISON 204000 LEE 151500 JANG 147900 KATE 252500 CHOI 255000 HONG 651450 GRACE 255000 LIM 309000 KIM 416000 WILLSON 367500 JENNY 477000 JERRY 257500 PERL 291200 14 rows selected.

insert all unconditional form insert . emp table 14 rows table insert . , select column table .

Page 267: Oracle History #6

[email protected] - 267 -

Oracle9i New Features http://www.ggola.com

SQL> insert all 2 when sal_total > 300000 then into emp_upper 3 else into emp_lower 4 select emp_name, salary * (1 + commission) sal_total 5 from emp; 14 rows created. SQL> select * from emp_upper; EMP_NAME SAL_TOTAL ---------- ---------- HONG 651450 LIM 309000 KIM 416000 WILLSON 367500 JENNY 477000 SQL> select * from emp_lower; EMP_NAME SAL_TOTAL ---------- ---------- JOHN 101000 ELLISON 204000 LEE 151500 JANG 147900 KATE 252500 CHOI 255000 GRACE 255000 JERRY 257500 PERL 291200 9 rows selected. SQL> rollback;

14 conditional form insert . , when insert . test rollback .

SQL> insert all 2 when sal_total < 300000 then into emp_lower 3 when sal_total < 500000 then into emp_upper 4 else into emp_copy 5 select emp_name, salary * (1 + commission) sal_total 6 from emp; 23 rows created. SQL> select 'L', emp_name, sal_total from emp_lower 2 union all 3 select 'U', emp_name, sal_total from emp_upper 4 union all 5 select 'C', emp_name, sal_total from emp_copy;

Page 268: Oracle History #6

[email protected] - 268 -

Oracle9i New Features http://www.ggola.com

'L' EMP_NAME SAL_TOTAL -------------------------------- ---------- ---------- L JOHN 101000 L ELLISON 204000 L LEE 151500 L JANG 147900 L KATE 252500 L CHOI 255000 L GRACE 255000 L JERRY 257500 L PERL 291200 U JOHN 101000 U ELLISON 204000 U LEE 151500 U JANG 147900 U KATE 252500 U CHOI 255000 U GRACE 255000 U LIM 309000 U KIM 416000 U WILLSON 367500 U JENNY 477000 U JERRY 257500 U PERL 291200 C HONG 651450 23 rows selected. SQL> rollback;

insert all conditional form . , rows when emp_lower emp_upper sal_total 300000

insert . SQL> insert first 2 when sal_total < 300000 then into emp_lower 3 when sal_total < 500000 then into emp_upper 4 else into emp_copy 5 select emp_name, salary * (1 + commission) sal_total 6 from emp; 14 rows created. SQL> select 'L', emp_name, sal_total from emp_lower 2 union all 3 select 'U', emp_name, sal_total from emp_upper 4 union all 5 select 'C', emp_name, sal_total from emp_copy; 'L' EMP_NAME SAL_TOTAL -------------------------------- ---------- ---------- L JOHN 101000 L ELLISON 204000 L LEE 151500 L JANG 147900 L KATE 252500 L CHOI 255000 L GRACE 255000 L JERRY 257500 L PERL 291200 U LIM 309000 U KIM 416000 U WILLSON 367500 U JENNY 477000 C HONG 651450 14 rows selected. SQL> rollback;

insert first 14 rows insert . , insert first when 1 . into table insert .

Page 269: Oracle History #6

[email protected] - 269 -

Oracle9i New Features http://www.ggola.com

migration to lob

1. to 8i long datat type lob data type function to_lob . , table long data type table create table as select

to_lob() function . from 9i alter table command modify

. EX. alter table table_name modify column clob (from long) alter table table_name modify column blob (from long raw)

2. conversion sql function operation datatype "varchar2, raw" "clob, blob" . EX. argument varchar2, raw procedure a (varchar2, raw) call a (clob, blob) .

3. to 8i iot partition (over 8.1.6) lob type . from 9i lob type

iot partition . (function based index lob type )

4. oracle functions long clob, long raw blob argument .

5. lob type column implicit conversion varchar2 raw varchar2 or raw

define and bind .

SQL> create table emp_mig ( 2 empno number, emp_name long); Table created. SQL> insert into emp_mig values (3425, 'john 2 from old company and..'); 1 row created. SQL> alter table emp_mig modify emp_name clob; Table altered.

long clob . ( , long varchar2 ) SQL> desc emp_mig NameNull? Type -------------- ----- -------- EMPNO NUMBER EMP_NAME CLOB SQL> alter table emp_mig modify emp_name long; alter table emp_mig modify emp_name long * ERROR at line 1: ORA-22859: invalid modification of columns

clob long, varchar2 .

Page 270: Oracle History #6

[email protected] - 270 -

Oracle9i New Features http://www.ggola.com

restriction on long migration

1. clustered table .

2. replication materialized view base table manually migration .

3. update trigger column list lob columns .

4. view instead of trigger lob insert, update fail .

5. lob migration alter table move action all indexes invalid . , rebuild

. ( domain index lob migration drop )

sql parser

1. common sql parser : new sql features pl/sql block pl/sql static sql statements analysis rdbms sql component analysis . . , pl/sql sql static rdbms sql component sql pl/sql sql analysis

.

2. oracle pl/sql source code wrap encoding . to 8i encoded sql

column, literal, . from 9i common sql parse pl/sql encoded sql

.

EX. . 8i 9i sql

. .

[NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/work> vi wrap_9i.sql create or replace procedure emp_wrap is ename varchar2(10); begin select emp_name into ename from emp where rownum = 1; dbms_output.put_line('name : ' || ename); end; ~ ~ :wq "wrap_9i.sql"

Page 271: Oracle History #6

[email protected] - 271 -

Oracle9i New Features http://www.ggola.com

[NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/work> wrap iname=wrap_9i.sql pl/sql Wrapper: Release 9.2.0.1.0- Production on Mon Oct 27 13:58:21 2003 Copyright (c) Oracle Corporation 1993, 2001. All Rights Reserved. Processing wrap_9i.sql to wrap_9i.plb

wrap_9i.plb . [NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/work> vi wrap_9i.plb create or replace procedure emp_wrap wrapped 0 abcd abcd abcd abcd .. .. d 2 :e: 1EMP_WRAP: 1ENAME: 1VARCHAR2: 110: 1EMP_NAME: 1EMP: 1ROWNUM: 1=: 11: 1DBMS_OUTPUT: 1PUT_LINE: 1name :: : 1||: 0 .. .. ~ ~ :q

9i full sql statement . [NEWSVC]LIRACLE:/app/oracle/admin/NEWSVC/work> sqlplus scott/tiger SQL> @wrap_9i.plb Procedure created. SQL> set serveroutput on SQL> exec emp_wrap; name : JOHN pl/sql procedure successfully completed.

wrapped file procedure .

Page 272: Oracle History #6

[email protected] - 272 -

Oracle9i New Features http://www.ggola.com

3. common sql parser from 9i pls error message . ora error message

.

native pl/sql execution

- to 8i pl/sql program code byte code . from 9i native c code .

1. pl/sql program c code translation native code compile .

2. byte code interpret overhead .

3. pga mcode c stack

4. pl/sql program mcode load sga pga mapping constant pool data

pga mapping .

- . pl/sql compiled parsing byte code from 9i c code

. , pl/sql compiled parsing byte code

.

- 2 10 . ( . , sql )

Page 273: Oracle History #6

[email protected] - 273 -

Oracle9i New Features http://www.ggola.com

18. Globalization Support

. national language support from 9i .

new date data types

from 9i date and time 5 new data types .

time datatype

1. timestamp(n) data type : n . ( 10 -9 )

2. timestamp : year, month, day, hour, minute, second + fractional seconds (default degree of precision for fractional seconds is 6 digits.)

3. timestamp with time zone : timestamp + timezone_hour, timezone_minute

4. timestamp with local time zone : database time zone select session time zone .

time function

1. to_timestamp(char date, 'date format') : (n,v)char timestamp

2. to_timestamp_tz(char date + time, 'time zone format') : (n,v)char timestamp with time zone

3. from_tz(timestamp, time zone value) : timestamp timestamp with time zone

interval data type

1. interval data type : date interval .

2. interval year to month : interval .

3. interval day to second : interval .

Page 274: Oracle History #6

[email protected] - 274 -

Oracle9i New Features http://www.ggola.com

interval function

1. to_yminterval('year-month) : (n,v)char interval year to month

2. to_dsinterval('day time') : (n,v)char interval day to second

timezone and timestampe

timezone .

, gmt timezone gmt

time zone .

timestamp range and example

type range ----------------------- --------------------------------------- YEAR -4712..9999 (excluding year 0) MONTH 01..12 DAY 01..31 HOUR 00..23 MINUTE 00..59 SECOND 00..59.9(n) TIMEZONE_HOUR -12..13 TIMEZONE_MINUTE 00..59

data type example ------------------------------------------------ ------------------------------------- DATEDATE '1997-01-31' TIMESTAMP(2) TIMESTAMP '1997-01-31 09:26:50.10' TIMESTAMP(0) WITH TIME ZONE TIMESTAMP '1997-01-31 09:26:50+02:00'

interval datatypes

interval data type datetime .

year-month interval interval year to month day-time interval interval day to second .

Page 275: Oracle History #6

[email protected] - 275 -

Oracle9i New Features http://www.ggola.com

interval range and example

type range ----------------------- ------------------------------- YEAR Unconstrained MONTH 0..11 DAY Unconstrained HOUR 0..23 MINUTE 0..59 SECOND 0..59.9(n)

data type example ----------------------------------------------- ----------------------------- INTERVAL YEAR TO MONTH INTERVAL '01-02' YEAR TO MONTH INTERVAL DAY(3) TO SECOND(2) INTERVAL '100 10:20:42.22' DAY(3) TO SECOND(2)

current timestamp and timezone

timestamp nls format

EX. nls_timestamp_format : default 'DD-MON-RR HH.MI.SSXFF AM'

EX. nls_timestamp_tz_format : default 'DD-MON-RR HH.MI.SSXFF AM TZR' [TZR|TZH|TZM|TZD] , , , summer time

basic example

SQL> select current_date crd, sysdate sysd, 2 current_timestamp(7) crtstz, 3 localtimestamp lcts, systimestamp sytstz 4 from dual; CRD SYSD CRTSTZ LCTS SYTSTZ -------------------------------------------------------------------------------------------------------------- 28-OCT-03 28-OCT-03 28-OCT-03 09.59.51.8560180 AM -05:00 28-OCT-03 09.59.51.856018 AM 28-OCT-03 09.59.51.856008 AM -05:00

current_date : session sysdate date type current_timestamp : current_date session timestamp with time zone value local timestamp : session timezone timestamp value (timezone current_timestamp ) systimestamp : system date database time zone timestamp with time zone value

timestamp value default fractional seconds . fractional seconds 6 .

Page 276: Oracle History #6

[email protected] - 276 -

Oracle9i New Features http://www.ggola.com

SQL> select dbtimezone from dual; DBTIME ------ -04:00

server time zone . SQL> select sessiontimezone from dual; SESSIONTIMEZONE --------------- -05:00

current session time zone .

table tz_test timestamp time zone . SQL> create table tz_test ( 2 cr_date date, 3 cr_ts timestamp(7), 4 cr_tstz timestamp(7) with time zone, 5 cr_tsltz timestamp(7) with local time zone, 6 itv_ym interval year(2) to month, 7 itv_ds interval day(7) to second(7)); Table created. SQL> desc tz_test Name Null? Type ----------------------------------------- -------- ---------------------------- CR_DATE DATE CR_TS TIMESTAMP(7) CR_TSTZ TIMESTAMP(7) WITH TIME ZONE CR_TSLTZ TIMESTAMP(7) WITH LOCAL TIME ZONE ITV_YM INTERVAL YEAR(2) TO MONTH ITV_DS INTERVAL DAY(7) TO SECOND(7) SQL> insert into tz_test values ( 2 date '2002-06-25', 3 timestamp '2002-06-25 18:30:01.1234567', 4 timestamp '2002-06-25 18:30:01.1234567-10:00', 5 timestamp '2002-06-25 18:30:01.1234567-10:00', 6 interval '10-11' year to month, 7 interval '170 23:59:59.1234567' day(7) to second(7)); 1 row created. SQL> commit; Commit complete. SQL> select cr_tstz, sys_extract_utc(cr_tstz) from tz_test; CR_TSTZ --------------------------------------------------------------------------- SYS_EXTRACT_UTC(CR_TSTZ) --------------------------------------------------------------------------- 25-JUN-02 06.30.01.1234567 PM -10:00 26-JUN-02 04.30.01.1234567 AM

time zone date sys_extract_utc function UTC(formely Greenwich Mean Time) .

Page 277: Oracle History #6

[email protected] - 277 -

Oracle9i New Features http://www.ggola.com

datetime calculation

example

- test time([stamp]with[local] time zone) type interval datetype interval datetype time([stamp]with[local] time zone) type . ( )

- interval datetype . ( )

SQL> select extract(hour from cr_tstz), 2 extract(minute from cr_tstz) 3 from tz_test; EXTRACT(HOURFROMCR_TSTZ) EXTRACT(MINUTEFROMCR_TSTZ) ----------------------------------------------- ------------------------------------------------ 4 30

. SQL> select to_char(cr_tstz, 'TZH') TZH, 2 to_char(cr_tstz, 'TZM') TZM 3 from tz_test; TZH TZM ---------- ---------- -10 00

tz_test cr_tstz column time zone .

case date

SQL> select cr_date, cr_date + 1, cr_date + interval '1' day 2 from tz_test; CR_DATE CR_DATE+1 CR_DATE+I --------- --------- --------- 25-JUN-02 26-JUN-02 26-JUN-02

date date type .

case timestamp SQL> select cr_ts, cr_ts + 1, cr_ts + interval '1' day 2 from tz_test; CR_TS CR_TS+1 CR_TS+INTERVAL'1'DAY ----------------------------------------------------------------------------------------- 25-JUN-02 06.30.01.1234567 PM 26-JUN-02 26-JUN-02 06.30.01.123456700 PM

timestamp interval key word timestamp . + 1 date type .

Page 278: Oracle History #6

[email protected] - 278 -

Oracle9i New Features http://www.ggola.com

time zone information

case timestamp with time zone

SQL> select cr_tstz, cr_tstz + 1, cr_tstz + interval '1' day 2 from tz_test; CR_TSTZ CR_TSTZ+1 CR_TSTZ+INTERVAL'1'DAY ------------------------------------------------------------------------------------- 25-JUN-02 06.30.01.1234567 PM -10:00 26-JUN-02 26-JUN-02 06.30.01.123456700 PM -10:00

timestamp with time zone interval key word timestamp with time zone . + 1 date type . timestamp with local time zone

SQL> select cr_tsltz, cr_tsltz + 1, cr_tsltz + interval '1' day 2 from tz_test; CR_TSLTZ CR_TSLTZ+ CR_TSLTZ+INTERVAL'1'DAY --------------------------------------------------------------------------- 25-JUN-02 11.30.01.1234567 PM 26-JUN-02 26-JUN-02 11.30.01.123456700 PM -05:00

timestamp with local time zone interval key word timestamp with local time zone . + 1 date type . (session time zone , local time zone

with v$timezone_names

SQL> desc v$timezone_names Name Null? Type ----------------------------------------- -------- ---------------------------- TZNAME VARCHAR2(64) TZABBREV VARCHAR2(64) SQL> select * from v$timezone_names where rownum < 16; TZNAME TZABBREV -------------------- -------------------- Africa/Cairo LMT Africa/Cairo EET Africa/Cairo EEST Africa/Tripoli LMT Africa/Tripoli CET Africa/Tripoli CEST Africa/Tripoli EET America/Adak LMT America/Adak NST America/Adak NWT America/Adak BST America/Adak BDT America/Adak HAST America/Adak HADT America/Anchorage LMT 15 rows selected.

Page 279: Oracle History #6

[email protected] - 279 -

Oracle9i New Features http://www.ggola.com

unicode

single character language universal character encoding schema.

oracle version7 unicode from 9i uncode 3.0 . (www.unicode.com)

unicode characters encode binary . unicode

platform, program, language character unique code .

unicode character set

1. new unicode : AL16UTF16, AL32UTF8

2. unicode : UTF8, UTFE

3. desupported unicode : AL24UTFFSS

CF. UTF-16 encoding : enables easier loading for multinational data, uses a fixed-width multibyte encoding sequence (AL16UTF16 2-byte, fixed-width unicode character set.

UTF16 or UCS2 )

character set scanner(csscan)

- $ORACLE_HOME/bin/csscan

- from 9i character set migration check csscan utility

.

- utility $ORACLE_HOME/rdbms/admin/csminst.sql

system user schema objects .

CF. utility tablespace install scripts csminst.sql schema default tablespace

scripts .

- unicode . language , .

Page 280: Oracle History #6

[email protected] - 280 -

Oracle9i New Features http://www.ggola.com

- character set . .

- sql*loader .

CF. oracle language, territory, character set locale files handling locale

locale builder gui tool .

locale builder : $ORACLE_HOME/ocommon/nls/lbuilder/lbuilder

locale files : $ORACLE_HOME/ocommon/nls/admin/data/*.nlb, *nlt

byte and character semantics

- column defining or sql function value byte or character .

- char(10) default character 10 10bytes nls parameter “nls_length_semantics”

(default “byte”) “char” character 10

- column defining “create table semantic_test (bchar char(10 byte), cchar char(10 char))” .

sql*loader for unicode

- sql*loader upload data UTF-16 character set language .

EX. load data characterset utf16 byteorder little endian infile unitest.dat into table unitest_tmp(empno integer external(4), ename char(10),emgrname varchar2(10))

table .

EX. create table unitest_tmp (empno number(5), ename nvarchar2(20), emgrname nvarchar2(20));

Page 281: Oracle History #6

[email protected] - 281 -

Oracle9i New Features http://www.ggola.com

19. Workspace Management

what is a database workspace?

concept : virtual environment

1. workspace transaction consistent snapshot . tables

versioning version enable table .

2. workspace user version enable table dml new version row .

3. workspace new version rows explicitly paraent workspace merge workspace users

workspace new version rows .

4. version enable table table workspace .

CF. workspace version enable table , version enable table workspace

no additional capabilities to the database. , 9i workspace new feature .

workspace managing : automatically installed with oracle9i

1. package procedure database tables version enable .

2. all dml, dcl support version enable table in a workspace. ddl . ddl table

disable versioning versioned rows .

3. version enable table versioned rows , workspace data

same table the growth of the table depends on how many versions of each row are created.

4. row different versios parent workspace merge discard conflict

oracle merge resolve .

Page 282: Oracle History #6

[email protected] - 282 -

Oracle9i New Features http://www.ggola.com

privilege

1. oracle install workspace manager install wm_admin_role workspace manager privileges role . default dba role

role workspace user role . wm_admin_role all workspace manager

privileges with grant option .

2. workspace privileges : access, create, remove, merge, rollback

3. wm_admin_role grant workspace privilege package . workspace privilege oracle standard privilege type privilege sets .

privilege_workspace : object level privilege privilege_any_workspace : system level privilege

EX. access, create, remove, merge, rollback_[any]_workspace privilege

4. package grant . EX. dbms_wm.grantworkspacepriv( priv_types in varchar2, workspace in varchar2, grantee in varchar2, grant_option in varchar2 default 'NO', auto_commit in boolean default TRUE); EX. dbms_wm.grantsystempriv( priv_types in varchar2, grantee in varchar2, grant_option in varchar2 default 'NO', auto_commit in boolean default TRUE);

workspace operation

version enable|disable table

EX. dbms_wm.enableversioning('table_name'[, 'NONE|VIEW_W_OVERWRITE|VIEW_WO_OVERWRITE');

EX. dbms_wm.disableversioning('table_name');

1. version enable table table table_name_lt (suffix “_LT”) rename .

test table primary key error return . , pk .

2. table 4 columns workspace metadata columns .

version : row version id ltlock : lock status delstatus : delete status nextver : next row version id

Page 283: Oracle History #6

[email protected] - 283 -

Oracle9i New Features http://www.ggola.com

3. table rename table view view table table_name_base view

. view rename table table_name_lt table . dml

view instead of trigger insert, update, delete . CF. . table "wm_test" enable .

1. rename to wm_test_lt (table)

2. create view wm_test_base on wm_test_lt (view)

3. create instead of trigger for ins, upd, del of wm_test_base (trigger)

4. create view wm_test on wm_test_base (view) wm_test view

objects .

CF. rename table index .

1. primary key : primary key index version column .

2. new index : primary key index column index . (table_name_pki$)

4. version enabling objects . , table pk table table_name_lt

rename columns , table_name view index objects

. .

SQL> create table wm_test (id number); SQL> exec dbms_wm.enableversioning('wm_test'); BEGIN dbms_wm.enableversioning('wm_test'); END; * ERROR at line 1: ORA-20133: table 'SCOTT.WM_TEST' needs to have a primary key ORA-06512: at "SYS.LTDDL", line 441 ORA-06512: at "SYS.LTDDL", line 1177 ORA-06512: at "SYS.LTDDL", line 1163 ORA-06512: at "SYS.LT", line 8033 ORA-06512: at line 1 SQL> alter table wm_test add constraint pk_wm_test primary key (id); Table altered. SQL> desc wm_test Name Null? Type ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER

Page 284: Oracle History #6

[email protected] - 284 -

Oracle9i New Features http://www.ggola.com

SQL> select object_name, object_type, status 2 from user_objects 3 where object_name like '%WM_TEST%'; OBJECT_NAME OBJECT_TYPE STATUS --------------- ------------------ ------- PK_WM_TEST INDEX VALID WM_TEST TABLE VALID

primary key error primary key objects table, index .

SQL> exec dbms_wm.enableversioning('wm_test'); pl/sql procedure successfully completed. SQL> desc wm_test ERROR: ORA-24372: invalid object for describe

version enable table desc . .

SQL> select * from wm_test; no rows selected

. SQL> select object_name, object_type, status 2 from user_objects 3 where object_name like '%WM_TEST%'; OBJECT_NAME OBJECT_TYPE STATUS --------------- ------------------ ------- AUX_WM_TEST INDEX VALID PK_WM_TEST INDEX VALID WM_TEST VIEW INVALID WM_TEST_AP1$ INDEX VALID WM_TEST_AP2$ INDEX VALID WM_TEST_AUX TABLE VALID WM_TEST_BASE VIEW VALID WM_TEST_BPKC VIEW VALID WM_TEST_CONF VIEW VALID WM_TEST_DIFF VIEW VALID WM_TEST_LOCK VIEW VALID WM_TEST_LT TABLE VALID WM_TEST_MW VIEW INVALID WM_TEST_PKC VIEW VALID WM_TEST_PKD VIEW VALID WM_TEST_PKDB VIEW VALID WM_TEST_PKI$ INDEX VALID 17 rows selected.

17 object . wm_test_mw invalid . objects . (aux objects )

SQL> desc wm_test_lt Name Null? Type ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER VERSION NOT NULL NUMBER(38) NEXTVER VARCHAR2(500) DELSTATUS NUMBER(38) LTLOCK VARCHAR2(100)

wm_test wm_test_lt rename workspace metadata columns 4 .

Page 285: Oracle History #6

[email protected] - 285 -

Oracle9i New Features http://www.ggola.com

SQL> insert into wm_test values (1); 1 row created. SQL> select * from wm_test ; ID ---------- 1 SQL> select * from wm_test_lt; ID VERSION NEXTVER DELSTATUS LTLOCK --- ------- ---------- --------- -------------------------- ------------ 1 0 -1 10 !O! SQL> insert into wm_test values (2); 1 row created. SQL> select * from wm_test_lt; ID VERSION NEXTVER DELSTATUS LTLOCK --- ------- ---------- --------- -------------------------- ------------ 1 0 -1 10 !O! 2 0 -1 10 !O!

insert table lt table . SQL> delete from wm_test where id = 1; 1 row deleted. SQL> select * from wm_test_lt; ID VERSION NEXTVER DELSTATUS LTLOCK --- ------- ---------- --------- -------------------------- ----------- 1 0 -1 -10 !O! 2 0 -1 10 !O! SQL> commit;

delete table lt table id delestatus . SQL> update wm_test set id = 3 where id = 2; update wm_test set id = 3 where id = 2 * ERROR at line 1: ORA-20003: cannot modify primary key values for version-enabled tables ORA-06512: at "SCOTT.OVM_UPDATE_2", line 87 ORA-04088: error during execution of trigger 'SCOTT.OVM_UPDATE_2'

primary key update message trigger . SQL> select trigger_name, trigger_type 2 from user_triggers 3 where table_name = 'WM_TEST_BASE'; TRIGGER_NAME TRIGGER_TYPE ------------------------------ ---------------- OVM_DELETE_2 INSTEAD OF OVM_INSERT_2 INSTEAD OF OVM_UPDATE_2 INSTEAD OF

trigger wm_test_lt table .

Page 286: Oracle History #6

[email protected] - 286 -

Oracle9i New Features http://www.ggola.com

5. version disable table option . EX. dbms_wm.disableversioning(table, force, ignore_last_error) EX. dbms_wm.disableversioning('table_name', TRUE|FALSE, TRUE|FALSE); (default FALSE)

force = true : workspace data disable

ignore_last_error = true : disable version call error . errors metadata view USER_WM_VT_ERRORS and ALL_WM_VT_ERRORS

.

changes object

- version enable table objects table_name_aux table . base table

workspace conflict rows child,

parent . table size conflict

.

- table_name_aux table 3 index .

1. primary key : aux_table_name

2. parent state index : table_name_ap1$

3. child state index : table_name_ap2$

- version conflict views internal . table_name_[BPKC|CONF|DIFF|LOCK|MW|PKC|PKD]

history option

- tracking : history option row version history . EX. dbms_wm.enableversioning('table_name', 'option'); option : none(default, no tracking) view_w_overwrite(most recent only) : overwrite earlier changes view_wo_overwrite(all modification) : do not overwrite earlier changes

- table_name_lt : history option table_name_lt table columns .

createtime : row date and time version retiretime : same workspace session

row date and time version

Page 287: Oracle History #6

[email protected] - 287 -

Oracle9i New Features http://www.ggola.com

added index : history option createtime, retiretime new index table_name_ti$ index

. added view : history option

createtime, retiretime view table_name_hist .

SQL> exec dbms_wm.disableversioning('wm_test'); pl/sql procedure successfully completed. SQL> exec dbms_wm.enableversioning('wm_test', 'VIEW_WO_OVERWRITE'); pl/sql procedure successfully completed. SQL> desc wm_test_lt Name Null? Type ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER VERSION NOT NULL NUMBER(38) CREATETIME DATE RETIRETIME DATE NEXTVER VARCHAR2(500) DELSTATUS NOT NULL NUMBER(38) LTLOCK VARCHAR2(100)

columns createtime, retiretime . SQL> select object_name, object_type, status 2 from user_objects 3 where object_name like '%WM_TEST%'; OBJECT_NAME OBJECT_TYPE STATUS --------------- ------------------ ------- AUX_WM_TEST INDEX VALID PK_WM_TEST INDEX VALID WM_TEST VIEW VALID WM_TEST_AP1$ INDEX VALID WM_TEST_AP2$ INDEX VALID WM_TEST_AUX TABLE VALID WM_TEST_BASE VIEW VALID WM_TEST_BPKC VIEW VALID WM_TEST_CONF VIEW VALID WM_TEST_DIFF VIEW VALID WM_TEST_HIST VIEW VALID WM_TEST_LOCK VIEW VALID WM_TEST_LT TABLE VALID WM_TEST_MW VIEW INVALID WM_TEST_PKC VIEW VALID WM_TEST_PKD VIEW VALID WM_TEST_PKDB VIEW VALID WM_TEST_PKI$ INDEX VALID WM_TEST_TI$ INDEX VALID 19 rows selected.

Page 288: Oracle History #6

[email protected] - 288 -

Oracle9i New Features http://www.ggola.com

guideline

- referntial integrity constraints limit : referential integrity constraint .

1. parent table version enable child table version enable .

2. version enable table referential integrity constraints version enable .

3. parent table version enable child table version enable .

4. .

” a version-enable table cannot be both a child and a parent in a referential integrity relationship, unless it is a self-referential constraint.”

table self-referntial constraint table parnet and child version enable table

. .

- version enable table primary key .

- table owner wm_admin_role user version enable table .

- version enable table version enable table . (1 table, 1 version enable)

- sys owner table version enable .

- trigger support .

1. trigger version enable .

2. row level trigger .

3. row level trigger specific columns trigger

.

4. nested table columns trigger .

5. call-out pl/sql . trigger body pl/sql .

user_triggers view action_type column value pl/sql .

Page 289: Oracle History #6

[email protected] - 289 -

Oracle9i New Features http://www.ggola.com

triggers version enable deactivate version disable activate .

savepoints for workspace

- savepoint )

- two types

1. explicit : workspace rollback

2. implicit : workspace savepoint

- characteristics

1. workspace savepoint space new row version . , workspace savepoint rows table new version of the rows .

2. transaction savepoint savepoint , data access . CF. savepoint version

. , 2 workspace 4 savepoint row

2 * 4 = 8 row version .

creation

EX. dbms_wm.createworkspace('EMPJOB');

- session (user database ) workspace . LIVE

workspace . , workspace current workspace LIVE workspace .

- user workspace current workspace (database connection LIVE workspace ) child workspace implicitly savepoint current workspace current version . workspace workspace

. package .

- workspace names case sensitive .

Page 290: Oracle History #6

[email protected] - 290 -

Oracle9i New Features http://www.ggola.com

assign

- named workspace gotoworkspace procedure . named workspace access access_workspace privilege or access_any_workspace system pirvilege . EX. dbms_wm.gotoworkspace('EMPJOB'); CF. named workspace version enable table named workspace .

- named workspace workspace , live workspace

procedure . EX. dbms_wm.gotoworkspace('LIVE');

- current workspace function .

EX. dbms_wm.getworkspace SQL> select dbms_wm.getworkspace from dual; GETWORKSPACE ------------ LIVE

locking mechanism

- parent workspace and child workspace table conflict . , parent locking child locking conflict

.

1. session level locking workspace session property . locking enable

. session locking enable rows workspace lock .

2. session lock on and off procedure .

EX. dbms_wm.setlockingon, dbms_wm.setlockingoff

3. workspace row-level locking default mode . EX. dbms_wm.setworkspacelockmodeon, dbms_wm.setworkspacelockmodeoff off workspace versioned rows parent workspace rows access .

4. locking mode function .

EX. dbms_wm.getlockmode

Page 291: Oracle History #6

[email protected] - 291 -

Oracle9i New Features http://www.ggola.com

5. rows on specific table lock or unlock . lock versioned rows and parent

workspace rows . lock rows update update sql

. EX. dbms_wm.lockrows('workspace', 'table_name', 'emp_id in (1, 2)', 'S')

6. two lock types of version locks : transaction lock(without workspace) lock .

exclusive lock : lock session locked record . ( lock )

shared lock : row lock workspace users .

freeze a workspace

- workspace freeze users workspace access .

EX. dbms_wm.freezeworkspace(workspace in varchar2 [, freezemode in varchar2 default 'NO_ACCESS'][, freezewriter in varchar2 default null] [, force in boolean default false])

freezemode

1. NO_ACCESS : no sessions are allowed in the workspace

2. READ_ONLY : sessions are allowed but no dml operation

3. 1WRITER : sessions are allowed but only 1 user can operate dml

4. 1WRITER_SESSION : sessions are allowed but only one database session can operate dml (database session freezeworkspace procedure call session . session disconnect workspace unfrozen )

5. WM_ONLY: only workspace manager operation are permitted ( sessions data table data query . child workspace merge savepoints )

freezewriter : freezemode 1WRITER writer user . (1WRITER mode default current user)

force TRUE : workspace freeze freeze

. freezemode . ( unfreeze freezemode )

Page 292: Oracle History #6

[email protected] - 292 -

Oracle9i New Features http://www.ggola.com

FALSE : freeze workspace freeze .

- workspace unfreeze . EX. dbms_wm.unfreezeworkspace(workspace in varchar2)

rollback a workspace

- workspace discard . ( savepoint ) ( , version enable table ) EX. dbms_wm.rollbackworkspace('workspace') : discard all data changes in the workspace dbms_wm.rollbacktosp('workspace', 'savepoint') : discard all changes after savepoint dbms_wm.rollbacktable('workspace', 'table_name') : discard all changes only for a specified table dbms_wm.rollbackddl('table_name') : discard all ddl for a specified table CF. table data discard where condition savepoint table savepoint discard

. CF. rollback workspace structure

. workspace dbms_wm.removeworkspace('workspace') procedure

.

- savepoint : savepoint .

1. savepoint implicit savepoint . , merge or remove descendent workspace . (implicit savepoint . workspace

default )

2. all active users .

conflict resolution :

- conflict .

1. check conflict between parent and child EX. dbms_wm.setconflictworkspace('workspace')

procedure workspace parent workspace conflict . procedure

version enable table conflict table_name_conf view activate .

2. conflict table . EX. select * from table_name_conf;

Page 293: Oracle History #6

[email protected] - 293 -

Oracle9i New Features http://www.ggola.com

3. conflict dbms_wm package .

1. dbms_wm.beginresolve('workspace')

2. dbms_wm.resolveconflicts('workspace', 'table_name', 'where_clause', 'keep')

where_clause : primary key columns sub query .

keep . PARENT : the parent workspace rows to be copied to the

child workspace. . CHILD : the child workspace rows are copied to the parent

workspace when the child workspace is merged. . BASE : the base rows to be copied to the child workspace

but not to the parent workspace. when the child workspace is merged, the base rows are copied to the parent workspace.

3. dbms_wm.commitresolve('workspace') conflict resolution session workspace

permanently . , beginresolve procedure conflict resolution .

4. dbms_wm.mergeworkspace('workspace') data merge . .

merge workspace

- child parent merge workspace level table, specific rows level .

- merge conflict . ( conflict resolution )

- mergetable initial workspace state rollback .

- mergeworkspace option workspace remove .

CF. merge child worksapce NO_ACCESS mode freeze parent workspace READ_ONLY freeze .

EX. dbms_wm.mergeworkspace(workspace in varchar2, [, create_savepoint in boolean default false][, remove_workspace in boolean default false] [, auto_commit in boolean default true])

create_savepoint : merge implicit savepoint .

remove_workspace : merge workspace remove .

auto_commit : merge operation autonomous database

Page 294: Oracle History #6

[email protected] - 294 -

Oracle9i New Features http://www.ggola.com

transaction commit .

import and export

- version enable table export import

- import database current version enable table workspace workspace manager

. ( , LIVE workspace )

- database-wide export and import version enable database . ( , schema or table or partition or

workspace level export and import )

- import ignore=y option .

- import fromuser, touser version enable database .

oem interface

- oem console workspace management .

dictionary

- oracle views users read-only access

.

1. dba[user|all]_wm_versioned_tables : version enable table information

2. user[all]_wm_modified_tables : modified version enable table information

3. dba[user|all]_workspaces : all workspace information

4. dba[user|all]_workspace_savepoints : workspace savepoint information

5. dba[user|all]_workspace_privs : workspace privilege information

6. user_wm_privs : workspace current user information

7. role_wm_privs : workspace current user roles privilege information

Page 295: Oracle History #6

[email protected] - 295 -

Oracle9i New Features http://www.ggola.com

8. user[all]_wm_locked_tables : current workspace version enable tables rows locks information

9. dba_workspace_sessions : workspace users information

10. user[all]_wm_ric_info : referential constraints information

11. user[all]_wm_tab_triggers : version enable table define triggers information

12. all_version_hview : workspace current and parent version hierarchy information

workspace example

workspace operation without conflict

SQL> select workspace, parent_workspace, owner 2 from dba_workspaces; WORKSPACE PARENT_WOR OWNER ---------- ---------- ---------- LIVE SYS

system default LIVE workspace workspace . SQL> exec dbms_wm.grantsystempriv('ACCESS_ANY_WORKSPACE,- > MERGE_ANY_WORKSPACE, REMOVE_ANY_WORKSPACE,- > ROLLBACK_ANY_WORKSPACE', 'SCOTT', 'YES'); pl/sql procedure successfully completed.

scott user workspace privilege with grant option 'YES' . parameter auto_commit default TRUE auto commit .

SQL> conn scott/tiger SQL> create table emp_wm as select * from emp; SQL> create table dept_wm as select * from dept; SQL> alter table emp_wm add constraint pk_emp_wm primary key(emp_id); SQL> alter table dept_wm add constraint pk_dept_wm primary key(dept_id); SQL> alter table emp_wm add constraint fk_empwm_dept 2 foreign key (dept_id) references dept_wm; SQL> exec dbms_wm.enableversioning('dept_wm', 'VIEW_WO_OVERWRITE'); BEGIN dbms_wm.enableversioning('dept_wm', 'VIEW_WO_OVERWRITE'); END; * ERROR at line 1: ORA-20101: child table must be version enabled ORA-06512: at "SYS.LTDDL", line 441 ORA-06512: at "SYS.LTDDL", line 1177 ORA-06512: at "SYS.LTDDL", line 1163 ORA-06512: at "SYS.LT", line 8033 ORA-06512: at line 1

parent table version enable .

Page 296: Oracle History #6

[email protected] - 296 -

Oracle9i New Features http://www.ggola.com

SQL> exec dbms_wm.enableversioning('emp_wm', 'VIEW_WO_OVERWRITE'); pl/sql procedure successfully completed. SQL> exec dbms_wm.enableversioning('dept_wm', 'VIEW_WO_OVERWRITE'); pl/sql procedure successfully completed.

child and parent version enable . SQL> exec dbms_wm.createworkspace('wsp1'); pl/sql procedure successfully completed. SQL> exec dbms_wm.createworkspace('wsp2'); pl/sql procedure successfully completed.

workspace . SQL> select * from dept_wm; DEPT_ID DEPT_NAME REMARK ---------- ---------- ---------- A001 SALES E01 B001 SYSTEM W01 C001 DATABASE S01 D001 ERP E01 SQL> exec dbms_wm.gotoworkspace('wsp1'); pl/sql procedure successfully completed. SQL> select * from dept_wm; DEPT_ID DEPT_NAME REMARK ---------- ---------- ---------- A001 SALES E01 B001 SYSTEM W01 C001 DATABASE S01 D001 ERP E01 SQL> update dept_wm set dept_name = 'SAP' 2 where dept_id = 'D001'; 1 row updated. SQL> insert into dept_wm values 2 ('E001', 'NETWORK', 'SE1'); 1 row created. SQL> commit; Commit complete. SQL> select * from dept_wm; DEPT_ID DEPT_NAME REMARK ---------- ---------- ---------- A001 SALES E01 B001 SYSTEM W01 C001 DATABASE S01 D001 SAP E01 E001 NETWORK SE1 SQL> exec dbms_wm.gotoworkspace('LIVE'); pl/sql procedure successfully completed.

Page 297: Oracle History #6

[email protected] - 297 -

Oracle9i New Features http://www.ggola.com

SQL> select * from dept_wm; DEPT_ID DEPT_NAME REMARK ---------- ---------- ---------- A001 SALES E01 B001 SYSTEM W01 C001 DATABASE S01 D001 ERP E01

LIVE workspace . SQL> exec dbms_wm.freezeworkspace('wsp1'); pl/sql procedure successfully completed.

wsp1 freeze sessions wsp1 workspace access . (option default 'NO_ACCESS' .

SQL> exec dbms_wm.gotoworkspace('wsp2'); pl/sql procedure successfully completed. SQL> select * from dept_wm; DEPT_ID DEPT_NAME REMARK ---------- ---------- ---------- A001 SALES E01 B001 SYSTEM W01 C001 DATABASE S01 D001 ERP E01

wsp2 LIVE . update savepoint LIVE .

SQL> update dept_wm set remark = 'SW1' 2 where dept_id = 'A001'; 1 row updated. SQL> commit; Commit complete. SQL> select * from dept_wm; DEPT_ID DEPT_NAME REMARK ---------- ---------- ---------- B001 SYSTEM W01 C001 DATABASE S01 D001 ERP E01 A001 SALES SW1 SQL> exec dbms_wm.createsavepoint('wsp2', 'wsp2_sp1'); pl/sql procedure successfully completed. SQL> update dept_wm set remark = 'NE1' 2 where dept_id = 'A001'; 1 row updated. SQL> commit; Commit complete.

Page 298: Oracle History #6

[email protected] - 298 -

Oracle9i New Features http://www.ggola.com

SQL> select * from dept_wm; DEPT_ID DEPT_NAME REMARK ---------- ---------- ---------- B001 SYSTEM W01 C001 DATABASE S01 D001 ERP E01 A001 SALES NE1 SQL> exec dbms_wm.gotoworkspace('LIVE'); pl/sql procedure successfully completed. SQL> select * from dept_wm; DEPT_ID DEPT_NAME REMARK ---------- ---------- ---------- A001 SALES E01 B001 SYSTEM W01 C001 DATABASE S01 D001 ERP E01

LIVE workspace . SQL> exec dbms_wm.rollbacktosp('wsp2', 'wsp2_sp1'); pl/sql procedure successfully completed.

workspace wsp2 wsp2_sp1 savepoint rollback . , wsp2 'A001' remark 'NE1' transaction 'SW1' .

SQL> exec dbms_wm.unfreezeworkspace('wsp1'); pl/sql procedure successfully completed. SQL> exec dbms_wm.removeworkspace('wsp1'); pl/sql procedure successfully completed. SQL> exec dbms_wm.mergeworkspace('wsp2'); pl/sql procedure successfully completed.

workspace wsp1 unfreeze and remove wsp2 merge parent workspace . , wsp2 dept_wm parent workspace LIVE workspace

. SQL> exec dbms_wm.removeworkspace('wsp2'); pl/sql procedure successfully completed. SQL> exec dbms_wm.disableversioning('dept_wm'); pl/sql procedure successfully completed. SQL> exec dbms_wm.disableversioning('emp_wm'); pl/sql procedure successfully completed.

wsp2 workspace remove , workspace tables version disable .

Page 299: Oracle History #6

[email protected] - 299 -

Oracle9i New Features http://www.ggola.com

workspace operation with conflict

SQL> select * from dept_wm; DEPT_ID DEPT_NAME REMARK ---------- ---------- ---------- B001 SYSTEM W01 C001 DATABASE S01 D001 ERP E01 A001 SALES SW1

current workspace LIVE workspace , normal dept_wm table wsp2 workspace .

SQL> create table goods ( 2 id number, name varchar2(20), price number); Table created. SQL> alter table goods add constraint pk_goods 2 primary key (id); Table altered. SQL> exec dbms_wm.enableversioning('goods', 'VIEW_WO_OVERWRITE'); pl/sql procedure successfully completed. SQL> insert into goods values 2 (1000, 'VCR', 100000); 1 row created. SQL> insert into goods values 2 (2000, 'PC', 200000); 1 row created. SQL> commit; Commit complete. SQL> select * from goods; ID NAME PRICE ---------- -------------------- ---------- 1000 VCR 100000 2000 PC 200000 SQL> exec dbms_wm.createworkspace('wsp1'); pl/sql procedure successfully completed. SQL> exec dbms_wm.createworkspace('wsp2'); pl/sql procedure successfully completed. SQL> exec dbms_wm.gotoworkspace('wsp1'); pl/sql procedure successfully completed.

Page 300: Oracle History #6

[email protected] - 300 -

Oracle9i New Features http://www.ggola.com

SQL> update goods set price = '300000' 2 where id = 2000; 1 row updated. SQL> insert into goods values 2 (3000, 'BAG', 500000); 1 row created. SQL> commit; Commit complete. SQL> select * from goods; ID NAME PRICE ---------- -------------------- ---------- 1000 VCR 100000 2000 PC 300000 3000 BAG 500000 SQL> exec dbms_wm.gotoworkspace('LIVE'); pl/sql procedure successfully completed. SQL> select * from goods; ID NAME PRICE ---------- -------------------- ---------- 1000 VCR 100000 2000 PC 200000

LIVE workspace . SQL> exec dbms_wm.freezeworkspace('wsp1'); pl/sql procedure successfully completed. SQL> exec dbms_wm.gotoworkspace('wsp2'); pl/sql procedure successfully completed.

wsp1 freeze wsp2 data . SQL> update goods set price = 150000 2 where id = 1000; 1 row updated. SQL> insert into goods values 2 (4000, 'TV', 700000); 1 row created. SQL> commit; Commit complete. SQL> select * from goods; ID NAME PRICE ---------- -------------------- ---------- 2000 PC 200000 1000 VCR 150000 4000 TV 700000

Page 301: Oracle History #6

[email protected] - 301 -

Oracle9i New Features http://www.ggola.com

SQL> exec dbms_wm.createsavepoint('wsp2', 'wsp2_sp1'); pl/sql procedure successfully completed. SQL> update goods set price = 900000 2 where id = 4000; 1 row updated. SQL> update goods set price = 250000 2 where id = 2000; 1 row updated. SQL> commit; Commit complete. SQL> select * from goods; ID NAME PRICE ---------- -------------------- ---------- 1000 VCR 150000 4000 TV 900000 2000 PC 250000 SQL> exec dbms_wm.gotoworkspace('LIVE'); pl/sql procedure successfully completed. SQL> select * from goods; ID NAME PRICE ---------- -------------------- ---------- 1000 VCR 100000 2000 PC 200000

LIVE workspace . SQL> exec dbms_wm.gotoworkspace('wsp1'); BEGIN dbms_wm.gotoworkspace('wsp1'); END; * ERROR at line 1: ORA-20123: workspace 'wsp1' is currently frozen in NO_ACCESS mode ORA-06512: at "SYS.LT", line 4608 ORA-06512: at line 1

wsp1 NO_ACCESS freeze . wsp1 unfreeze and remove wsp1 .

SQL> exec dbms_wm.unfreezeworkspace('wsp1'); pl/sql procedure successfully completed. SQL> exec dbms_wm.removeworkspace('wsp1'); pl/sql procedure successfully completed. SQL> select * from goods; ID NAME PRICE ---------- -------------------- ---------- 1000 VCR 100000 2000 PC 200000

LIVE workspace .

Page 302: Oracle History #6

[email protected] - 302 -

Oracle9i New Features http://www.ggola.com

SQL> update goods set price = 10 2 where id in (1000, 2000); 2 rows updated. SQL> commit; Commit complete. SQL> exec dbms_wm.mergeworkspace('wsp2'); BEGIN dbms_wm.mergeworkspace('wsp2'); END; * ERROR at line 1: ORA-20055: conflicts detected for workspace: 'wsp2' in table: 'SCOTT.GOODS' ORA-06512: at "SYS.LT", line 843 ORA-06512: at "SYS.LT", line 828 ORA-06512: at "SYS.LT", line 5229 ORA-06512: at line 1

parent workspace data data child workspace conflict merger . conflict information sql

. SQL> select * from goods_conf; no rows selected

dbms_wm.setconflictworkspace procedure version enable table goods_conf activate . conflict

child workspace gotoworkspace setconflictworkspace goods_conf . LIVE workspace . procedure .

SQL> exec dbms_wm.setconflictworkspace('wsp2'); pl/sql procedure successfully completed. SQL> select * from goods_conf; WM_WORKSPA ID NAME PRICE WM_ ---------- ------ ---------- --------- --- wsp2 1000 VCR 150000 NO BASE 1000 VCR 100000 NO LIVE 1000 VCR 10 NO wsp2 2000 PC 250000 NO BASE 2000 PC 200000 NO LIVE 2000 PC 10 NO 6 rows selected.

wsp2 id 4000 LIVE workspace LIVE workspace id 4000 conflict . , LIVE workspace

id 1000, 2000 data wsp2 conflict . column delete . delete NO .

id 1000 100000, 2000 200000 base live 10 wsp2 150000, 250000 .

Page 303: Oracle History #6

[email protected] - 303 -

Oracle9i New Features http://www.ggola.com

SQL> exec dbms_wm.rollbacktosp('wsp2', 'wsp2_sp1'); pl/sql procedure successfully completed. SQL> select * from goods_conf; WM_WORKSPA ID NAME PRICE WM_ ---------- ------ ---------- --------- --- wsp2 1000 VCR 150000 NO BASE 1000 VCR 100000 NO LIVE 1000 VCR 10 NO

wsp2_sp1 rollback id 2000 rollback conflict .

SQL> begin 2 dbms_wm.beginresolve('wsp2'); 3 dbms_wm.resolveconflicts('wsp2', 'goods', 4 'id=1000', 'parent'); 5 commit; 6 end; 7 / pl/sql procedure successfully completed.

id 1000 conflict parent resolve . SQL> exec dbms_wm.commitresolve('wsp2'); pl/sql procedure successfully completed.

permanently . SQL> exec dbms_wm.mergeworkspace('wsp2'); pl/sql procedure successfully completed. SQL> select * from goods; ID NAME PRICE ------ ---------- --------- 2000 PC 10 4000 TV 700000 1000 VCR 10

merge conflict wsp2 id 4000 data parent workspace id 1000, 2000 data .

SQL> exec dbms_wm.gotoworkspace('wsp2'); pl/sql procedure successfully completed. SQL> select * from goods; ID NAME PRICE ------ ---------- --------- 2000 PC 200000 1000 VCR 10 4000 TV 700000

wsp2 conflict resolve merge id 1000 parent workspace value wsp2 copy rollbact to savepoint id 2000 price value ( conflict base value wsp2 creation value)

.

Page 304: Oracle History #6

[email protected] - 304 -

Oracle9i New Features http://www.ggola.com

- resolveconflicts parent parent workspace ( LIVE workspace)

(child workspace , id=2000 PC rollbacktosp rollback ) merge child workspace copy .

- resolveconflicts option parent and child

.

SQL> exec dbms_wm.gotoworkspace('LIVE'); pl/sql procedure successfully completed. SQL> exec dbms_wm.mergeworkspace('wsp2', remove_workspace => TRUE); pl/sql procedure successfully completed.

test merge mergeworkspace remove_workspace option true .

SQL> exec dbms_wm.gotoworkspace('wsp2'); BEGIN dbms_wm.gotoworkspace('wsp2'); END; * ERROR at line 1: ORA-20122: workspace 'wsp2' does not exist ORA-06512: at "SYS.LT", line 4608 ORA-06512: at line 1

merge ( ) workspace remove .

Page 305: Oracle History #6

[email protected] - 305 -

Oracle9i New Features http://www.ggola.com

20. Advanced Replication

add new master site

basic description

- to 8i master node waiting . , replicated group quiese all replication

activity dml .

- from 9i end users master group new database replicated table dml

.

CF. replication .

CF. oracle oem replication manager .

chapter oem new features .

replication

1. global_names = true

2. job_queue_processes = n (1 )

3. open_links = n ( master sites )

how to add (step)

1. a new master definition site procedural call : SPECIFY_NEW_MASTERS new site dba_repsites_new view

, new master sites sites . EX. dbms_repcat.specify_new_masters ('master_group_name',{master_list/master_table})

2. add new master EX. dbms_repcat.add_new_masters (export_required in boolean, {available_master_list in varchar2, | available_master_table in dbms_utility.dblink_array,} masterdef_flashback_scn out number, extension_id out raw, break_trans_to_masterdef in boolean := false, break_trans_to_new_masters in boolean := false,

Page 306: Oracle History #6

[email protected] - 306 -

Oracle9i New Features http://www.ggola.com

percentage_for_catchup_mdef in binary_integer := 100, cycle_seconds_mdef in binary_integer := 60, percentage_for_catchup_new in binary_integer := 100, cycle_seconds_new in binary_integer := 60);

3. full export with scn above procedure result "masterdef_flashback_scn" EX. exp system/manager file=xx.dmp full=y direct=n grants=y rows=y flashback_scn='value'

value masterdef_flashback_scn .

4. export master definition site propagation

EX. select extension_id from dba_repsites_new; dbms_repcat.resume_propagation_to_mdef(extension_id => 'value')

value select extension_id .

5. import EX. imp system/manager file=xx.dmp full=y buffer=100000 ignore=y commit=y log=xx.log

EX. import rman recover database recovery . SQL> recover database until change 'value';

value step 2 scn value RMAN> run { set until scn = 'value' duplicate target database to database_name nofilenamecheck; }

6. import recovery parameter master definition site database link procedure call deferred transactions propagation enable . EX. dbms_repcat.prepare_instantiated_master(extension_id => :ext_id)

ext_id dba_repsites_new and dba_repextensions

export/import and scn based recovery

1. new master sites replication group .

2. master definition site materialized view groups .

3. master definition site master group .

4. new master site extension process master definition site replication groups .

Page 307: Oracle History #6

[email protected] - 307 -

Oracle9i New Features http://www.ggola.com

when to add new masters without quiescing

1. dml operation master site

2. master site unpropagated deferred transaction queue free space

3. new master site connection database export/import or scn recovery

4. add new master restriction

restrictions to add new masters without quiescing

1. synchronous replication .

2. replication group extended master definition site relocate .

3. master group database database link connection qualifier .

4. serial or parallel propagation option queue disable .

5. same master definition site master site master groups master

sites add wait .

6. all master sites compatible parameter 9.0 or higher .

CF. specify_new_masters, add_new_masters master site remove undo_add_new_masters_request procedure

.

row-level scn

dependency

- to 8i or default in 9i dependent scn block level . advanced replication parallel

propagation .

- from 9i row level scn dependency .

Page 308: Oracle History #6

[email protected] - 308 -

Oracle9i New Features http://www.ggola.com

features

- row-level scn scn table . table row head piece commit

scn . EX. create table rep_master_tab .... rowdependencies;

1. row 6 bytes

2. scn row transaction commit time . , row clean out

time .

3. transaction delayed block clean out row level scn update .

parallel propagation and row-level scn

- parallel propagation oracle9i data dependent transactions .

- scn . (block level transactions block rows

scn )

constraint scn

1. constarint table additional replication dependencies .

2. constraint scn unique, referential constraints dependent rows transactions highest commit scn .

3. constraint scn row level scn index leaf block 6 bytes . ( automatically )

4. constraint scn replication rows check . (procedure )

materialized view fast refresh

materialized view oracle8i new features .

new support for subquery

1. from 9i relationship subqueries fast refresh .

Page 309: Oracle History #6

[email protected] - 309 -

Oracle9i New Features http://www.ggola.com

2. subquery union set operators .

CF. in 8i unique constraint join subquery mview fast refresh .

dbms_mview.explain_mview procedure

1. view mview fast refresh object populate .

object mv_capabilities_table mview capabilities , .

2. Name Null? Type ----------------------------------------- -------- ------------------------- STATEMENT_ID VARCHAR2(30) MVOWNER VARCHAR2(30) MVNAME VARCHAR2(30) CAPABILITY_NAME VARCHAR2(30) POSSIBLE CHAR(1) RELATED_TEXT VARCHAR2(2000) RELATED_NUM NUMBER MSGNO NUMBER(38) MSGTXT VARCHAR2(2000) SEQ NUMBER

multitier mviews

1. from 9i mview based on mviews read-only updatable .

EX. create materialized view mv_name refresh fast for update as (select.....)

supported replication objects

objects

1. object columns, collection type, ref columns

2. object tables

3. object views and instead of triggers

4. index types, operators, domain indexes

replicated mviews with following

1. column objects, object views, ref columns, collection columns

Page 310: Oracle History #6

[email protected] - 310 -

Oracle9i New Features http://www.ggola.com

2. object table replication materialized view logs oid . (oid : object identifier)

CF. , user-defined types mview mview creation user-defined type .

monitoring and managing

replication envirionment

- v$mvrefresh

- v$replprop

- v$replqueue

replication management tool from 9i .

- reporting capabilities

- redesigned deployment template wizard and template script generation wizard

job queue

obsolete

- parameter : job_queue_interval (cjq0 process available job scanning)

- process : snp background process cjq0 process .

coordinator

- coordinator process cjq0 parallel process coordinator . child job process jnnn process .

- alter system set job_queue_processes = ? process .

Page 311: Oracle History #6

[email protected] - 311 -

Oracle9i New Features http://www.ggola.com

other changes

migration

- alter table…modify command long clob, long raw blob . , table

temporarily 2 space .

- table dml application .

converting

- long columns lob columns data replication .

- . bandwidth remote sites table regeneration cost table mview manually rebuilt

snapshots

- snapshot . ( , snapshot too old )

- snapshot materialized view

- sql syntax backwards compatibility (dbms_snapshot dbms_mview

)

new date and time data type

- from 9i advanced replication date and time data type ( chapter ) .

upgrade replication to 9i

- replication checking : README_rdbms.htm ($ORACLE_HOME/rdbms/doc/)

- after upgrade oracle9i : catproc.sql . catrep.sql . (from 9i catproc catrep

call )