Droping a Table Column will generate a Hidden Column instead of removing them

This week a colleaque asked me for help while droping a table column. Inside of a PL/SQL procedure a table column has to be droped to prepare the table for an partition exchange. But while execute the partition exchange the Weiterlesen

Avoid mistakes when Gathering System Stats

Christian Antognini descibed in his book Troubleshooting Oracle Performance how to gather the system statistics in a very proficient way. The main idea of gathering system stats is to collect the system stats in Weiterlesen

Oracle RAC 12cR1 on OEL 7.2 VBox – Part 4: Install the GI software only

As described in my previous article Cloning the Node two a 2-Node-RAC we can start to install the GI software on both nodes. Normally you can install and configure the Grid Infrastructure (GI) Software on both nodes, starting on one node only. In a case Weiterlesen

Oracle RAC 12cR1 on OEL 7.2 VBox – Part 3: Cloning the Node two a 2-Node-RAC

In my previous article Adding ASM Disks and Configuration of OS I described to add some ASM Disks and to configure the Oracle Enterprise Linux (OEL) 7.2 to be ready for Oracle RAC 12c. In this article I will describe you a short script to clone   Weiterlesen

Oracle RAC 12cR1 on OEL 7.2 VBox – Part 2: Adding ASM Disks and Configiguration of OS

In addition to my first article Installation of OEL 7.2 I will show you how to add some ASM Disks and to configure the Oracle Enterprise Linux (OEL) 7.2 to be ready for oracle RAC 12c on OEL 7.2 Weiterlesen

Howto solve Bug 22832149 – SHUTDOWN FAILS WITH ORA-449

While trying to setup and configure a two-node-RAC (12.1.0.2.0) on AIX 7.1 TL 4 SP 1 (AIX OS 7100-04-01-1543) at customer site I run into Weiterlesen

Oracle RAC 12cR1 on OEL 7.2 VBox – Part 1: Installation of OEL 7.2

Based on several articles in the internet like ORACLE-BASE and RAC-Attack and the need to patch the GI software before the cluster is configured the first time I started to create a VM. I tried to summarize them in this article being the first Weiterlesen

HOWTO create SR with ADRCI ?

Gerade in einem Umfeld mit vielen Datenbanken treten naturgemäß auch mehr Fehler auf. Von daher ist notwendig, diese schnell zu analysieren und Maßnahmen einzuleiten.

In diesem Beitrag möchte ich versuchen darzustellen, wie man durch einfache Handgriffe sich dabei die Arbeit etwas erleichtern kann und somit auch die Arbeit des EM etwas Weiterlesen

HOWTO upgrade to 12c

In diesem Beitrag möchte ich ein paar interessante Links zusammenstellen, die gerade beim Upgrade nach 12c interessant sein können, oder aber eine Basis für Überlegungen einer neuen Infrastruktur darstellen können:

Basis ist natürlich die Dokumentation von Oracle: Oracle Database Upgrade Guide

Grundsätzlich ist ein Upgrade recht einfach: Upgrade nach Oracle Database 12c

 

Jedoch hat sich mit 12c einiges verändert. Die wichtigsten Punkte und Hinweise sind hier im aufgeführt: New version of the BIG 12c SLIDE DECK. Dieses Dokument enthält unter anderem folgende wichtige Punkte:

 

 

 

Besonders hervorzuheben sind die beiden Punkte:

Obwohl eine non-cdb Umgebung deprecated ist, sind einige Features sind im pdb Umfeld nicht verfügbar: Non-CDB architecture of Oracle databases is DEPRECATED since Oracle Database 12.1.0.2

      • Database Change Notification
      • Continuous Query Notification (CQN)
      • Client Side Cache
      • Heat Map
      • Automatic Data Optimization
      • Oracle Streams
      • Oracle Fail Safe
      • Flashback Pluggable Database (Flashback Database works but will flashback CDB$ROOT including all PDBs)
      • DBVERIFY
      • Data Recovery Advisor (DRA)
      • Flashback Transaction Backout

 

Jedoch gibt es einige Punkte zu beachten, um nicht unötige und vermeidbare Probleme zu bekommen:

 

Während und nach des Upgrades sollten noch beachtet werden:

 

Mein Dank geht an Mike Dietrich, der in seinem Blog sehr viele dieser Informationen verständlich und übersichtlich darstellt.

 

Viel Erfolg beim Upgrade,

Rainer

ORA-28575: unable to open RPC connection to external procedure agent

Nach dem Update der Oracle Software auf 11.2.0.4.0, dem Einspielen des neuesten PSU und eines speziellen Patches trat anschließend folgender Fehler beim Anwender auf:

1
ORA-28575: unable TO OPEN RPC connection TO external PROCEDURE agent

Im LOG File des Listener war degegen folgender Fehlerstack zu sehen:

1
2
3
4
5
TNS-12518: TNS:listener could NOT hand off client connection
 TNS-12547: TNS:lost contact
  TNS-12560: TNS:protocol adapter error
   TNS-00517: Lost contact
    Linux Error: 32: Broken pipe

Nach kurzer Suche in MOS fand ich dann zwei hilfreiche Notes:

Troubleshooting Guide for TNS-12518 TNS listener could not hand off client connection (Doc ID 550859.1)
External Procedures – Troubleshooting ORA-28575 Errors (Doc ID 70638.1)

Gerade in der zweiten (Doc ID 70638.1) fand in den hier endscheidenen Tipp, das Programm „extproc“ mit dem User, unter es ausgeführt werden soll, auch mal zu starten.

Dabei trat dann ein fehlermeldung auf, dass eine Shared Library nicht gefunden werden könne. Nach dem Setzen der richtigen Privilegien

1
2
3
chmod 755 $ORACLE_HOME/lib/libclntsh.so.11.1
chmod 755 $ORACLE_HOME/lib/libagtsh.so.1.0
chmod 755 $ORACLE_HOME/lib/libocci.so.11.1

konnte sowohl das Programm fehlerfrei gestartet werden als auch der Endanwender hatte keine Probleme mehr.

Als Alternative hat sich herausgestellt, dass ein Relink aller Binaries die Berechtigungen wieder korrekt setzt:

1
$ORACLE_HOME/bin/relink all

Viel Erfolg.

Oracle Database Upgrade to 12.1.0.2 – Avoid Performance Issues and Wrong Results

Mike Dietrich hat in seinem Blogbeitrag Oracle Upgrade 12.1.0.2 auf die MOS Note:2034610.1 „Oracle Database Upgrade to 12.1.0.2 – Avoid Performance Issues and Wrong Results“ verwiesen.

Diese enthält eine Reihe von Informationen und Hinweisen, die man vor jedem Upgrade durchaus überprüfen sollte.

Rainer

Caching in 12c

Mit der Version 12c (12.1.0.2) gibt es u.a. zwei neue Features zum Caching, die gerade bei kleinen oder mittleren Datenbanken einen Geschwindigkeitsvorteil ohne Änderung an der Anwendung erzielen lassen:

  1. ABTC = Automatic Big Table Caching
  2. FDC = Full Database Caching

Beide Features sind lizenzfrei und haben nichts mit der IN-MEMORY Option zu tun.

ABTC mit seriellen Abfragen im Single Instance Umfeld steht in allen Editionen zur Verfügung. Wird ABTC für parallele und serielle Abfragen im RAC oder Single Instance Umfeld verwendet, ist jedoch die Enterprise Edition erforderlich.
Dieses Feature ist speziell für solche Tabellen geeignet, die nicht komplett in den Hauptspeicher passen und viele Full-Table-Scan verursachen. Einen ersten Einblick, welche Parameter wie zu setzen sind, damit dieses Features wirkungsvoll arbeiten kann, gibt der Artikel ABTC-Parameter

FDC ist dann sinnvoll einzusetzen, die komplette DB in den Hauptspeicher passt. In einer multitenant – Umgebung gilt dies dann für die CDB als auch alle PDB. Der Tablespace SYSAUX wie auch TEMP können davon ausgeschlossen werden.
Die Objekte werden erst beim ersten Zugriff in den Speicher geladen. Die Objekte werden wie in einem „KEEP“ Buffer gehalten, ohne diesen spezifizieren zu müssen. Sie liegen im Buffer-Cache, werden aber so behandelt, als lägen sie im KEEP-Pool. Das Aktivieren wie auch das Deaktivieren dieses Features kann nur im Zustand einer gemounteden Datenbank erfolgen. In der Oracle Dokumentation ist beschrieben, wie FDC aktiviert und deaktiviert wird und welche Auswirkungen dies auf LOB hat FDC-Aktivieren

Viel Spass bei den Performancemesssungen !

Rainer

Standard Edition 2 ab 12.1.0.2

In der Oracle MOS Note Oracle Database 12c Standard Edition 2 (12.1.0.2) (Doc ID 2027072.1) gibt Oracle bekannt, dass

  • es ab Oracle 12c, genauer ab 12.1.0.2 keine Standard Edition (SE) und auch keine Standard Edition One (SEO) mehr geben wird
  • sondern nur noch eine „Standard Edition 2“ (SE2), die auf Servern mit zwei Sockets begrenzt ist.
  • Allerdings beinhaltet die Standard Edition 2 Oracle RAC für maximal zwei Knoten.

Ab 12.1.0.2 wird es dann keine Standard Edition noch eine Standard Edition One geben.
Diese existieren noch für 12.1.0.1 und werden auch 6 Monate nach 12.1.0.2 voll unterstützt.

Nach meiner Einschätzung wird dies viel Unmut und mögliche Konvertierungen der Lizenzen auf Enterprise Edition nach sich ziehen.

Eine mögliche Alternative ist, neue Hardware mit mehr Cores pro Socket anzuschaffen.

weitere Details – gerade im Hinblick auf SE2 – siehe auch

 

Zusammengefasst:

bis 12.1.0.1              SE und SEO, für 4 Sockets

ab 12.1.0.2              SE2, für 2 Sockets

 

ORA-02291: integrity constraint (RMAN.RLH_F1) violated – parent key not found

Beim Registrieren einer Datenbank an einem RMAN-Catalog (11g), trat folgender Fehler auf:
Auch ein De-Registrieren der DB brach mit diesem Fehler ab:

1
ORA-02291: integrity CONSTRAINT (RMAN.RLH_F1) violated - parent KEY NOT found

Nach Ausführen des folgenden Kommandos und dem anschließenden Ausführen des angezeigten Kommandos wurden alle Einträge komplett entfernt, so dass danach eine Registrierung möglich war.

1
2
3
4
SELECT 'EXEC DBMS_RCVCAT.UNREGISTERDATABASE('||DB_KEY||','||DBID||');' AS command
  , resetlogs_time
FROM rc_database
WHERE name = '&db_name';

Eine mögliche Ausgabe wäre dann:

1
2
3
COMMAND                                                                                     RESETLOGS
------------------------------------------------------------------------------------------- ---------
EXEC DBMS_RCVCAT.UNREGISTERDATABASE(1146,4974324);                                          30-MAY-15

Danach ist das folgende Kommando auszuführen:

1
2
3
SQL> EXEC DBMS_RCVCAT.UNREGISTERDATABASE(1146,4974324);
 
PL/SQL PROCEDURE successfully completed.

Viel Erfolg.

ORA-12162 beim Start von sqlplus / as sysdba

Beim Versuch mich via sqlplus mit der Datenbank eines Kunden zu verbinden, bekam ich folgende Fehlermeldung: ORA-12162 TNS:net service name is incorrectly specified.
Für diejenigen, die auch in diese Situation kommen, dieser kleine Beitrag Weiterlesen

DR versus IR: HowTo grant privs?

Aus einem aktuellen Projekt heraus entstand die Fragestellung: Muss man immer alle Rechte einem User direkt zuweisen oder genügt es nicht einfach, eine Prozedur mit Invoker Rights Weiterlesen

12c: ein Beispiel einer Interval-Reference Partitionierung

Im Rahmen eines Projektes ging es u.a. um die Einführung einer Referenz-Partitionierung mit Intervall, d.h. zwei oder mehr Tabellen, die zueinander über einen FK (Foreign Key) in Beziehung zu einander stehen, werden analog Weiterlesen

Index mit NULL Werten

Bei einer Anwendung stellte sich mir die Aufgabe, eine Abfrage zu optimieren, ohne die Abfrage oder die Tabelleninhalte ändern zu können. Wesentliches Kriterium der WHERE Klause war eine Abfrage auf der Spalte FELDNUM der Form (FELDNUM IS NULL or FELDNUM >= 5). Ich versuchte einen Index zu nutzen, der auch die Weiterlesen

YUM Repository für Oracle VM Server 3.3.1. erstellen

Um weitere Pakete nach der Installation des Oracle VM Servers 3.3.1 leichter zu installieren, ist es empfehlenswert, ein YUM Repository anzulegen. Wie leicht das geht, wird in Weiterlesen

Erstellen von Screenshots während einer Installation von OEL

Ich bin gerade dabei, ein Oracle Enterprise Linux (OEL) zu installieren und dieses auch dokumentieren, da stellt sich für mich die Frage, wie kann ich dies tun, wenn die Installation von einer CD/DVD erfolgt und das erste System auf dem Rechner ist?

Nach etwas Suchen im Internet stellt sich heraus, dass man während der Installation (innerhalb von anaconda) mit Hilfe der Tastenkombinationen + ein Screenshot erzeugen und gespeichert wird. Dies kann u.U. etwas dauern. Der Screenshot wird durchnumeriert und im Verzeichnis

1
/root/anaconda-screenshots

abgelegt.

Aber:
Während der Installation ist das /root Verzeichnis /tmp. Deshalb befinden sich die Screenshots während der Installation noch im Verzeichnis

1
/tmp/anaconda-screenshots

und können dort betrachtet werden. Mittels <Ctrl> + <Alt> + F2 kann man das Fenster umschalten.

Nach der Installation befinden sich die Screenshots dann in obigen Verzeichnis.

 

ABER:

Bei Oracle VM ist dies wohl von Oracle deaktiviert worden. Bei der Installation von Oracle VM Server – zumindest in der Version 3.3.1 – kann man leider auf diese Art und Weise keine Screenshots erzeugen.

Ansprechen eines virtuellen Netzwerkinterfaces aus der Oracle Virtual Box

Beim dem Versuch, aus einer Oracle Virtual Box (VBox) sowohl einerseits mein LAN als auch andererseits mein WLAN ansprechen zu können. Daraus entstand der Wunsch auf Betriebssystemseite ein virtuelles Netzwerkinterfaces bereit zu stellen, dass direkt von der VBox angesprochen wird. Dieses sollte je nach Verfügbarkeit der jeweiligen Netzwerkinterfaces (LAN und/oder WLAN) – immer eine Verbindung zum Internet zu haben.

Im ersten Schritt erstellte ich – basiserend auf dem eth0 (LAN) und wlan0 (WLAN) eine Bonding Interface bond0. Aus Sicht des OS konnte dieses erfolgreich eingesetzt werden. Die Verbindung bliebt bestehen, auch wenn ich einerseits das Kabel gezogen oder andererseits mein WLAN deaktiviert habe.

Leider konnte ich das so erstellte virtuelle Netzwerkinterface nicht der VBox zur Verfügung stellen, dass eine Bond0 nicht anerkannte. Aus der Suche nach einer Lösung fiel mit ein Artikel auf, in dem jemand – aus ganz anderen Gründen – heraus eine Bridge der VBox erfolgreich zur Verfügung stellte.

Also definierte ich auf dem virtuellen Netzwerkinterface bond0 noch eine weiteres virtuellen Interface br0, die lediglich nur das bond0 kannte. De facto habe ich auf das virtuelle bond0 noch eine br0 darübergesetzt – ohne weitere Funktionalität hinzuzufügen.
Auf OS Seite waren alle zuvor gemachten Tests mit der br0 jetzt ebenso erfolgreich.
Aber der VBox konnte ich diese neue virtuelle Interface br0 nun als Netzwerkinterface übergeben, über das sich diese dann direkt mit dem Internet verbinden konnte – unabhängig ob über WLAN oder LAN.

Die dazu notwendige Konfiguration liegt lediglich in der Datei
File: /etc/networkinterfaces

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# FILE: /etc/network/interfaces
#
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
 
 
auto eth0
iface eth0 inet manual
	dns-search		scons.de fritz.box
	dns-nameservers		192.172.10.100 192.172.10.1
	mtu 			1500
	bond-master 		bond0
 
auto wlan0
iface wlan0 inet manual
	dns-search		scons.de fritz.box
	dns-nameservers		192.172.10.100 192.172.10.1
	mtu 			1500
	wpa-bridge		bond0
	wpa-driver 		wext
	wpa-ap_scan		1
	wpa-conf 		/etc/wpa_supplicant/wpa_supplicant.conf
	bond-master 		bond0
 
 
auto bond0
iface bond0 inet manual
	mtu 			1500
        bond-mode 		active-backup
        bond-miimon 		100
	bond-updelay		5
	bond-downdelay		5
        bond-slaves 		none
#	pre-up			/sbin/ifconfig bond0 hw ether 28:02:06:07:ae:ad
        post-up 		ifup eth0 wlan0 
        post-down 		ifdown eth0 wlan0
 
auto br0
iface br0 inet static
	mtu 			1500
	address			192.172.10.100
	broadcast		192.172.10.255
	network			192.172.10.0
	netmask			255.255.255.0
	gateway			192.172.10.1
	dns-search		scons.de fritz.box
	dns-nameservers		192.172.10.100 192.172.10.1
	bridge_ports 		bond0
	bridge_maxwait 		0
	bridge_fd 		0
	bridge_stp 		off
	post-up 		ifup 	bond0
	post-down 		ifdown	bond0

Einziger Nachteil:
Beim Wechsel in ein anderes Netzwerk muss diese Datei entsprechend angepasst werden, da ich aus verschiedenen Gründen hier feste IP benutzt habe. Eine Alternative ist der Einsatz von DHCP

Auslesen aller ALERT.LOG in einem RAC

Seit Oracle 10g kann man über die View sys.x$dbgalertext die alert.log auslesen. Diese stellt aber nur die Zeilen derjenigen alert.log zur Verfügung, die auf dem Server lesbar ist, an dessen Instance man angemeldet ist. Wie kann man nun aber in einem RAC – Umfeld alle alert.log Weiterlesen

AAS und andere Key Performance Indikatoren

Das folgende SQL berechnet einige Key performance Indicators einer DB – auf Basis der AWR History Views. Speziell wird hier für Jeden Snapshot Weiterlesen

Erstellen von Histogrammen über die Laufzeit von SQL Statements

Um einen ersten Überblick um die Laufzeit von SQL Statements, genauer gesagt über die Elapsed_time pro Execution, zu bekommen, nutze ich folgende kleines SQL Abfrage. Dadurch Weiterlesen

Rebuild einer Tabelle mit einer LONG RAW Spalte

Bei einem Kunden trat das Problem auf, dass das Auslesen einer kleinen Tabelle (25 Zeilen mit 4 Spalten) durchschnittlich über 45 Sekunden (!) dauerte. Nach kurzer Analysze war das Problem <!–more–> klar: Die Tabelle war mal sehr groß gewesen und hatte jetzt nur noch Zeilen im ersten und im letzten Block. Dazwischen lagen ca. 4 GB allokierter, aber ungenutzter Speicher, der bei jedem Lesen überlesen werden musste.

Natürlich war die erste Idee, die Tabelle zu reorganisieren:

ALTER TABLE SMALLTAB move;

Leider hatte diese Tabelle jedoch eine LONG RAW Spalte, so dass dieses Kommando mit dem Fehler

ORA-00997: illegal USE OF LONG datatype

fehlschlug.

Da die LONG RAW Spalten nicht sehr groß waren (die Längen waren überall kleiner als 20.000 Zeichen), konnten wir das Problem in diesem Fall mit Hilfe eines kleinen PL/SQL Programms lösen. Wäre eine oder mehr Spalten länger als 32.767 Zeichen gewesen, hätten wir die Tabellen exportieren, mit TRUNCATE leeren und anschließend wieder importieren müssen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# Umbenennen der alten
ALTER TABLE SMALLTAB RENAME TO SMALLTAB_OLD;
 
# Anlegen einer neuen
CREATE TABLE SMALLTAB( 
  id                NUMBER NOT NULL
 ,TYPE              NUMBER NOT NULL
 ,record            long raw NOT NULL
);
 
# Füllen der neuen Tabelle mit den Werten aus der alten
SET serveroutput ON
DECLARE
  v_txt VARCHAR(32767 CHAR);
  i     NUMBER              := 0;
BEGIN
  FOR r IN (SELECT id, TYPE, record FROM SMALLTAB_OLD) loop
    i := i + 1;
    v_txt := UTL_RAW.CAST_TO_VARCHAR2(r.record);
    dbms_output.put_line('Row='||i||': '||LENGTH(v_txt));
 
    INSERT INTO SMALLTAB(id,TYPE,record)
    VALUES (r.id, r.type, utl_raw.cast_to_raw(v_txt));
  END loop;
 
  commit;
END;
/
 
# die alte droppen
DROP TABLE SMALLTAB_OLD;