<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Oracle DBA's Weblog &#187; HowTo</title>
	<atom:link href="http://oracleadmin.wordpress.com/category/howto/feed/" rel="self" type="application/rss+xml" />
	<link>http://oracleadmin.wordpress.com</link>
	<description>Der Weblog für Oracle-DBAs</description>
	<lastBuildDate>Thu, 05 Nov 2009 13:42:20 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='oracleadmin.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/fa746bb6bdfa32949221e8bb9fbca3b1?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Oracle DBA's Weblog &#187; HowTo</title>
		<link>http://oracleadmin.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://oracleadmin.wordpress.com/osd.xml" title="Oracle DBA&#8217;s Weblog" />
		<item>
		<title>Datenbank auf anderen Server migrieren</title>
		<link>http://oracleadmin.wordpress.com/2009/11/05/datenbank-auf-anderen-server-migrieren/</link>
		<comments>http://oracleadmin.wordpress.com/2009/11/05/datenbank-auf-anderen-server-migrieren/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 13:24:27 +0000</pubDate>
		<dc:creator>Kay Liesenfeld</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Migration]]></category>

		<guid isPermaLink="false">http://oracleadmin.wordpress.com/?p=142</guid>
		<description><![CDATA[Gelegentlich kann es vorkommen, dass eine Datenbank &#8222;so wie sie ist&#8220; auf einen anderen Server verschoben werden soll. Kann man dabei eine Downtime in Kauf nehmen, stellt sich die Sache als relativ simpel dar:
Auf dem Zielsystem muss exakt dieselbe Verzeichnisstruktur wie auf dem Quellsystem geschaffen werden; insbesondere die Dump-Verzeichnisse (bdump, udump, etc.), die Control-Files, die [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oracleadmin.wordpress.com&blog=3914207&post=142&subd=oracleadmin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Gelegentlich kann es vorkommen, dass eine Datenbank &#8222;so wie sie ist&#8220; auf einen anderen Server verschoben werden soll. Kann man dabei eine Downtime in Kauf nehmen, stellt sich die Sache als relativ simpel dar:</p>
<p>Auf dem Zielsystem muss exakt dieselbe Verzeichnisstruktur wie auf dem Quellsystem geschaffen werden; insbesondere die Dump-Verzeichnisse (bdump, udump, etc.), die Control-Files, die Redo-Logs und natürlich die Datenfiles müssen an dieselbe Stelle verschoben werden. Nicht zu vergessen das SPFILE (sofern vorhanden), die INIT.ORA und das Password-File; alle drei Dateien befinden sich überlicherweise unter $ORACLE_HOME/dbs bzw. /database.</p>
<p>Auf Windows-Systemen ist ein weiterer Schritt erforderlich: hier muss der Dienst neu angelegt werden, der die Instanz erzeugt. Dies geschieht mit dem Oracle-Tool ORADIM.</p>
<pre style="padding-left:30px;">oradim -new -sid orcl</pre>
<p>&#8222;ORCL&#8220; ist hierbei die zu vergebende SID. Im Dienstemanager von Windows taucht dann sofort der Dienst &#8222;OracleServiceORCL&#8220; auf. Nun stellt man diesen ggf. noch auf &#8222;Automatisch starten&#8220; und schon kann man die verschobene Datenbank hochfahren.</p>
<p>Im Netzwerk bzw. auf den Clients muss dann noch die Net8-Konfiguration geändert werden, damit die Clients auch wissen, wo sich die neue Datenbank befindet.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oracleadmin.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oracleadmin.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oracleadmin.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oracleadmin.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oracleadmin.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oracleadmin.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oracleadmin.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oracleadmin.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oracleadmin.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oracleadmin.wordpress.com/142/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oracleadmin.wordpress.com&blog=3914207&post=142&subd=oracleadmin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://oracleadmin.wordpress.com/2009/11/05/datenbank-auf-anderen-server-migrieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">kliesenfeld</media:title>
		</media:content>
	</item>
		<item>
		<title>User-DDL extrahieren</title>
		<link>http://oracleadmin.wordpress.com/2009/11/03/user-dll-extrahieren/</link>
		<comments>http://oracleadmin.wordpress.com/2009/11/03/user-dll-extrahieren/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 14:47:26 +0000</pubDate>
		<dc:creator>Kay Liesenfeld</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Vermischtes]]></category>

		<guid isPermaLink="false">http://oracleadmin.wordpress.com/?p=129</guid>
		<description><![CDATA[Mit den folgenden Abfragen kann man ganz elegant DDL-Scripte eines oder mehrerer User aus der Datenbank extrahieren:
SQL&#62; select dbms_metadata.get_ddl('USER','TEST') from dual;
DBMS_METADATA.GET_DDL('USER','TEST')
--------------------------------------------------------------------------------
   CREATE USER "TEST" IDENTIFIED BY VALUES 'S:BB9F382BFDA8AF92EE4AFC033609CAB510
1E5ED198D7CB942F4E9ABDD038;8CF86D821FB0249F'
      DEFAULT TABLESPACE "USERS"
      TEMPORARY TABLESPACE "TEMP"

SQL&#62; select dbms_metadata.get_granted_ddl('ROLE_GRANT','TEST') from dual;
DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT','TEST')
--------------------------------------------------------------------------------
   GRANT "CONNECT" TO "TEST"
   GRANT "RESOURCE" TO "TEST"

SQL&#62; select dbms_metadata.get_granted_ddl('SYSTEM_GRANT','TEST') from dual;
DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT','TEST')
--------------------------------------------------------------------------------
  GRANT UNLIMITED TABLESPACE TO "TEST"
SQL&#62; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oracleadmin.wordpress.com&blog=3914207&post=129&subd=oracleadmin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Mit den folgenden Abfragen kann man ganz elegant DDL-Scripte eines oder mehrerer User aus der Datenbank extrahieren:</p>
<pre style="padding-left:30px;">SQL&gt; select dbms_metadata.get_ddl('USER','TEST') from dual;
DBMS_METADATA.GET_DDL('USER','TEST')
--------------------------------------------------------------------------------
   CREATE USER "TEST" IDENTIFIED BY VALUES 'S:BB9F382BFDA8AF92EE4AFC033609CAB510
1E5ED198D7CB942F4E9ABDD038;8CF86D821FB0249F'
      DEFAULT TABLESPACE "USERS"
      TEMPORARY TABLESPACE "TEMP"

SQL&gt; select dbms_metadata.get_granted_ddl('ROLE_GRANT','TEST') from dual;
DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT','TEST')
--------------------------------------------------------------------------------
   GRANT "CONNECT" TO "TEST"
   GRANT "RESOURCE" TO "TEST"

SQL&gt; select dbms_metadata.get_granted_ddl('SYSTEM_GRANT','TEST') from dual;
DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT','TEST')
--------------------------------------------------------------------------------
  GRANT UNLIMITED TABLESPACE TO "TEST"</pre>
<pre style="padding-left:30px;">SQL&gt; select dbms_metadata.get_granted_ddl( 'OBJECT_GRANT', 'TEST') from dual;
DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT','TEST')
--------------------------------------------------------------------------------
  GRANT SELECT ON "SYS"."SYS_DUMMY" TO "TEST"</pre>
<p>Setzt man alle vier Abfragen untereinander, hat man ein funktionsfähiges Script, um einen bestehenden User zu &#8222;klonen&#8220;:</p>
<pre style="padding-left:30px;">select dbms_metadata.get_ddl('USER','TEST') from dual
union
select dbms_metadata.get_granted_ddl('ROLE_GRANT','TEST') from dual
union
select dbms_metadata.get_granted_ddl('SYSTEM_GRANT','TEST') from dual
union
select dbms_metadata.get_granted_ddl( 'OBJECT_GRANT', 'TEST') from dual;</pre>
<p>Der Nachteil dieser Vorgehensweise ist die hässliche Eigenart von Oracle, dass, wenn ein Aufruf von GET_GRANTED_DDL keinen Wert zurückliefert (wenn z.B. keine Rechte vergeben sind), folgende Fehlermeldung erscheint:</p>
<pre style="padding-left:30px;">SQL&gt;  select dbms_metadata.get_granted_ddl( 'OBJECT_GRANT', 'SCOTT' ) from dual;
ERROR:
ORA-31608: Angegebenes Objekt vom Typ OBJECT_GRANT nicht gefunden
ORA-06512: in "SYS.DBMS_SYS_ERROR", Zeile 86
ORA-06512: in "SYS.DBMS_METADATA", Zeile 3915
ORA-06512: in "SYS.DBMS_METADATA", Zeile 5826
ORA-06512: in Zeile 1</pre>
<pre style="padding-left:30px;">Es wurden keine Zeilen ausgewahlt</pre>
<p>Wie man das o.g. Script so ergänzen kann, dass diese Meldung vorher abgefangen werden, erfährt man bspw. <a href="http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:494205100346718343" target="_blank">hier</a> und <a href="http://www.oraclealchemist.com/news/trick-1-copying-users-the-right-way/" target="_blank">hier</a>.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oracleadmin.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oracleadmin.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oracleadmin.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oracleadmin.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oracleadmin.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oracleadmin.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oracleadmin.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oracleadmin.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oracleadmin.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oracleadmin.wordpress.com/129/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oracleadmin.wordpress.com&blog=3914207&post=129&subd=oracleadmin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://oracleadmin.wordpress.com/2009/11/03/user-dll-extrahieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">kliesenfeld</media:title>
		</media:content>
	</item>
		<item>
		<title>Wo ist der CONSISTENT-Parameter bei Data Pump?</title>
		<link>http://oracleadmin.wordpress.com/2009/10/26/wo-ist-der-consistent-parameter-bei-data-pump/</link>
		<comments>http://oracleadmin.wordpress.com/2009/10/26/wo-ist-der-consistent-parameter-bei-data-pump/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 12:16:45 +0000</pubDate>
		<dc:creator>Kay Liesenfeld</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://oracleadmin.wordpress.com/?p=119</guid>
		<description><![CDATA[Beim Einsatz von Data Pump ab 10g mag sich mancher wundern, wo der CONSISTENT-Parameter geblieben ist. Dieser Parameter stellte beim EXP-Tool die Konsistenz der Daten während des gesamten Exports sicher &#8212; kein völlig unwichtiges Feature also.
Bei Data Pump (EXPDP / IMPDP) übernehmen diese Funktion die Parameter FLASHBACK_SCN und FLASHBACK_TIME. Diese Parameter schließen sich bei Benutzung [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oracleadmin.wordpress.com&blog=3914207&post=119&subd=oracleadmin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Beim Einsatz von Data Pump ab 10g mag sich mancher wundern, wo der CONSISTENT-Parameter geblieben ist. Dieser Parameter stellte beim EXP-Tool die Konsistenz der Daten während des gesamten Exports sicher &#8212; kein völlig unwichtiges Feature also.</p>
<p>Bei Data Pump (EXPDP / IMPDP) übernehmen diese Funktion die Parameter FLASHBACK_SCN und FLASHBACK_TIME. Diese Parameter schließen sich bei Benutzung gegenseitig aus. Der Einsatz von FLASHBACK_SCN sichert die Konsistenz eines Exports zu einer bestimmten SCN, und FLASHBACK_TIME zu einem bestimmten Zeitpunkt. Üblicherweise würde man hier SYSDATE bevorzugen.</p>
<p>Das Ganze liest sich dann wie folgt:</p>
<pre style="padding-left:30px;">#&gt; expdp system/passwd directory=flsh dumpfile=user001_2.dmp
  logfile=user001_2.log schemas=usr001
  flashback_time="TO_TIMESTAMP (TO_CHAR (SYSDATE, 'YYYY-MM-DD HH24:MI:SS'),
    'YYYY-MM-DD HH24:MI:SS')"</pre>
<p>Hierzu wird übrigens das Feature &#8222;Flashback Query&#8220; herangezogen, die FLASHBACK AREA muss hierfür nicht definiert sein. &#8222;Flashback Query&#8220; bedient sich aus dem UNDO-Tablespace.</p>
<p>Interessant hierzu ist der Metalink Artikel <em>377218.1: Expdp Message &#8222;FLASHBACK automatically enabled&#8220; Does Not Guarantee Export Consistency</em>. Demnach wirft EXPDP die Meldung &#8222;FLASHBACK automatically enabled&#8220; aus, was aber nicht automatisch heißt, dass der gerade gestartete Export konsistent ist. Um dies zu erreichen, muß immer mit den Parametern FLASHBACK_SCN oder FLASHBACK_TIME gearbeitet werden.</p>
<p>Bei EXP/IMP kannte nur EXP den CONSISTENT-Parameter, bei Datapump sind es sowohl EXPDP wie auch IMPDP &#8212; schließlich kann IMPDP via Network-Link auch &#8222;exportieren&#8220;.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oracleadmin.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oracleadmin.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oracleadmin.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oracleadmin.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oracleadmin.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oracleadmin.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oracleadmin.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oracleadmin.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oracleadmin.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oracleadmin.wordpress.com/119/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oracleadmin.wordpress.com&blog=3914207&post=119&subd=oracleadmin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://oracleadmin.wordpress.com/2009/10/26/wo-ist-der-consistent-parameter-bei-data-pump/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">kliesenfeld</media:title>
		</media:content>
	</item>
		<item>
		<title>Schema klonen mit Datapump</title>
		<link>http://oracleadmin.wordpress.com/2009/10/22/schema-klonen-mit-datapump/</link>
		<comments>http://oracleadmin.wordpress.com/2009/10/22/schema-klonen-mit-datapump/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 11:41:22 +0000</pubDate>
		<dc:creator>Kay Liesenfeld</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://oracleadmin.wordpress.com/?p=104</guid>
		<description><![CDATA[Oracle hat mit Datapump ab 10g ein neues Tool eingeführt, das die alteingesessenen, aber bewährten Tools EXP und IMP ablösen soll. Dabei ist es deutlich mächtiger, bringt aber auch einige Einschränkungen im Vergleich zur bisherigen Vorgehensweise mit sich. Doch dazu in einem späteren Artikel mehr.
Datapump kann hervorragend zum Klonen ganzer Schemata (neudeutsch auch Schemas) benutzt werden, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oracleadmin.wordpress.com&blog=3914207&post=104&subd=oracleadmin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Oracle hat mit <a href="http://download.oracle.com/docs/cd/B13789_01/server.101/b10825/part_dp.htm#i436481" target="_blank">Datapump</a> ab 10g ein neues Tool eingeführt, das die alteingesessenen, aber bewährten Tools EXP und IMP ablösen soll. Dabei ist es deutlich mächtiger, bringt aber auch einige Einschränkungen im Vergleich zur bisherigen Vorgehensweise mit sich. Doch dazu in einem späteren Artikel mehr.</p>
<p>Datapump kann hervorragend zum Klonen ganzer Schemata (neudeutsch auch <a href="http://de.wiktionary.org/wiki/Schema" target="_blank">Schemas</a>) benutzt werden, und das sogar ohne eine Export-Datei anzulegen.</p>
<p>Hierzu bedient man sich der NETWORK_LINK-Funktionalität von Datapump, in dem es unter Umgehung des Filesystems die zu importierenden Daten direkt aus der Quelldatenbank saugt. Notwendig hierzu ist ein <a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/ds_concepts002.htm" target="_blank">DATABASE LINK</a> auf die Quelldatenbank. Will man ein Schema in der gleichen Datenbank klonen, legt man einfach einen Link auf die eigene Datenbank an (loopback).</p>
<p>Beispiel: wir möchten die Schemas SCOTT und EMILY in die Schemas SCOTT_CLONE und EMILY_CLONE klonen. Quell- und Zieldatenbank sind identisch: ORCL.</p>
<p>Zunächst wird der Database Link angelegt, z.B. mit</p>
<pre style="padding-left:30px;">CREATE PUBLIC DATABASE LINK "TO_ORCL" CONNECT TO "SYSTEM" IDENTIFIED by "manager" USING 'orcl'</pre>
<p>Wie der Dokumentation zu entnehmen ist, sollte für das Logfile ein Directory-Objekt vorhanden sein:</p>
<pre style="padding-left:30px;">CREATE DIRECTORY "DATA_PUMP_DIR" AS '/u01/oracle/admin/ORCL/dpdump'</pre>
<p>Dann startet man den IMport, denn der EXport wird bei Verwendung des Network-Modus impliziert:</p>
<pre style="padding-left:30px;">impdp system network_link=to_orcl logfile=cloning.log
remap_schema='SCOTT':'SCOTT_CLONE','EMILY':'ELIMY_CLONE' schemas=SCOTT,EMILY</pre>
<p>Dies ist ein Beispiel mit zwei zu klonenden Schemas, das funktioniert natürlich auch mit einem oder auch drei equivalent.</p>
<p>Wichtig ist, dass man SCHEMAS=&#8230; angibt, sonst kopiert Datapump die gesamte Datenbank (was nicht funktionieren würde), und remappt dabei die angegebenen Schemas.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oracleadmin.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oracleadmin.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oracleadmin.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oracleadmin.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oracleadmin.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oracleadmin.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oracleadmin.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oracleadmin.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oracleadmin.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oracleadmin.wordpress.com/104/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oracleadmin.wordpress.com&blog=3914207&post=104&subd=oracleadmin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://oracleadmin.wordpress.com/2009/10/22/schema-klonen-mit-datapump/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">kliesenfeld</media:title>
		</media:content>
	</item>
		<item>
		<title>Typisches RMAN-Backup-Script</title>
		<link>http://oracleadmin.wordpress.com/2008/09/03/typisches-rman-backup-script/</link>
		<comments>http://oracleadmin.wordpress.com/2008/09/03/typisches-rman-backup-script/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 09:13:39 +0000</pubDate>
		<dc:creator>Kay Liesenfeld</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[rman]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://oracleadmin.wordpress.com/?p=88</guid>
		<description><![CDATA[Heute stellen wir ein typisches RMAN-Backup-Script vor, dass man in einer 10g-Umgebung zur vollständigen Datenbanksicherung benutzen kann. Zunächst meldet man sich beim RMAN an (ORACLE_SID ist gesetzt):
rman target /
Hier wird das Controlfile als Katalog benutzt, kein Katalog-Repository. Die aktuellen Einstellungen lässt man sich mit
RMAN&#62; show all;
ausgeben.
Wir ändern die grundlegenden Einstellungen:
RMAN&#62; configure channel device type disk [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oracleadmin.wordpress.com&blog=3914207&post=88&subd=oracleadmin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Heute stellen wir ein typisches RMAN-Backup-Script vor, dass man in einer 10g-Umgebung zur vollständigen Datenbanksicherung benutzen kann. Zunächst meldet man sich beim RMAN an (ORACLE_SID ist gesetzt):</p>
<p>rman target /</p>
<p>Hier wird das Controlfile als Katalog benutzt, kein Katalog-Repository. Die aktuellen Einstellungen lässt man sich mit</p>
<p>RMAN&gt; show all;</p>
<p>ausgeben.</p>
<p>Wir ändern die grundlegenden Einstellungen:</p>
<p>RMAN&gt; configure channel device type disk format &#8216;z:\backup\rman_%d_t%t_s%s_p%p&#8217;;<br />
=&gt; Bestimmt das Zielverzeichnis für die Sicherung und den Aufbau der Dateinamen.</p>
<p>RMAN&gt; configure controlfile autobackup format for device type disk to &#8216;z:\backup\%F&#8217;;<br />
=&gt; Bestimmt das Zielverzeichnis für das Controlfile-Autobackup. %F ist die DBID und sollte im Namen vorkommen.</p>
<p>RMAN&gt; configure controlfile autobackup on;<br />
=&gt; Das automatische Backup des Controlfiles wird eingeschaltet.</p>
<p>RMAN&gt; configure retention policy to redundancy 2;<br />
=&gt; Es werden 2 Backup-Sätze aufbewahrt.</p>
<p>RMAN&gt; configure backup optimization on;<br />
=&gt; Es werden nur neue Archivelogs gesichert, nicht immer alle.</p>
<p>Mit diesem Script starten wir das Backup:</p>
<p>RMAN&gt; run {<br />
backup database plus archivelog delete all input;<br />
backup current controlfile;<br />
backup spfile;<br />
}</p>
<p>Zunächst werden alle Datendateien gesichert. Dann wird das aktuelle Logfile archiviert, die Archivelogs gesichert, das dann aktuelle Logfile ebenfalls archiviert und auch gesichert. (Diesen ganzen Vorgang steuert ab 10g das &#8216;plus archivelog&#8217;-Statement.) Zu guter Letzt werden die gesicherten Archivelogs aus dem Quellverzeichnis (z.B. der Flash Recovery Area) gelöscht.</p>
<p>Das &#8222;backup current controlfile&#8220; benötigt man eigentlich nicht, wenn &#8222;autobackup controlfile&#8220; aktiviert ist, aber doppelt genäht hält einfach besser. Außerdem ist man als DBA grundsätzlich mißtrauisch.</p>
<p>Am Ende wird das SPFILE gesichert, was natürlich nur Sinn macht, wenn die Datenbank auch mit einem SPFILE gestartet wurde.</p>
<p>Überprüfen kann man das Backup z.B. mit</p>
<p>RMAN&gt; report need backup;</p>
<p>Hier darf es kein Ergebnis geben, sofern das Kommando zeitnah nach dem Backup ausgeführt wird.</p>
<p>RMAN&gt; list backup summary;</p>
<p>&#8230;listet alle Backups auf.</p>
<p>RMAN&gt; restore database validate;</p>
<p>&#8230;prüft, ob die Datenbank im Fehlerfall wieder vollständig zurückgeholt werden könnte.</p>
<p>Achtung: RMAN sichert unter Windows nicht auf Netzlaufwerken und/oder in UNC-Pfaden. Ein Backup muss auf eine lokale Platte stattfinden, anschließend kann z.B. mit ROBOCOPY das lokale Backup-Verzeichnis mit einem Pfad im Netzwerk abgeglichen werden.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/oracleadmin.wordpress.com/88/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/oracleadmin.wordpress.com/88/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oracleadmin.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oracleadmin.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oracleadmin.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oracleadmin.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oracleadmin.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oracleadmin.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oracleadmin.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oracleadmin.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oracleadmin.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oracleadmin.wordpress.com/88/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oracleadmin.wordpress.com&blog=3914207&post=88&subd=oracleadmin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://oracleadmin.wordpress.com/2008/09/03/typisches-rman-backup-script/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">kliesenfeld</media:title>
		</media:content>
	</item>
		<item>
		<title>Tablespace-Belegungshistorie</title>
		<link>http://oracleadmin.wordpress.com/2008/07/14/tablespace-belegungshistorie/</link>
		<comments>http://oracleadmin.wordpress.com/2008/07/14/tablespace-belegungshistorie/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 18:54:08 +0000</pubDate>
		<dc:creator>Kay Liesenfeld</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[addm]]></category>
		<category><![CDATA[awr]]></category>
		<category><![CDATA[belegung]]></category>
		<category><![CDATA[tablespace]]></category>

		<guid isPermaLink="false">http://oracleadmin.wordpress.com/?p=42</guid>
		<description><![CDATA[Wer wissen möchte, wie sich seine Tablespaces in den letzten Wochen speicherplatzmäßig entwickelt haben, kann dies ganz einfach durch ein einfaches Query herausfinden, ohne dazu teure Zusatztools bemühen zu müssen:
select ts.name &#8222;Tablespace&#8220;,
vor_4_wochen.full &#8222;FULL%_4_WEEKS_AGO&#8220;,
letzte_woche.full &#8222;FULL%_LAST_WEEK&#8220;,
heute.full &#8222;FULL%_TODAY&#8220;
from   (select tsu.tablespace_id,
round(
tsu.tablespace_usedsize/tsu.tablespace_maxsize*100,0) as
full
from   wrh$_tablespace_space_usage tsu
where  to_date(substr(tsu.rtime,1,13),&#8217;MM/DD/YYYY
HH24&#8242;)=to_date(to_char(trunc(sysdate),&#8217;MM/DD/YYYY
HH24&#8242;),&#8217;MM/DD/YYYY HH24&#8242;)
) heute,
(select tsu.tablespace_id,
round(
tsu.tablespace_usedsize/tsu.tablespace_maxsize*100,0) as
full
from   wrh$_tablespace_space_usage tsu
where  [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oracleadmin.wordpress.com&blog=3914207&post=42&subd=oracleadmin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Wer wissen möchte, wie sich seine Tablespaces in den letzten Wochen speicherplatzmäßig entwickelt haben, kann dies ganz einfach durch ein einfaches Query herausfinden, ohne dazu teure Zusatztools bemühen zu müssen:</p>
<p>select ts.name &#8222;Tablespace&#8220;,<br />
vor_4_wochen.full &#8222;FULL%_4_WEEKS_AGO&#8220;,<br />
letzte_woche.full &#8222;FULL%_LAST_WEEK&#8220;,<br />
heute.full &#8222;FULL%_TODAY&#8220;<br />
from   (select tsu.tablespace_id,<br />
round(<br />
tsu.tablespace_usedsize/tsu.tablespace_maxsize*100,0) as<br />
full<br />
from   wrh$_tablespace_space_usage tsu<br />
where  to_date(substr(tsu.rtime,1,13),&#8217;MM/DD/YYYY<br />
HH24&#8242;)=to_date(to_char(trunc(sysdate),&#8217;MM/DD/YYYY<br />
HH24&#8242;),&#8217;MM/DD/YYYY HH24&#8242;)<br />
) heute,<br />
(select tsu.tablespace_id,<br />
round(<br />
tsu.tablespace_usedsize/tsu.tablespace_maxsize*100,0) as<br />
full<br />
from   wrh$_tablespace_space_usage tsu<br />
where  to_date(substr(tsu.rtime,1,13),&#8217;MM/DD/YYYY<br />
HH24&#8242;)=to_date(to_char(trunc(sysdate-7),&#8217;MM/DD/YYYY<br />
HH24&#8242;),&#8217;MM/DD/YYYY HH24&#8242;)<br />
) letzte_woche,<br />
(select tsu.tablespace_id,<br />
round(<br />
tsu.tablespace_usedsize/tsu.tablespace_maxsize*100,0) as<br />
full<br />
from   wrh$_tablespace_space_usage tsu<br />
where  to_date(substr(tsu.rtime,1,13),&#8217;MM/DD/YYYY<br />
HH24&#8242;)=to_date(to_char(trunc(sysdate-28),&#8217;MM/DD/YYYY<br />
HH24&#8242;),&#8217;MM/DD/YYYY HH24&#8242;)<br />
) vor_4_wochen,<br />
v$tablespace ts<br />
where ts.ts# = heute.tablespace_id<br />
and   ts.ts# = letzte_woche.tablespace_id<br />
and  ts.ts# = vor_4_wochen.tablespace_id<br />
order by 4 desc;</p>
<p><strong>Wichtig ist, dass die Datenhaltungszeit der ADDM-Statistiken &gt; 28 Tage eingestellt ist und dass die Statistiken stündlich (alle 60 Minuten) gesammelt werden. Ansonsten liefert das Script eine leere Menge zurück.</strong></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/oracleadmin.wordpress.com/42/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/oracleadmin.wordpress.com/42/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oracleadmin.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oracleadmin.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oracleadmin.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oracleadmin.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oracleadmin.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oracleadmin.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oracleadmin.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oracleadmin.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oracleadmin.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oracleadmin.wordpress.com/42/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oracleadmin.wordpress.com&blog=3914207&post=42&subd=oracleadmin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://oracleadmin.wordpress.com/2008/07/14/tablespace-belegungshistorie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">kliesenfeld</media:title>
		</media:content>
	</item>
		<item>
		<title>E-Mail-Versand in Triggern</title>
		<link>http://oracleadmin.wordpress.com/2008/07/02/e-mail-versand-in-triggern/</link>
		<comments>http://oracleadmin.wordpress.com/2008/07/02/e-mail-versand-in-triggern/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 08:53:08 +0000</pubDate>
		<dc:creator>Kay Liesenfeld</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[smtp]]></category>
		<category><![CDATA[trigger]]></category>
		<category><![CDATA[utl_mail]]></category>

		<guid isPermaLink="false">http://oracleadmin.wordpress.com/?p=39</guid>
		<description><![CDATA[Aus dem Sekretariat kam folgende Anforderung: ändert sich die Spalte einer bestimmten Tabelle auf einen bestimmten Wert, soll eine E-Mail mit Informationen dieser Transaktion versendet werden.
Die Herangehensweise ist klar: ein On-Update-Trigger ruft UTL_MAIL (oder UTL_SMTP vor 10g) auf und versendet die E-Mail. Dieser Lösungsweg ist aber nur dann akzeptabel, wenn sichergestellt ist, dass der Benutzer [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oracleadmin.wordpress.com&blog=3914207&post=39&subd=oracleadmin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Aus dem Sekretariat kam folgende Anforderung: ändert sich die Spalte einer bestimmten Tabelle auf einen bestimmten Wert, soll eine E-Mail mit Informationen dieser Transaktion versendet werden.</p>
<p>Die Herangehensweise ist klar: ein On-Update-Trigger ruft UTL_MAIL (oder UTL_SMTP vor 10g) auf und versendet die E-Mail. Dieser Lösungsweg ist aber nur dann akzeptabel, wenn sichergestellt ist, dass der Benutzer diese Transaktion nicht mehr rückgängig machen kann, z.B. wenn die Applikation kein Rollback zulässt.</p>
<p>Wenn nämlich ein Rollback erfolgt, hat die Spalte wieder ihren ursprünglichen Wert, der Versand der E-Mail ist allerdings bereits erfolgt und kann nicht mehr rückgängig gemacht werden.</p>
<p>Tom &#8222;AskTom&#8220; Kyte beschreibt im Oracle Magazine und in seinem <a href="http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:698152300346710865" target="_blank">Blog</a> eine Vorgehensweise, die dieses Verhalten verhindert:</p>
<p>Die Idee ist, dass man statt des E-Mail-Versandes einen Eintrag in die Queue von DMBS_JOBS vornimmt, die sich um den Versand der Post kümmert. Der Insert in die Job-Queue ist ja auch eine Transaktion, wird also nur vorgenommen, wenn die ursprüngliche Transaktion (die, die den Trigger auslöst) commited wird. Im Detail funktioniert das so:</p>
<pre>SQL&gt; create table do_ddl (job number primary key, stmt varchar2(4000));
Table created.</pre>
<p>Diese Tabelle beinhaltet die Jobnummern und die Statements, die im jeweiligen Job ausgeführt werden sollen. In unserem Fall z.B. UTL_MAIL.SEND (&#8230;).</p>
<p>Anschließend liegen wir eine Stored Procedure an, die die Jobtabelle ausliest und die dort hinterlegten Statements ausführt:</p>
<pre>SQL&gt; create or replace procedure do_ddl_safely (p_job in number) is
2   l_rec do_ddl%rowtype;
3   begin
4     select * into l_rec from do_ddl where job = p_job;
5     execute immediate l_rec.stmt;
6   end;
7   /
Procedure created.</pre>
<p>Im Trigger schließlich wird der Job in der Queue angelegt:</p>
<pre>SQL&gt; declare
2   l_job number;
3   begin
4     dbms_job.submit (l_job, 'do_ddl_safely (JOB);' );
5     insert into do_ddl (job, stmt) values (l_job, 'begin utl_mail.send (...) end;');
6   end;
7   /</pre>
<p>Was passiert also?</p>
<ol>
<li>Der Trigger legt einen Job an und schreibt das  Statement mit der Jobnummer in die Tabelle DO_DDL.</li>
<li>Da für die ursprüngliche Transaktion noch kein Commit vorliegt, wird weder das DBMS_JOB.SUBMIT noch der Insert in die Tabelle wirklich ausgeführt.</li>
<li>Beim Rollback wird die ursprüngliche Transaktion (das Ändern des Spaltenwertes) sowie Schritt 1 rückgängig gemacht<br />
<em>oder</em><br />
beim Commit wird die Änderung in der Spalte festgeschrieben, der Job wird erstellt und die Tabelle DO_DDL befüllt.</li>
<li>Der Job wird kurzzeitig nach dem Commit ausgeführt und die E-Mail wird versendet.</li>
</ol>
<p>Diese Vorgehensweise ist natürlich nicht nur auf den Versand von E-Mails beschränkt, sondern eignet sich hervorragend, um ganz allgemein DDL in Triggern auszuführen.</p>
<p>Denn wie schreibt Mr. Kyte so schön:</p>
<p><em>Whenever you are tempted to do something nontransactional in a trigger, think 500 times more about it and then always decide againt it. It can lead only to really bad things.</em></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/oracleadmin.wordpress.com/39/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/oracleadmin.wordpress.com/39/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oracleadmin.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oracleadmin.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oracleadmin.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oracleadmin.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oracleadmin.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oracleadmin.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oracleadmin.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oracleadmin.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oracleadmin.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oracleadmin.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oracleadmin.wordpress.com&blog=3914207&post=39&subd=oracleadmin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://oracleadmin.wordpress.com/2008/07/02/e-mail-versand-in-triggern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">kliesenfeld</media:title>
		</media:content>
	</item>
		<item>
		<title>Data Recovery Advisor in 11g</title>
		<link>http://oracleadmin.wordpress.com/2008/06/18/data-recovery-advisor-in-11g/</link>
		<comments>http://oracleadmin.wordpress.com/2008/06/18/data-recovery-advisor-in-11g/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 12:57:24 +0000</pubDate>
		<dc:creator>Kay Liesenfeld</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[data recovery advisor]]></category>

		<guid isPermaLink="false">http://oracleadmin.wordpress.com/?p=20</guid>
		<description><![CDATA[Seit Oracle 11g gibt es ja einige neue Backup- und Recovery-Features, unter anderem auch den Data Recovery Advisor.
Dieser neue Assistent soll Fehler ermitteln, klassifizieren, darstellen und auch lösen. In bunten Oracle-Bildchen sieht das dann so aus:

(Quelle: Oracle)
Wir haben den Ratschlaggeber Advisor mit einer kleinen Aufgabe auf die Probe gestellt: man nehme eine x-beliebige Oracle-Datendatei, zerstückele [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oracleadmin.wordpress.com&blog=3914207&post=20&subd=oracleadmin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Seit Oracle 11g gibt es ja einige neue <a href="http://www.oracle.com/technology/oramag/oracle/08-may/o38ocp.html" target="_blank">Backup- und Recovery-Features</a>, unter anderem auch den Data Recovery Advisor.</p>
<p>Dieser neue Assistent soll Fehler ermitteln, klassifizieren, darstellen und auch lösen. In bunten Oracle-Bildchen sieht das dann so aus:</p>
<p><img style="vertical-align:middle;" src="http://www.oracle.com/technology/oramag/oracle/08-may/images/o38ocp_f1.gif" alt="" width="484" height="231" /></p>
<p>(Quelle: Oracle)</p>
<p>Wir haben den <span style="text-decoration:line-through;">Ratschlaggeber</span> Advisor mit einer kleinen Aufgabe auf die Probe gestellt: man nehme eine x-beliebige Oracle-Datendatei, zerstückele sie ein bisschen und warte, was passiert.</p>
<p>Zunächst die Ausgangslage: wir suchen uns die Datei EXAMPLE01.DBF aus, die zum Beispielschema der Datenbank gehört. Der Benutzer HR greift mit seinen Objekten auf diese Datei zu.</p>
<p><a href="http://oracleadmin.files.wordpress.com/2008/06/01.jpg"><img class="alignnone size-thumbnail wp-image-21" src="http://oracleadmin.files.wordpress.com/2008/06/01.jpg?w=128&#038;h=89" alt="" width="128" height="89" /></a></p>
<p>Wir öffnen die Datei mit dem VI und löschen mitten in der Datei wahllos zwei Zeilen (Kommando &#8222;dd&#8220;). Dann speichern wir die nun logisch korrupte Datei mit &#8222;wq!&#8220; ab.</p>
<p><a href="http://oracleadmin.files.wordpress.com/2008/06/02.jpg"><img class="alignnone size-thumbnail wp-image-22" src="http://oracleadmin.files.wordpress.com/2008/06/02.jpg?w=128&#038;h=89" alt="" width="128" height="89" /></a></p>
<p>Der nächste Screenshot zeigt, dass sich die Größe der veränderten EXAMPLE01.DBF vom Ausgangszustand unterscheidet.</p>
<p><a href="http://oracleadmin.files.wordpress.com/2008/06/03.jpg"><img class="alignnone size-thumbnail wp-image-23" src="http://oracleadmin.files.wordpress.com/2008/06/03.jpg?w=128&#038;h=89" alt="" width="128" height="89" /></a></p>
<p>Als Benutzer HR führen wir nun ganz unbedarft im SQL*Plus-Statement aus, das potenziell die von uns zerstörten Daten betrifft.</p>
<p><a href="http://oracleadmin.files.wordpress.com/2008/06/04.jpg"><img class="alignnone size-thumbnail wp-image-24" src="http://oracleadmin.files.wordpress.com/2008/06/04.jpg?w=128&#038;h=89" alt="" width="128" height="89" /></a></p>
<p>Und tatsächlich &#8212; wir haben auf Anhieb die kaputte Stelle getroffen und werden als Anwender sofort über den Schadensfall informiert. Falls wir wissend sind und genügend Rechte haben, können wir noch ein</p>
<p>analyze &lt;Tabelle&gt; validate structure;</p>
<p>ausführen und Oracle die Struktur der Tabelle prüfen lassen. Auch hier bekommen wir eine Fehlermeldung. (Falls der Anwender den Analyze-Befehl nicht ausführen kann, sollte der DBA auf diese Weise die Integrität der Tabelle überprüfen.) Nun ist es also höchste Zeit, den DBA anzurufen.</p>
<p><a href="http://oracleadmin.files.wordpress.com/2008/06/061.jpg"><img class="alignnone size-thumbnail wp-image-26" src="http://oracleadmin.files.wordpress.com/2008/06/061.jpg?w=128&#038;h=88" alt="" width="128" height="88" /></a></p>
<p>Dieser versucht sich ggf. mit dem <a href="http://www.orafaq.com/wiki/DB_Verify" target="_blank">DBVERIFY-Utility</a> einen Überblick über die Lage zu verschaffen.</p>
<p><a href="http://oracleadmin.files.wordpress.com/2008/06/05.jpg"><img class="alignnone size-thumbnail wp-image-27" src="http://oracleadmin.files.wordpress.com/2008/06/05.jpg?w=128&#038;h=89" alt="" width="128" height="89" /></a></p>
<p>Im Enterprise Manager wird mittlerweile auch schon vor einem &#8222;kritischen Vorfall&#8220; gewarnt.</p>
<p><a href="http://oracleadmin.files.wordpress.com/2008/06/07.jpg"><img class="alignnone size-thumbnail wp-image-28" src="http://oracleadmin.files.wordpress.com/2008/06/07.jpg?w=128&#038;h=6" alt="" width="128" height="6" /></a></p>
<p>Die Fehlerbeschreibung ist eindeutig: EXMAPLE01.DBF ist defekt und somit sind einige Objekte im Example-Tablespace nicht verfügbar.</p>
<p><a href="http://oracleadmin.files.wordpress.com/2008/06/09.jpg"><img class="alignnone size-thumbnail wp-image-29" src="http://oracleadmin.files.wordpress.com/2008/06/09.jpg?w=128&#038;h=38" alt="" width="128" height="38" /></a></p>
<p>Der Recovery-Advisor bietet sogleich seine Hilfe an.</p>
<p><a href="http://oracleadmin.files.wordpress.com/2008/06/08.jpg"><img class="alignnone size-thumbnail wp-image-30" src="http://oracleadmin.files.wordpress.com/2008/06/08.jpg?w=127&#038;h=37" alt="" width="127" height="37" /></a></p>
<p>Die Empfehlung wird anhand des RMAN-Skripes dargestellt, das der Advisor zur Lösung des Problems ausführen möchte, so man ihn denn lässt: Hier soll die Datei EXAMPLE01.DBF aus dem vorhandenen RMAN-Backup wiederhergestellt und dann mittels der Archive-Log-Dateien auf den Stand vor dem Crash aktualisiert werden.</p>
<p><a href="http://oracleadmin.files.wordpress.com/2008/06/10.jpg"><img class="alignnone size-thumbnail wp-image-31" src="http://oracleadmin.files.wordpress.com/2008/06/10.jpg?w=128&#038;h=62" alt="" width="128" height="62" /></a></p>
<p>Gibt man dem Advisor freie Fahrt, legt er das RMAN-Skript als Job an und macht sich sogleich an die Arbeit&#8230;</p>
<p><a href="http://oracleadmin.files.wordpress.com/2008/06/11.jpg"><img class="alignnone size-thumbnail wp-image-32" src="http://oracleadmin.files.wordpress.com/2008/06/11.jpg?w=128&#038;h=53" alt="" width="128" height="53" /></a></p>
<p>Während der Laufzeit des Jobs hat man eine Übersicht über die einzelnen Schritte:</p>
<p><a href="http://oracleadmin.files.wordpress.com/2008/06/121.jpg"><img class="alignnone size-thumbnail wp-image-34" src="http://oracleadmin.files.wordpress.com/2008/06/121.jpg?w=128&#038;h=49" alt="" width="128" height="49" /></a></p>
<p>&#8230;und fertig!</p>
<p><a href="http://oracleadmin.files.wordpress.com/2008/06/13.jpg"><img class="alignnone size-thumbnail wp-image-35" src="http://oracleadmin.files.wordpress.com/2008/06/13.jpg?w=128&#038;h=17" alt="" width="128" height="17" /></a></p>
<p>Das ausgeführte Skript liest sich dann wie folgt:</p>
<p><a href="http://oracleadmin.files.wordpress.com/2008/06/13a.pdf">RMAN-Report (PDF)</a></p>
<p><strong>Fazit:</strong> In unserem einfachen Testszenario leistet der Advisor gute Arbeit. Man muss sich nicht um RMAN-Skripte kümmern, hat jederzeit den Überblick und konzentriert sich auf das Wesentliche. Wie sich der Advisor bei komplexeren Problemen verhält, bleibt auszutesten. Allerdings darf man nicht die eierlegende Wollmilchsau erwarten, denn Oracle setzt dem Advisor relativ enge Grenzen:</p>
<p><em><span class="boldbodycopy">A.</span><span class="bodycopy"> Physical corruption such as block checksum failures and invalid block header field values</span><br />
<span class="boldbodycopy">B.</span><span class="bodycopy"> I/O failures such as hardware errors and operating system driver failures</span><br />
<span class="boldbodycopy">C.</span><span class="bodycopy"> Inconsistencies such as a datafile that is older than other database files</span><br />
<span class="boldbodycopy">D.</span><span class="bodycopy"> Failures on standby databases</span></em></p>
<p>Für diese Fälle wird er sich gut eignen, nimmt dem DBA aber nicht die verantwortungsvolle Planung und Administration eines sicheren Backup- und Recovery-Konzeptes ab.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/oracleadmin.wordpress.com/20/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/oracleadmin.wordpress.com/20/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oracleadmin.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oracleadmin.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oracleadmin.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oracleadmin.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oracleadmin.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oracleadmin.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oracleadmin.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oracleadmin.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oracleadmin.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oracleadmin.wordpress.com/20/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oracleadmin.wordpress.com&blog=3914207&post=20&subd=oracleadmin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://oracleadmin.wordpress.com/2008/06/18/data-recovery-advisor-in-11g/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">kliesenfeld</media:title>
		</media:content>

		<media:content url="http://www.oracle.com/technology/oramag/oracle/08-may/images/o38ocp_f1.gif" medium="image" />

		<media:content url="http://oracleadmin.files.wordpress.com/2008/06/01.jpg?w=128" medium="image" />

		<media:content url="http://oracleadmin.files.wordpress.com/2008/06/02.jpg?w=128" medium="image" />

		<media:content url="http://oracleadmin.files.wordpress.com/2008/06/03.jpg?w=128" medium="image" />

		<media:content url="http://oracleadmin.files.wordpress.com/2008/06/04.jpg?w=128" medium="image" />

		<media:content url="http://oracleadmin.files.wordpress.com/2008/06/061.jpg?w=128" medium="image" />

		<media:content url="http://oracleadmin.files.wordpress.com/2008/06/05.jpg?w=128" medium="image" />

		<media:content url="http://oracleadmin.files.wordpress.com/2008/06/07.jpg?w=128" medium="image" />

		<media:content url="http://oracleadmin.files.wordpress.com/2008/06/09.jpg?w=128" medium="image" />

		<media:content url="http://oracleadmin.files.wordpress.com/2008/06/08.jpg?w=127" medium="image" />

		<media:content url="http://oracleadmin.files.wordpress.com/2008/06/10.jpg?w=128" medium="image" />

		<media:content url="http://oracleadmin.files.wordpress.com/2008/06/11.jpg?w=128" medium="image" />

		<media:content url="http://oracleadmin.files.wordpress.com/2008/06/121.jpg?w=128" medium="image" />

		<media:content url="http://oracleadmin.files.wordpress.com/2008/06/13.jpg?w=128" medium="image" />
	</item>
	</channel>
</rss>