Академический Документы
Профессиональный Документы
Культура Документы
2 New Features
Julian Dyke Independent Consultant
Web Version
1
juliandyke.com
Introduction
juliandyke.com
juliandyke.com
Continued.... Version 8.0 8.1.5 8.1.6 8.1.7 9.0.1 9.2 10.1 10.2 Date June 1997 February 1999 November 1999 August 2000 June 2001 May 2002 January 2004 July 2005 Release Name Oracle 8 Oracle 8i Release 1 Oracle 8i Release 2 Oracle 8i Release 3 Oracle 9i Release 1 Oracle 9i Release 2 Oracle 10g Release 1 Oracle 10g Release 2
juliandyke.com
juliandyke.com
juliandyke.com
Introduced in Oracle 10.2 Works with DML statements: INSERT UPDATE MERGE DELETE Logs errors encountered during DML operations in error logging table Avoids rolling back entire statement if an error occurs
juliandyke.com
Information about failed rows written to DML Error Logging Table Default name is ERR$_ plus first 25 characters of table name Contains Mandatory columns - Oracle control information Optional columns - contain data from failed rows Can be created manually or using DBMS_ERRLOG package EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG (<DML table_name>,[<error_table_name>]);
juliandyke.com
To create a DML error logging table use: EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG (<DML table_name>);
Creates DML error table called ERR$_CAR Can optionally specify name for DML error table EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG ('CAR'.'ERR_CAR');
DBMS_ERRLOG creates columns with recommended data types in DML Error Table
juliandyke.com
Mandatory Columns
10
juliandyke.com
Optional Columns
Can have zero, one or more columns Contain data from failed rows Error table column names same as DML table column names Error table data types may differ from DML table data types Capture type conversion errors Column overflow
DML Table Column Type NUMBER CHAR/VARCHAR2(n) NCHAR/NVARCHAR2(n) DATE/TIMESTAMP RAW ROWID LONG/LOB User-defined types Error Logging Table Column Type VARCHAR2(4000) VARCHAR2(4000) NVARCHAR2(4000) VARCHAR2(4000) RAW(2000) UROWID Not supported Not supported
11
juliandyke.com
12
juliandyke.com
Data Type NUMBER VARCHAR2(2000) ROWID VARCHAR2(2) VARCHAR2(2000) VARCHAR2(4000) VARCHAR2(4000) VARCHAR2(4000) VARCHAR2(4000) VARCHAR2(4000) VARCHAR2(4000) VARCHAR2(4000) VARCHAR2(4000) VARCHAR2(4000) VARCHAR2(4000) VARCHAR2(4000) Optional Columns Mandatory Columns
juliandyke.com
Can optionally specify a REJECT LIMIT subclause number of errors before statement terminates and rolls back can also specify UNLIMITED default value is 0 if statement rolls back, error logging table retains log entries Can optionally specify tag to correlate failed rows with DML statement
14
juliandyke.com
For example:
INSERT INTO car ( season_key, race_key, position, driver_key, team_key, engine_key, laps_completed, classification_key, notes ) SELECT season_key, race_key, position, driver_key, team_key, engine_key, laps_completed, classification_key, notes FROM external_car LOG ERRORS INTO err_car REJECT LIMIT UNLIMITED;
Note: INSERT statement does not return any error messages even if rows are written to DML error table
15
juliandyke.com
Asynchronous Commit
16
juliandyke.com
Asynchronous Commit
In Oracle 10.2 and above COMMITs can be optionally deferred New syntax for COMMIT statement COMMIT [ WRITE [ IMMEDIATE|BATCH] [WAIT | NOWAIT] ]
WRITE clause IMMEDIATE specifies redo should be written immediately by LGWR process when transaction is committed (default) BATCH causes redo to be buffered to redo log
WAIT specifies commit will not return until redo is persistent in online redo log (default) NOWAIT allows commit to return before redo is persistent in redo log
17
juliandyke.com
Asynchronous Commit
COMMIT Statement Examples COMMIT; COMMIT WRITE; COMMIT WRITE IMMEDIATE; COMMIT WRITE IMMEDIATE WAIT; COMMIT WRITE BATCH; COMMIT WRITE BATCH NOWAIT; -- IMMEDIATE WAIT -- Same as COMMIT; -- Same as COMMIT; -- Same as COMMIT; -- BATCH WAIT -- BATCH NOWAIT
18
juliandyke.com
Asynchronous Commit
COMMIT_WRITE initialization parameter Controls default behaviour for commit operation Default value is Determines default value of COMMIT WRITE statement If neither is set then commit records are written to disk before control is returned to user (Oracle 10.1 behaviour) Can be modified using ALTER SESSION statement ALTER SESSION SET COMMIT_WRITE = 'IMMEDIATE,WAIT'; ALTER SESSION SET COMMIT_WRITE = 'BATCH,NOWAIT';
19
juliandyke.com
Asynchronous Commit
Advantages: Eliminates the wait for an I/O to the redo log Can improve performance by reducing latency Improves response times Disadvantages: Must be able to tolerate loss of asynchronously committed transaction Applicable where: high volume of update transactions generate frequent redo log writes to disk response times degraded by waits for redo log writes to disk
20
juliandyke.com
Asynchronous Commit
Can lose data therefore cannot be used in OLTP or web environments unless middleware detects and resolves errors Might work in DSS and batch environments where processes are repeatable e.g. Parallel batch processing Parallel direct load But only of benefit if there are high number of transactions Does not apply in DSS or batch environments Change application to reduce number of COMMITs
21
juliandyke.com
22
juliandyke.com
Conditional Compilation
In Oracle 10.2 and above, PL/SQL can include conditional compilation directives Useful for Compatibility between releases (10.2 and upwards only) Trace / Debugging Testing / Quality Assurance For example
CREATE OR REPLACE PROCEDURE p1 BEGIN DBMS_OUTPUT.PUT_LINE ('Before'); $IF $$trace_enabled $THEN DBMS_OUTPUT.PUT_LINE ('Conditional Code'); $END DBMS_OUTPUT.PUT_LINE ('After'); END; /
23
juliandyke.com
Conditional Compilation
24
juliandyke.com
Column Encryption
25
juliandyke.com
Column Encryption
In Oracle 10.2 and above individual columns can be encrypted Columns are encrypted transparently to applications Columns are encrypted on disk Requires a wallet Directory containing encryption keys Password protected Defined in SQLNET.ORA Directory must be created manually
26
juliandyke.com
Column Encryption
27
juliandyke.com
Column Encryption
28
juliandyke.com
Column Encryption
29
juliandyke.com
Column Encryption
Column length changes on disk Actual lengths not reported by DUMP or VSIZE
30
juliandyke.com
Space Management
31
juliandyke.com
Online Shrink
In Oracle 10.1 and above, tables and indexes can be shrunk Must be using Automatic Segment Space Management Must enable row movement
ALTER TABLE t1 ENABLE ROW MOVEMENT;
To shrink table
ALTER TABLE t1 SHRINK SPACE;
By default compacts space adjusts high water mark releases space To shrink dependent objects
ALTER TABLE t1 SHRINK SPACE CASCADE;
32
juliandyke.com
Online Shrink
In Oracle 10.1 and above can shrink Tables Indexes IOT IOT Secondary Indexes Partitions Subpartitions Materialized Views Materialized View Logs In Oracle 10.2 and above can also shrink LOB Segments Function Based Indexes IOT Overflow Segments
33
juliandyke.com
In Oracle 10.2 and above, empty datafiles can be dropped Useful in conjunction with online shrink
ALTER TABLESPACE test DROP DATAFILE 'test1.dbf';
34
juliandyke.com
In Oracle 10.2 and above temporary files can be renamed For example to rename temp1.dbf to temp2.dbf Take file offline using:
ALTER DATABASE TEMPFILE 'temp1.dbf' OFFLINE;
35
juliandyke.com
36
juliandyke.com
In Oracle 10.2 and above includes new procedures to enable and disable trace at database and/or instance level New procedures in DBMS_MONITOR package
PROCEDURE DATABASE_TRACE_ENABLE
Argument Name WAITS BINDS INSTANCE_NAME Type BOOLEAN BOOLEAN VARCHAR2 In/Out IN IN IN Default DEFAULT DEFAULT DEFAULT
PROCEDURE DATABASE_TRACE_DISABLE
Argument Name INSTANCE_NAME Type VARCHAR2 In/Out IN Default DEFAULT
37
juliandyke.com
38
juliandyke.com
V$PROCESS_MEMORY
39
juliandyke.com
V$PROCESS_MEMORY
Example - can be used to verify size of SQL and PL/SQL areas for a process
SELECT * FROM V$PROCESS_MEMORY WHERE pid = 26;
PID 26 26 26 26
SERIAL# 3 3 3 3
40
juliandyke.com
SQL*Plus
41
juliandyke.com
SQL*Plus XQUERY
In Oracle 10.2 and above SQL*Plus can run XQuery 1.0 commands against database For example
SQL> SET LONG 200 SQL> SET LINESIZE 200 SQL> XQUERY FOR $i IN ORA:VIEW ("CIRCUIT") RETURN $i SQL> /
Returns
<ROW><CIRCUIT_KEY>SHA</CIRCUIT_KEY><CIRCUIT_NAME>Shang hai</CIRCUIT_NAME><COUNTRY_KEY>CHI</COUNTRY_KEY></ROW> <ROW><CIRCUIT_KEY>BAH</CIRCUIT_KEY><CIRCUIT_NAME>Bahrai n</CIRCUIT_NAME><COUNTRY_KEY>BAH</COUNTRY_KEY></ROW> ... 55 item(s) selected
42
juliandyke.com
DBMS_OUTPUT
DBMS_OUTPUT maximum line length In Oracle 10.1 and below - 255 bytes In Oracle 10.2 and above - 32767 bytes
SET SERVEROUTPUT ON DBMS_OUTPUT.ENABLE (1000000); DBMS_OUTPUT.PUT_LINE (...); SET SERVEROUTPUT ON SIZE 1000000 DBMS_OUTPUT.PUT_LINE (...);
DBMS_OUTPUT maximum output buffer size In Oracle 10.1 and below - 1000000 bytes In Oracle 10.2 and above - unlimited
43
juliandyke.com
Parameters
44
juliandyke.com
V$PARAMETER_VALID_VALUES
Introduced in Oracle 10.2 Returns one row for each valid value for each parameter taking scalar values
Name NUM NAME ORDINAL VALUE ISDEFAULT Type NUMBER VARCHAR2(64) NUMBER VARCHAR2(255) VARCHAR2(64)
45
juliandyke.com
V$PARAMETER_VALID_VALUES
E.g in Oracle 10.2 valid values for CURSOR_SHARING parameter are: FORCE EXACT SIMILAR
SELECT name, value, isdefault FROM v$parameter_valid_values WHERE name = 'cursor_sharing' ORDER BY ordinal;
46
juliandyke.com
V$PARAMETER_VALID_VALUES
View definition
SELECT view_definition FROM v$fixed_view_definition WHERE view_name = 'GV$PARAMETER_VALID_VALUES';
SELECT inst_id, parno_kspvld_values, name_kspvld_values, ordinal_kspvld_values, value_kspvld_values, isdefault_kspvld_values FROM x$kspvld_values WHERE TRANSLATE (name_kspvld_values,'_','#') NOT LIKE '#%';
47
juliandyke.com
X$KSPVLD_VALUES
Introduced in 10.2 Contains all valid parameter values Includes supported and unsupported parameters
Name ADDR INDX INST_ID PARNO_KSPVLD_VALUES NAME_KSPVLD_VALUES ORDINAL_KSPVLD_VALUES VALUE_KSPVLD_VALUES ISDEFAULT_KSPVLD_VALUES Type RAW(4) NUMBER NUMBER NUMBER VARCHAR2(64) NUMBER VARCHAR2(255) VARCHAR2(64)
48
juliandyke.com
X$KSPVLD_VALUES
49
juliandyke.com
Auditing
50
juliandyke.com
In Oracle 10.2 and above auditing records can be output in XML ALTER SYSTEM SET audit_trail = 'XML' SCOPE = SPFILE;
Requires instance restart Audit trail files are written to directory specified by AUDIT_DUMP_DEST parameter Defaults to $ORACLE_BASE/admin/<SID>/adump Filenames like ora_3221174380.xml
51
juliandyke.com
Sample output
<Audit> <Version>10.2</Version> <AuditRecord> <Audit_Type>1</Audit_Type> <Session_Id>700</Session_Id> <StatementId>7</StatementId>| <EntryId>1</EntryId> <Extended_Timestamp>2005-09-09T15:30:01.584940</Extended_Timestamp> <DB_User>USER1</DB_User> <OS_User>oracle</OS_User> <Userhost>server1</Userhost> <OS_Process>26000</OS_Process> <Terminal>pts/0</Terminal> <Instance_Number>0</Instance_Number> <Object_Schema>USER1</Object_Schema> <Object_Name>TABLE1</Object_Name> <Action>103</Action> <Returncode>0</Returncode> <Scn>3277463</Scn> <SesActions>---------S------</SesActions> </AuditRecord> </Audit> 52
juliandyke.com
Restore Points
53
juliandyke.com
Restore Points
In Oracle 10.2 and above restore points can be named Previously required SCN or timestamp Requires Archiving Flashback To enable flashback set the following parameters:
ALTER SYSTEM SET db_recovery_file_dest_size = 1000M; ALTER SYSTEM SET db_recovery_file_dest = '<filename>'; ALTER SYSTEM SET db_flashback_retention_target = 1440;
54
juliandyke.com
Restore Points
Restore points can be Guaranteed restore points FLASHBACK must be enabled before creation Must be manually deleted Can restore beyond time specified by DB_FLASHBACK_RETENTION_TARGET parameter
Normal restore points Can be created before FLASHBACK is enabled Can be automatically deleted Cannot restore beyond time specified by DB_FLASHBACK_RETENTION_TARGET parameter
55
juliandyke.com
Restore Points
56
juliandyke.com
Restore Points
57
juliandyke.com
Restore Points
In Oracle 10.2 and above can also flashback table to restore point Does not require flashback database Row movement must be enabled on table
ALTER TABLE t1 ENABLE ROW MOVEMENT;
58
juliandyke.com
RMAN
59
juliandyke.com
RMAN
In Oracle 10.2 and above RMAN is supported by a number of new dynamic performance views including:
V$BACKUP_ARCHIVELOG_DETAILS V$BACKUP_ARCHIVELOG_SUMMARY V$BACKUP_CONTROLFILE_DETAILS V$BACKUP_CONTROLFILE_SUMMARY V$BACKUP_COPY_DETAILS V$BACKUP_COPY_SUMMARY V$BACKUP_DATAFILE_DETAILS V$BACKUP_DATAFILES_SUMMARY V$BACKUP_PIECE_DETAILS V$BACKUP_SET_DETAILS V$BACKUP_SET_SUMMARY V$BACKUP_SPFILE_DETAILS V$BACKUP_SPFILE_SUMMARY
60
juliandyke.com
Conclusion
If you are implementing a new system use Oracle 10.2 If you are considering upgrading an existing system
Upgrade if you use ASM Data Guard Spatial / OLAP etc Consider upgrading if you use RAC Otherwise perform a cost / benefit analysis before upgrading
61
juliandyke.com
info@juliandyke.com
62
juliandyke.com