Partitionierung von Tabellen und Indexen Siehe dazu die separate Dokumentation. Der Oracle-7 INIT.ORA Parameter DB_WRITERS = n existiert nicht mehr. Neu existiert die Möglichkeit, sogenannte Slave Prozesse zu definieren für DBWR, LGWR und ARCH. Dies wird vorallem für stark I/O orientierte Systeme angewendet. Man beachte, dass der Checkpoint-Prozess, welcher unter Oracle-7 mit dem INIT.ORA Parameter CHECKPOINT_PROCESS aktiviert wurde, unter Oracle-8 immer aktiv ist. Der Parameter CHECKPOINT_PROCESS existiert also nicht mehr. LGWR_IO_SLAVES = n (0 - n) Offline-Redologfiles duplizieren Neu ist es möglich, offline Redologfiles zu duplizieren, eine ausführliche Beschreibung und Anleitung zur Implementation finden Sie: hier. Der Parameter MAXDATAFILES beim CREATE DATABASE gab unter Oracle-7 öfters Probleme. Wollte man nämlich nachträglich die Anzahl DB-Files mit dem INIT.ORA Parameter DB_FILES vergrössern war dies nicht möglich, da MAXDATAFILES kleiner gesetzt war. Unter Oracle-8 ist dieses Problem behoben, da das Controlfile nun dynamisch wachsen kann. Das Maximum an DB-Files kann nun also mit dem INIT.ORA Parameter DB_FILES übersteuert werden. Man beachte, dass die Parameter MAXLOGMEMBERS und MAXLOGFILES nicht übersteuert werden können mit einem INIT.ORA Parameter. Man sollte diese also beim CREATE DATABASE genügend gross spezifizieren (mindestens 5). Dynamische Grösse der Controlfiles Die Oracle-8 Controlfiles beinhalten mehr Informationen, insbesondere wird das Repository des Recovery-Managers (RMAN) im Controlfile gespeichert um bei einem Verlust des RMAN-Repository die wichtigen Backup-Informationen weiterhin zur Verfügung zu haben. Wie lange zyklisch überschriebene Informationen im Controlfile verfügbar bleiben kann mit dem INIT.ORA Parameter CONTROL_FILE_RECORD_KEEP_TIME = n (0 - n Tage, Default = 7 Tage) gesteuert werden. Die Einträge im Controlfile findet man in V$CONTROLFILE_RECORD_SECTION. Unter Oracle-8 kann der DB-Buffer Pool in drei Bereiche unterteilt werden. Objekte können diesen Bereichen zugeteilt werden.
Die Grösse der Buffer wird im INIT.ORA festgelegt. Beispiel: 7000-1500-1000 = 4500 Default, 1500 Keep, 1000 Recycle. db_block_buffers = 7000 Large Pool für MTS-Session Data und RMAN Unter Oracle-7 gab es oft ORA-4031 Shared-Pool Probleme. Unterschiedlich grosse Objekte, vorallem grosse PL/SQL Packages führten zu Flushing-Problemen im Shared Pool. Wird zudem Multithreaded Server MTS eingesetzt, dessen Session Daten ebenfalls im Shared Pool sind verstärkt sich das Problem noch mehr. Unter Oracle-8 können die MTS-Session Daten in einen eigenen Pool, den Large-Pool ausgelagert werden. Ist ein solcher Pool definiert wird er automatisch für MTS und die I/O-Buffer für den RMAN (Recovery-Manager) verwendet. Konfiguration: large_pool_size = n bytes/K/M (0K -
2GB) Durch Setzen des neuen Storage Parameters MINIMUM EXTENT werden die Tablespaces weniger fragmentiert. Jedes kleinere Extent wird mindestens auf diesen Wert gerundet. In der Regel wird 64K definiert. NOLOGGING (Kein Redo schreiben) Unter Oracle-7 hiess der Parameter UNRECOVERABLE. Unter Oracle-8 heisst der Parameter neu NOLOGGING, er wurde auf weitere Anwendungen ausgeweitet (Tablespace, Table, Partition, Index)
Neue Datentypen (BLOB, CLOB, BFILE) Folgende neuen Datentypen stehen zur Verfügung, BLOB, CLOB und BFILE. Ebenso steht ein Package DBMS_LOB zur Verfügung um das Handling mit diesen Daten zu erleichtern.
LOB Datentypen haben immer zwei Komponenten:
Erstellen eines BLOB / CLOB: CREATE TABLE book ( Erstellen eines BFILEs: CREATE TABLE word_processing_docs ( CREATE OR REPLACE DIRECTORY wp_docs GRANT READ ON DIRECTORY wp_docs TO ppb; Es wird erst beim Zugriff auf das Directory mittels des Package DBMS_LOB geprüft ob das Directory vorhanden ist. BFILES können nur gelesen werden, nicht geschrieben, sie werden durch Betriebssystem Tools erstellt. Index only Tables (Index Organized Tables) IOT's Für Tabellen bei denen die meisten Attribute im Index sind (zB Intersection Tabellen) bieten IOT's Performance Vorteile. Einzelne, weniger häufig benutzte Attribute können zudem in einem Overflow Tabespace gespeichert werden. IOT's brauchen zwingend einen Primary Key, da sie keine ROWID mehr besitzen. Sehr hohe Performance bei ORDER BY auf dem Primary Key. Zur Zeit können IOT's nicht repliziert werden. Es existiert das Package DBMS_IOT um beispielsweise ein ANALYZE auf IOT' durchzuführen. CREATE TABLE my_intersection ( Die Bytes der Attribute werden umgedreht, was zur Folge hat, dass Hotspots bei einem ständigen UPDATE an der gleichen Stelle im Index verhindert werden können. CREATE INDEX deptno_ename ON emp (deptno, ename) REVERSE; Inline Views sind zwar keine Neuerung von Oracle-8, sie existieren bereits seit Oracle-7.2. Auf diese Weise können Views "on the Fly" angelegt werden. Damit können auch User, welche keine Views anlegen können, Views benutzen. Ein einfaches Beispiel: Die Anzahl Rows von emp und dept sollen auf einer Zeile dargestellt werden; anhand zweier inline Views die in der FROM Klausel definiert werden, kann dies erreicht werden. SELECT e.emp_count, d.dept_count Oracle 8 bietet die Möglichkeit, dass DML-Befehle einen Return-Wert liefern. Dies ist aus der Sicht des Applikationsentwicklers besonders interessant. Zuerst denkt man sofort an das INSERT Problem, welches nun elegant gelöst werden kann. Unter Oracle-7 musste man zuerst ein INSERT machen, die Applikation liest dann den eingefügten Wert wieder mit einem SELECT, damit die Row gesperrt werden kann in der Maske. Mit Oracle-8 macht man ein INSERT und verlangt die ROWID als Return-Wert. Jeder Wert kann zurückverlangt werden, sinnvoll sind natürlich Werte, die der Applikation nicht bekannt sind weil sie durch Orcale generiert werden. set serveroutput on; Oracle-7 liest einen Index immer Block für Block, dadurch kann kein Multiblock-Read gemacht werden, da die physische Speicherung nicht der logischen Sortierung entsprechen muss. Oracle-8 kann nun einen Full Table Scan durch einen Fast Full Index Scan ersetzen. Dies unter den folgenden Bedingungen
Die Aktivierung erfolgt für den COST based Optimizer mittels Hint /*+ Index_FFS (table index) */. Insbesondere sind SELECT COUNT(*) Abfragen durch den FFS schneller. SELECT /*+ Index_FFS(grosse_tabelle my_index) */ COUNT(*) Die Oracle-8 ROWID unterscheidet sich wesentlich von der Oracle-7 ROWID. Sie hat zum Ziel Partitionen und Objektrelationale Objekte zu unterstützen. Die Änderung ist selbstverständlich vollständig transparent für bestehende Applikationen. select rowid,ename from emp where deptno = 10; Aufbau:
Um das Handling mit der neuen ROWID zu erleichern stellt Oracle das Package DBMS_ROWID zur Verfügung mit den Functionen: ROWID_CREATE, ROWID_INFO, ROWID_TO_RESTRICTED, ROWID_TO_EXTENDED, ROWID_VERIFY. Nun kann (endlich) auch ein Index umbenennt werden ! alter index PRICE_INDEX rename to PRICE_INDEX1; Mittelfristig will Oracle das altbekannte CONNECT INTERNAL als hochprivilegierter DBA unterbinden. Folgender Ausschnitt stammt aus dem Oracle8i README: CONNECT INTERNAL DESUPPORT Mit dem neuen INIT.ORA Parameter O7_DICTIONARY_ACCESSIBILITY = TRUE kann bereits jetzt ein Passwortfile für den Account SYS erzwungen werden. Mit der Oracle Rolle SYSDBA kann nun jeder beliebige Oracle User "SYS" Rechte bekommen, er muss aber im Passwortfile aufgenommen werden, was durch das Erteilen der SYSDBA Rolle automtisch erfolgt. Alle SYSDBA User haben dann also das gleiche Passwort für den "SYS" Account. Erstellen des "SYS" Passwortfiles: NT: orapwd80 file=D:\Orant\Database\pwdDOR1.ora
password=manager entries=5 Vergeben der SYSDBA oder SYSOPER Rolle an "normalen" Oracle User: GRANT SYSDBA to scott; Wenn ein "SYS" Passwortfile auf einer DB vorhanden ist, so kann man von Remote aus, via SQL*Net diese DB als SYS administrieren sofern der INIT.ORA Parameter REMOTE_LOGIN_PASSWORD_FILE = EXCLUSIVE gesetzt wird. Das folgende Beispiel verdeutlicht dies (Beachte auch die wichtige View v$pwfile_users) SVRMGR> connect sys/manager@RAB1 as sysdba; Oracle Passwort Verification mit anpassbarer Routine Siehe dazu den eigenen Artikel: Oracle Passwort Verification mit anpassbarer Routine Unter Oracle-7 sind Constraintverletzungen nur innerhalb eines Statments möglich, dies ist oft etwas einschränkend, vorallem bei einem CASCADE UPDATE. Unter Oracle-8 können Constraints nun so definiert werden, dass diese erst beim COMMIT überprüft werden, man nennt dies deferred. Jedes Constraint bestimmt beim Anlegen ob es immediate (Defualt) oder deferred ist. Ist es deferred, so kann später mittels SET CONSTRAINT das Constraint auf deferred oder immediate geändert werden. Anlegen eines deferred / immediate Constraints Ein Constraint kann logischerweise nicht den Zustand NOT DEFERRABLE INITIALLY DEFERRED annehmen. alter table emp alter table emp alter table emp alter table emp ERROR at line 3: Cascade Update als Beispiel
Mit SET CONSTRAINT kann also später ein beliebiges oder alle Constraints auf deferred oder immediate gesetzt werden, hier das Syntax Diagramm. ALTER TABLE MODIFY CONSTRAINT (Oracle 8.1.5) With Oracle 8i it's possible to modify the state of an existing constraint. For example change from INITIALLY DEFERRED to INITIALLY IMMEDIATE. ALTER TABLE emp MODIFY CONSTRAINT emp_foreign_key INITIALLY IMMEDIATE; ON DELETE SET NULL (Oracle 8.1.5) determines how Oracle automatically maintains referential integrity if you remove a referenced primary or unique key value. If you omit this clause, Oracle does not allow you to delete referenced key values in the parent table that have dependent rows in the child table
alter table emp Deferred PRIMARY KEYs und UNIQUE CONSTRAINTs Unter Oracle-7 und 8 wird bekanntlich beim Anlegen eines PRIMARY KEY und UNIQUE CONSTRAINT automatisch ein UNIQUE INDEX angelegt. So weit so gut, beim Disablen des PRIMARY KEY / UNIQUE CONSTRAINT wird der Index von Oracle ebenfalls automatisch gedroppt. Bei sehr grossen Tabellen ist dies ein Problem, da es stundenlang dauern kann bis der PRIMARY KEY / UNIQUE CONSTRAINT wieder aufgebaut ist. Oracle-8 bietet nun neu die Möglichkeit auch PRIMARY KEYs / UNIQUE CONSTRAINTs als DEFERRED anzulegen. Der grosse Vorteil besteht darin, das kein UNIQUE INDEX angelegt wird und dass dieser beim Disablen nicht gedroppt wird. Man kann auch bei sehr grossen Tabellen diesen PRIMARY KEY / UNIQUE CONSTRAINT sehr rasch wieder aktivieren, da der Index bereits besteht. Nachfolgend ein Beispiel:
Fazit Oracle-8 erstellt bei DEFERRED Primary Keys und Unique Indexen ein NON Unique Index, der bei einem DROP/DISABLE des Constraints nicht gedroppt wird. Ein nachfolgendes Enablen oder Neuanlegen des Constraints erfolgt dadurch viel schneller, da der Index nicht erneut aufgebaut werden muss. Oracle garantiert die Uniqness also auch mit NON Unique Indexen ! Enforced (Enable Novalidate) Constraints Oracle-7 Constraints sind entweder enabled oder disabled:
Dieser Sachverhalt hat einen grossen Nachteil. Befinden sich in einer (sehr grossen) Tabelle nur einige wenige Rows die das Constraint verletzen, so kann das Constraint nicht rasch wieder enabled werden. Falsche Rows können also weiterhin eingefügt werden. Man möchte aber oft, das neue Rows geprüft werden, bestehende aber (noch) falsch sein dürfen. Diese "falschen" Rows werden dann in einer ruhigen Minute korrigiert und dann wird das Constraint wieder enabled. Genau dies ermöglicht das neue Constraint unter Oracle-8: ENABLE NOVALIDATE.
Beispiel Datenload ALTER TABLE emp DISABLE CONSTRAINT check_salary; Datenload durchführen ALTER TABLE emp ENABLE NOVALIDATE CONSTRAINT check_salary; Ab diesem Zeitpunkt werden neue Daten sofort wieder geprüft. Disable Validate (Oracle 8.1.5)
ALTER TABLE emp DISABLE VALIDATE CONSTRAINT emp_primary_key CASCADE; Primary Key Index ist gelöscht insert into emp (empno,deptno) values (7369,10); Datenload durchführen ALTER TABLE emp ENABLE NOVALIDATE CONSTRAINT emp_primary_key; Ab diesem Zeitpunkt werden neue Daten sofort wieder geprüft. Aufruf einer Betriebssystem-Procedure aus PL/SQL auf lokalem oder remote Host Siehe dazu die separate Dokumentation. Oracle-7 konnte nur SELECTs parallelisieren, in Oracle-8 können zusätzlich auch Table-Partitionen von parallelen SELECTs profitieren. Neu kann Oracle-8 auch DML-Kommandos parallel ausführen. INIT.ORA Parameter welche gesetzt werden müssen für die Parallel Query Option
Beispiele-1: Auf Tabellenstufe, Overhead ist relativ gross, deshalb nur auf einem DSS so ausführen ALTER TABLE emp PARALLEL DEGREE (5); SELECT durchführen ALTER TABLE emp NOPARALLEL; Beispiel-2: Gezielt für ein bestimmtes SELECT Statement (empfohlene Methode) SELECT /*+ PARALLEL (emp,5) */ * Parallele DMLs (INSERT, DELETE, UPDATE) Unter Oracle-8 ist es nun möglich auch parallele DMLs durchzuführen. Dabei gibt es eine Reihe von Randbedingungen zu berücksichtigen, ansonsten wird das DML-Kommando nicht parallel ausgeführt.
Einschränkungen, Regeln für Parallele DMLs
Der Ablauf eines parallelen DMLs erfolgt in folgenden fix vorgegebenen Schritten:
Bulk-Operationen mit dem Oracle-8 DBMS_SQL Package Nebst vielen anderen Verbesserungen betreffend PL/SQL in Oracle-8 wie beispielsweise PRAGMAS (Packages auch in User Defined Functions verwenden), DEBUG-Package (DBMS_DEBUG), weitere Packages (DBMS_IOT, DBMS_RANDOM, etc) sind sicher die Bulk-Operationen mit dem Package DBMS_SQL von besonderer Bedeutung. Anstelle von LOOP-Programmierung wird der DBMS_SQL.Varchar2_Table Datentyp verwendet um (viele) Datenwerte darin abzuspeichern und dann mit einer Operation zu verarbeiten. Im folgenden Beispiel wird ein UPDATE mit allen Werten die der Bind-Variablen ThisEname zugeordnet sind durchgeführt. Mittels DBMS_SQL.Bind_Array, werden die Werte in vEmps mit ThisEname gekoppelt. DECLARE Object Types ermöglichen die Definition von eigenen Datentypen. Nach der Definition können diese neue Datentypen in normalen relationalen Tabellen oder in Object Tabellen benutzt werden. Man unterscheidet drei Arten von Object Types:
Object Types enthalten normalerweise auch Memberfunktionen, sie weisen eine Ähnlichkeit mit dem Package Konzept auf. Nachfolgend ein Beispiel eines Object Types mit einer Memberfunktion. Relationale und Object Tabelle ohne Memberfunktion -- CREATE TYPE paycheck_type AS OBJECT
( -- DROP TABLE paycheck_tab; -- Daten einfügen To insert data into an object column, the user must refer to the object type that defines the column. This reference is called a constructor. The constructor is used for insertion of data into object tables as well. The use of insert statements on a relational and object table with use of constructors is listed in the following code block INSERT INTO paycheck_tab -- Zugriff auf Element des Object Types SELECT p.emp_check.check_number -- DROP TABLE paycheck_obj; -- Daten einfügen INSERT INTO paycheck_obj -- Zugriff auf Element des Object Types SELECT check_number FROM paycheck_obj Object Tabelle mit Memberfunktion The other component of an object is the set of methods that can be used to operate on it. Each method is a member function that contains input parameters and output values in the same way that procedures and functions have. In fact, the methods of an object are procedures and functions developed to operate specifically on the attributes defined as part of the object type. Unlike in Oracle7, however, where tables and procedures are designed, stored, and used separately, member functions and procedures are defined directly within the object type -- DROP TYPE payroll_type; Though not necessary, the developer can identify whether the type methods will modify database tables or not using the pragma restrict_references clause. The developer must identify the procedure or function that restrict_references refers to and the restrictions on the references of the procedure or function. In this case, wnds was used, which stands for "write no database state." Once the type is defined both with attributes and methods, then the developer can create the code body for the procedures, defined separately in the type body. -- Memberfunktion codieren DROP TYPE BODY payroll_type; -- Object Tabelle erstellen DROP TABLE payroll_obj; -- Object Tabelle mit Daten füllen INSERT INTO payroll_obj -- Memberfunktion benutzen The applications can then refer to the methods for an object type using the same dot notation used to reference the attributes. The following PL/SQL statement demonstrates the use of a method from the PAYROLL type to update the data in an attribute. The value( ) operation in the following PL/SQL block is designed to return all attribute values stored in an object so that those values may be placed into a variable declared to be the same type as the object table. set serveroutput on; So far, all object types discussed have been simple types containing attributes declared with all scalar datatypes. Oracle8 also allows the definition of two new classes of datatypes, called reference types and collection types. These two datatypes are designed to allow object types to have referential integrity on a one-to-one and one-to-many level. However, reference and collection types extend the concept of referential integrity to a new level. In relational databases, foreign keys provide referential integrity between columns of the same datatype containing the same data. Reference datatypes are used to provide a one-to-one relationship between a row of an object table or object type column of a relational table and another object table or object type column of a relational table. Collection types are designed to store a grouping or collection of like-structured elements, to provide a one-to-many relationship in the same situation. This section will explain reference and collection types in further detail and provide syntax and examples for the creation of each. -- Create Object Type DROP TYPE paycheck_type; -- Create Oject table DROP TABLE paycheck_obj; -- Daten einfüllen INSERT INTO paycheck_obj -- Reference Typ erstellen mit Referenz auf paycheck_type Developers can use the reference type to define a "foreign key relationship" between two objects. The reference type can reference all columns in the table for a particular row—it is a pointer to a particular object within an object table. The definition of a reference type should include a definition of scope—the table to which the reference type will refer. A special keyword called REF should be used for defining the reference type. The definition of the reference type is demonstrated with the following code block: CREATE TYPE debit_type AS OBJECT
( -- Create Object Table mit Verwendung der Referenz CREATE TABLE debit_obj -- Daten einfüllen INSERT INTO debit_obj -- Daten abfragen (Achtung DEREF benutzen, sonst wird Pointer zurückgegeben) Selecting the reference type itself using the ref( ) operation produces not the data in the object, but the pointer used to refer to the object. The user can use the pointer value created as the reference type and execute a special function called deref( ) to produce the actual values from the pointer to those values. SELECT acc_wd_num,DEREF(d.debit) Objects can be collected into types. A collection is a gathering of like-defined elements. The two types of collection types available in Oracle8 are variable-length arrays with the VARRAY type and nested tables with the TABLE type. Focus first on VARRAYs. A VARRAY can be thought of as a "list" of objects, defined to have two special attributes in addition to those attributes contained in each of the objects contained therein, called a count for the number of elements in the VARRAY, and the limit for the maximum number of elements that can appear in a VARRAY. The limit is user defined, and if the number of elements stored in the VARRAY exceeds 4K, Oracle will store the data in the VARRAY in overflow. If the amount of data stored in the VARRAY is less than 4K, the data will be stored with the rest of the information for the object. Constraints and default values may not be created for elements in a VARRAY, and once created, the user only refers to an individual element in a VARRAY with PL/SQL (although SQL can be used to access the entire VARRAY). DROP TABLE staff; -- Object Type erstellen CREATE TYPE phone_type AS OBJECT ( -- VARRAY erstellen CREATE TYPE phone_array AS VARRAY(10) -- Object Type mit VARARY erstellen CREATE TYPE staff_type AS OBJECT ( -- Object Table erstellen welche den VARARY benutzt CREATE TABLE staff -- Daten einfüllen INSERT INTO staff VALUES INSERT INTO staff VALUES INSERT INTO staff VALUES INSERT INTO staff VALUES INSERT INTO staff VALUES Collection Types (Nested Tables) The other collection type is the nested table. A nested table is exactly that—a table within a table. The nested table architecture is exceptionally suited for applications that in Oracle7 have parent/child tables with referential integrity. -- CREATE TYPE phone_type AS OBJECT ( -- Object Type erstellen CREATE TYPE phone_tab AS TABLE -- Nested Table erstellen CREATE TABLE staff ( -- Daten einfüllen INSERT INTO staff VALUES INSERT INTO staff VALUES INSERT INTO staff VALUES INSERT INTO staff VALUES INSERT INTO staff VALUES Nested tables and variable-length arrays share many similarities, but also have many differences. The differences between the nested table and a variable-length array can be identified as follows. The VARRAY works well for storing like units of information. These units ideally have few attributes, all of which may be populated and to which a specific order can be placed. Consider the example given of employee annual paycheck information. Each element in the array corresponds directly to the pay week for the year, in which order is important. With the presence of a limit attribute, the VARRAY also stores only a limited number of elements, while the nested table may store an unlimited number of objects, just as the base object table can. Another key difference between VARRAY and nested table data is indexing. An object column composed of VARRAY types cannot be indexed, while a nested table can be indexed. Storage for VARRAY data is also integrated with the storage segments of the data in the object table, up to a certain size. Data in nested tables is stored in another segment. Unterschiede VARRAYs und Nested Tables
Object Views und Instead of Trigger The final area of object relational databases to be discussed is the process of evolving a relational application into an object application. Although there is no pressing need to migrate a relational application into an object one, the organization may want to do so for several reasons, including the fact that object applications have more features for advanced data definition and usage. To ease the transition, object views can be created to allow object applications to access relational database objects, allowing for coexistence of both types of applications using the same base data. Object views are similar to Oracle7 views in that both views provide a method for simplifying the underlying complexity of data. In addition, object views allow the user to apply object concepts to relational data. Object views even allow for advanced update of data in relational tables via object views using instead of triggers. Creation of object views begins with the creation of relational database objects like tables. -- -- Relationale EMPLOYEE Tabelle erstellen CREATE TABLE employee ( -- Relationale ADDRESS Tabelle erstellen CREATE TABLE address ( -- Object Type 1 erstellen CREATE TYPE address_type AS OBJECT ( -- Object Type 2 erstellen CREATE TYPE employee_type AS OBJECT ( -- Object View erstellen basierend auf den Object Types CREATE OR REPLACE VIEW employee_obj_view OF employee_type -- Instead of Trigger zum Daten einfüllen CREATE OR REPLACE TRIGGER empl_trigger INSTEAD OF -- Daten einfüllen INSERT INTO employee_obj_view VALUES Advanced Queuing mit DBMS_QUEUE Unter Oracle-7 erfolgte die Interprocess Kommunikation ausschliesslich über Pipes (DBMS_PIPE) und Alerts (DBMS_ALERT). Der wesentlich Nachteil von "Oracle Pipes und Alerts" ist, dass sie nicht persistent sind, also nach einem Shutdown / Startup nicht mehr vorhanden sind. Unter Oracle-8 wird eine wesentlich komplexere Implementation, basierend auf den Object Relationalen Erweiterungen angeboten -- das Advanced Queuing.
Damit Advanced Queuing funktioniert muss der INIT.ORA Parameter AQ_TM_PROCESSES = 1 gesetzt werden. Die Role AQ_USER_ROLE dient dazu EXECUTE Rechte auf dem DBMS_AQ Package zu vergeben, während die Role AQ_ADMINISTRAOR_ROLE dazu dient EXECUTE Rechte auf dem Package DBMS_AQADM zu definieren RMAN ist ein neues Tool mit Oracle-8 für alle Backup und Recovery Aufgaben. Es beinhaltet sowohl ein GUI als auch eine Kommandosprache, um Backups weitgehend zu automatisieren. Folgende Merkmale sind von Bedeutung
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Beispiel Tablespace für Recovery Catalog erstellen CREATE TABLESPACE rcvcat RMAN Owner erstellen DROP USER rman CASCADE; GRANT RECOVERY_CATALOG_OWNER TO rman; Recovery Catalog generieren SQL> @D:\Orant\rdbms80\admin\catrman.sql Datenbank DOR1 auf Host Dorint registrieren rman80 target "sys/manager@DOR1" rcvcat "rman/rman_1@ARK1" RMAN> register database; RMAN-03022: compiling command: list Tablespace Save mit Commandfile: save_ts.rcv connect sys/manager@DOR1 ARKUM:zahn> rman80 cmdfile=save_ts.rcv RMAN-06005: connected to target database: DOR1 Datenfile Save mit Commandfile: save_df.rcv connect target "sys/manager@DOR1" ARKUM:zahn> rman80 cmdfile=save_df.rcv RMAN-06005: connected to target database: DOR1 Image Copy von Datenfiles erstellen: save_df.rcv connect target "sys/manager@DOR1" RMAN-06005: connected to target database: DOR1 |