Editions - New Zealand Oracle Users Group

advertisement
The powerhouse PL/SQL upgrade option:
Edition-Based Redefinition (EBR)
Tim Hall
Oracle ACE Director
Oracle ACE of the Year 2006
OakTable Network
OCP DBA (7, 8, 8i, 9i, 10g, 11g)
OCP Advanced PL/SQL Developer
Oracle Database: SQL Certified Expert
http://www.oracle-base.com
Books
Oracle PL/SQL Tuning
Oracle Job Scheduling
http://www.oracle-base.com
Why should we care about EBR?
• Application upgrades with no downtime.
• Run multiple versions of apps simultaneously.
• Gradual ramp-up.
http://www.oracle-base.com
Editions
• Version label (sort-of) for some objects in schema.
• Only apply to:
– PL/SQL Objects: Functions, Libraries,
Packages, Procedures, Triggers,
Types
Also: Synonyms, Views
• Objects identified by:
–
–
–
–
owner
object_name
object_type
edition
http://www.oracle-base.com
New and Amended Dictionary Views
•
•
•
•
•
•
•
•
•
•
•
•
*_EDITIONS
*_EDITION_COMMENTS
*_OBJECTS
*_OBJECTS_AE
*_ERRORS
*_ERRORS_AE
*_USERS
*_VIEWS
*_EDITIONING_VIEWS
*_EDITIONING_VIEWS_AE
*_EDITIONING_VIEW_COLS
*_EDITIONING_VIEW_COLS_AE
* = DBA / ALL / USER
http://www.oracle-base.com
What about tables?
• Tables NOT editionable.
• Use “Editioning Views” to see subsets and rename
columns.
CREATE OR REPLACE
EDITIONING VIEW view-name AS
SELECT col1,
col2,
col4 AS new_name
FROM
table-name;
• Apps access EViews, not tables.
http://www.oracle-base.com
Editioning Views
Schema
Edition: release_v1
Edition: release_v2
http://www.oracle-base.com
Performance
• Oracle guarantee execution plan will match for same
query against editioning view and table.
• No performance impact.
http://www.oracle-base.com
Do base tables have missing data?
• Yes, but there is a solution.
• Use Cross-Edition Triggers to
keep base table consistent.
• Similar to regular triggers.
• Transient.
http://www.oracle-base.com
Demo
setup.sql
http://www.oracle-base.com
Managing Editions
• Editions are created using CREATE EDITION.
CREATE EDITION ed-name;
CREATE EDITION ed-name AS CHILD OF ed-name;
• Currently only 1 child per parent.
v1
v2
v3
• Attempt to branch results in error.
ORA-38807: Implementation restriction:
an edition can have only one child
http://www.oracle-base.com
v1.5
Managing Editions (continued)
• Unreferenced leaf editions removed
using DROP EDITION.
v1
v2
✗
v3
• Attempt to drop non-leaf edition results in error
ORA-38810: Implementation restriction: cannot drop
edition that has a parent and a child
• Query DBA_EDITIONS.
• manage_editions.sql
http://www.oracle-base.com
✔
User Setup
• Editioning must be turned on for a user.
ALTER USER username ENABLE EDITIONS;
• No off switch!
• Specific editions must be associated with users.
GRANT USE ON EDITION ed-name TO username;
• user_setup.sql
http://www.oracle-base.com
Switching between editions
• Any Session: (switch_editions.sql)
ALTER SESSION SET EDITION = ed-name;
ALTER DATABASE DEFAULT EDITION = ed-name;
• SQL*Plus:
$ export ORA_EDITION=ed-name
C:> set ORA_EDITION=ed-name
$ sqlplus username/[email protected] edition=ed-name
SQL> CONNECT username/[email protected] EDITION=ed-name
http://www.oracle-base.com
Switching between editions (continued)
• Services: Editions associated with services (11.2.0.2)
BEGIN
DBMS_SERVICE.modify_service(
service_name
=> 'DB11G.WORLD',
edition
=> 'RELEASE_V1',
modify_edition => TRUE);
END;
/
• When you switch to a new edition, all editionable
objects in schema are automatically inherited from
the previous edition.
• Altering or dropping an object breaks inheritance for
that object.
http://www.oracle-base.com
Preparing existing app for editions.
• Rename base tables.
• Create editioning views matching original table
structures and names. PL/SQL objects will recompile
against editioning view.
• Drop any triggers and compile them against
editioning views, rather than base tables.
• If necessary, apply VPD policies against editioning
views, rather than base tables.
• Revoke all privileges against tables and
recreate them against the editioning views.
http://www.oracle-base.com
Create new application
• Build editioning views over tables.
• Code references editioning views, not tables.
• Triggers and VPD policies
reference editioning views.
• (create_app.sql)
http://www.oracle-base.com
Upgrade application
• Amend base tables.
• Switch edition.
• Build new editioning views and
new app.
• Build cross edition triggers
and update missing data.
• (upgrade_app.sql)
http://www.oracle-base.com
Summary
• Application upgrades with no downtime.
• Run multiple versions of apps simultaneously.
• Gradual ramp-up.
• Not just a PL/SQL feature. Java
apps use tables too.
http://www.oracle-base.com
The End…
• Download slides at:
http://www.oracle-base.com/workshops
• Article:
http://www.oracle-base.com/articles/11g/EditionBasedRedefinition_11gR2.php
http://www.oracle-base.com
Download