Categories
Oracle Datenbank Systemkopie

Fehlermeldung nach Systemkopie: ORA-01124 file is in use

Wenn nach einem Restore die folgende Fehlermeldung auftritt, kann dies eine ganz banale Ursache haben:

SQL> recover database using backup controlfile until cancel;

ORA-00283: recovery session canceled due to errors
ORA-01124: cannot recover data file 1 - file is in use or recovery
ORA-01110: data file 1: 'D:\ORACLE\HSL\SAPDATA1\SYSTEM_1\SYSTEM.DATA1'

Es ist zu prüfen ob die Datenbank bereits geöffnet ist. Diese Situation kann zu Beispiel auftreten, wenn CONTROL.SQL im Rahmen einer SAP Systemkopie ausgeführt wurde.

select status from v$instance;

STATUS
------------
OPEN

Dieer Fehler tritt unter Umständen auf, wenn das von ora_br_copy (siehe SAP Hinweis 784118) erzeugte CONTROL.SQL zuvor ausgeführt wurde. Dies öffnet die Datenbank. Also kein Fehler. Ist ein Recover trotzdem noch erforderlich, darf die Datenbank nur im NOMOUNT Status sein. Also bitte ein shutdown immediate mit anschliessendem STARTUP NOMOUNT ausführen.

Categories
Oracle Datenbank

Dauerhafte Formatierungen in SQLPLUS setzen

In SQLPLUS müssen die Ausgaben leider sehr aufwending mit den Befehlen SET und COLUMN formatiert werden. Zudem sind diese Formatierungen nur in der aktuellen SQLPLUS Sitzung gültig. Damit bestimmte Einstellungen dauerhaft gesetzt werden können, bietet Oracle 2 Konfigurationsdateien an:

$ORACLE_HOME/sqlplus/admin/glogin.sql

./login.sql

Die erste ist global gültig und wird immer gelesen. Die zweite wird nur gelesen, wenn man SQLPLUS im Verzeichnis dieser Datei gestartet wird. Daher bietet sich für allgemeine Einstellungen, die für alle Benutzer gültig sein sollen, glogin.sql an. Eine von mir gewöhnlich verwendete glogin.sql sieht zum Beispiel so aus:

— — Copyright (c) 1988, 2011, Oracle and/or its affiliates.
## — All rights reserved.
— NAME ## — glogin.sql — DESCRIPTION ## — SQL*Plus global login “site profile” file — Add any SQL*Plus commands here that are to be executed when a ## — user starts SQL*Plus, or uses the SQL*Plus CONNECT command.
— USAGE ## — This script is automatically run — PAGESIZE 0 would suppress headings SET pagesize 100 SET linesize 140 SET FEEDBACK ON SET HEADING ON — to void filling spooled lines with blanks SET TRIMSPOOL ON SET TRIM ON
— sql prompt to show connection specific details SET SQLPROMPT “\_USER’@’\_CONNECT_IDENTIFIER> ”
— some formats for often used admin views and tables COLUMN object_name FORMAT A25 COLUMN owner FORMAT A12 COLUMN username FORMAT A20 COLUMN tablespace_name FORMAT A20 COLUMN segment_name FORMAT A30 COLUMN object_name FORMAT A30 COLUMN table_name FORMAT A25 COLUMN STATUS FORMAT A10 COLUMN EXTERNAL_NAME FORMAT A20 COLUMN PROFILE FORMAT A12 COLUMN TEMPORARY_TABLESPACE FORMAT A20 COLUMN DEFAULT_TABLESPACE FORMAT A20 COLUMN ACCOUNT_STATUS FORMAT A25 `

Categories
Oracle Oracle Datenbank Tablespaces

Beenden des Backup Mode von Datendateien / Tablespaces

Ist ein Tablespace im Backup Mode verblieben, obwohl das Backup nicht mehr läuft, so muss der Modus manuell umgesetzt werden. Zuerst gilt es herauszufinden, welcher Tablespace oder welche Datendatei im Backup Modus ist. Dazu kann wie im Artikel Oracle Backup Mode auflisten beschrieben vorgegangen werden.

Meist möchte man nur die Tablespaces wissen, da brbackup und andere Tools nicht einzelne Datendateien in den Backup Modus setzen, sondern den gesamten Tablespace.

Achtung: Bitte unbedingt prüfen, ob wirklich kein Backup läuft!

> SELECT d.tablespace_name, b.time, b.status FROM dba_data_files d, v$backup b WHERE d.file_id = b.FILE# AND b.STATUS = ‘ACTIVE’;`TABLESPACE_NAME TIME STATUS
—————- ————— ———
PSAPSR3731 15-JUL-15 ACTIVE
PSAPSR3731 15-JUL-15 ACTIVE
PSAPSR3731 15-JUL-15 ACTIVE
PSAPSR3731 15-JUL-15 ACTIVE
PSAPSR3731 15-JUL-15 ACTIVE
PSAPSR3731 15-JUL-15 ACTIVE
PSAPSR3731 15-JUL-15 ACTIVE
PSAPSR3731 15-JUL-15 ACTIVE
PSAPSR3731 15-JUL-15 ACTIVE
PSAPSR3731 15-JUL-15 ACTIVE
PSAPSR3731 15-JUL-15 ACTIVE
PSAPSR3731 15-JUL-15 ACTIVE
PSAPSR3731 15-JUL-15 ACTIVE
PSAPSR3731 15-JUL-15 ACTIVE
14 rows selected.`

Categories
Oracle Oracle Datenbank

Mit SQLPLUS direkt HTML Dateien erzeugen

Seit Oracle 8i gibt es eine elegante Methode mit SQL*Plus direkt HTML Code zu erzeugen. Dazu wird die HTML Ausgabe mit

SET MARKUP HTML ON

aktiviert. Deaktiviert wird die HTML Ausgabe mit:

SET MARKUP HTML OFF SPOOL OFF

SQL Statement
Dieses Beispiel gibt das SQL Statement show user als HTML Datei /tmp/ts_size.htm aus.

SET MARKUP HTML ON SPOOL ON –
HEAD “<title>SQL*Plus Report</title> –
<STYLE TYPE=’TEXT/CSS’> –
<!–BODY {background: ffffc6} –> –
</STYLE>”
BODY “TEXT=’#FF00Ff'” –
TABLE “WIDTH=’90%’ BORDER=’5′”
 
SET ECHO OFF
SPOOL /tmp/ts_size.htm
 
show user;
 
SPOOL OFF
SET MARKUP HTML OFF
SET ECHO ON

Details verrät die Oracle Dokumentation: Generating HTML Reports from SQL*Plus

Categories
Oracle Oracle Datenbank Shell Programmierung

SQL*Plus Variablen definieren und verwenden

Um SQL Statements dynamischer zu gestalten, sind oft Abfragen zu generieren, deren Wert von einer Variablen abhängen. In SQL werden Variablen über das Kommando DEFINE definiert und mit &VARIABLE abgefragt.

SQL Statements:

SET VERIFY OFF
define col=TABLESPACE_NAME
select &col from dba_tablespaces;

Categories
Oracle Oracle Datenbank SAP Tablespaces

Freier Speicherplatz in SAP/Oracle Tablespaces

Dieser Post erklärt die Ausgabe der Größe und des freien Speicherplatzes von Tablespaces für Oracle Datenbanken mit Hilfe von SQL Befehlen.

Beschreibung
Für den Oracle Datenbankadministrator ist die Information über die Größe der Tablespaces und des freien Speicherplatzes in Ihnen essentiell wichtig. Das SQL Skript erzeugt eine formatierte und sortierte Ausgabe der gesamten Größe, des freien Speicherplatzes und der Benutzung in Prozent.

Hier können sie das zugehörige SQL_Skript herunterladen: ts1_free.sql

SQL Statement

tti "Tablespace Auslastung"
col "MB frei" format 999999.99
col "MB gesamt" format 999999.99
col Tablespace format a15

select ddf.tablespace_name “Tablespace”,
ddf.bytes/1024/1024 “MB gesamt”, sum(dfs.bytes)/1024/1024 “MB frei”,
round((ddf.bytes-sum(dfs.bytes))*100/ddf.bytes) “Used%”

from dba_free_space dfs,

<

div class=”command2″>(select tablespace_name, sum(bytes) bytes
from dba_data_files
group by tablespace_name ) ddf
where dfs.tablespace_name = ddf.tablespace_name
and ddf.tablespace_name like UPPER(‘%’)
group by ddf.tablespace_name, ddf.bytes order by “Used%”;

Beispiel Ausgabe

Tue May 28 Tablespace Auslastung page 1
Tablespace MB gesamt MB frei Used%
PSAPLOADD 49.99 49.86 0
PSAPROLLBIG 1999.99 1999.98 0
PSAPTEMP 1623.99 1623.98 0
PSAPLOADI 20.00 19.86 1
PSAPPROTI 309.99 269.33 13
PSAPEL46CI 400.00 329.92 18
PSAPPROTD 449.99 319.26 29
PSAPSOURCED 349.99 250.24 29
PSAPDOCUI 109.99 70.38 36
SYSTEM 749.99 453.02 40
PSAPROLL 799.99 462.80 42
PSAPUSER1D 199.98 101.30 49
PSAPUSER1I 299.98 147.70 51
PSAPDOCUD 149.99 72.02 52
PSAPDDICI 619.99 263.89 57
PSAPCLUI 199.99 83.59 58
PSAPDDICD 949.99 349.14 63
PSAPSOURCEI 249.99 90.32 64
PSAPCLUD 1323.98 420.91 68
PSAPPOOLD 5110.52 1631.48 68
PSAPES46CD 9379.98 2326.44 75
PSAPPOOLI 3335.91 764.48 77
PSAPES46CI 5063.98 1035.93 80
PSAPSTABD 7544.81 1513.48 80
PSAPBTABI 18239.93 3292.70 82
PSAPEL46CD 1249.99 207.78 83
PSAPSTABI 5306.58 699.70 87
PSAPBTABD 29429.88 2672.33 91
Categories
Oracle Oracle Datenbank Tablespaces

Oracle Backup Mode auflisten

Die folgenden SQL Statements liefern eine Liste aller Tablespaces und der zugehörigen Datendateien, die sich im Backupmode befinden. Bitte auch den Artikel Beenden des Backup Mode von Datendateien / Tablespaces beachten.

SQL> col status format a11
set line 100
tti "Active Backup Datafiles"
set pagesize 100
set linesize 120
col file_name format a50
col tablespace_name format a16
select d.file_name, d.tablespace_name, b.status, b.time
from v$backup b, dba_data_files d
where b.status='ACTIVE' and d.file_id=b.file#;

tti off

Die Spalte TIME gibt an, seit wann die Datendatei in diesem Modus ist.

Beispiel Ausgabe

Mon May 13 Active Backup Datafiles page 1
FILE_NAME TABLESPACE_NAME STATUS TIME
/oracle/HS1/sapdata2/btabi_1/btabi.data1
/oracle/HS1/sapdata3/btabd_1/btabd.data1
/oracle/HS1/sapdata2/btabd_2/btabd.data2
/oracle/HS1/sapdata4/es46ci_1/es46ci.data1
/oracle/HS1/sapdata4/es46ci_2/es46ci.data2
/oracle/HS1/sapdata2/es46cd_1/es46cd.data1
/oracle/HS1/sapdata6/es46cd_2/es46cd.data2
/oracle/HS1/sapdata3/es46cd_3/es46cd.data3
/oracle/HS1/sapdata2/btabd_3/btabd.data3
oracle/HS1/sapdata3/es46cd_4/es46cd.data4
/oracle/HS1/sapdata2/btabi_2/btabi.data2
/oracle/HS1/sapdata4/es46ci_3/es46ci.data3
/oracle/HS1/sapdata3/es46cd_5/es46cd.data5
/oracle/HS1/sapdata2/btabi_3/btabi.data3
14 rows selected.
PSAPBTABI
PSAPBTABD
PSAPBTABD
PSAPES46CI
PSAPES46CI
PSAPES46CD
PSAPES46CD
PSAPES46CD
PSAPBTABD
PSAPES46CD
PSAPBTABI
PSAPES46CI
PSAPES46CD
PSAPBTABI
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
13-MAY-02
13-MAY-02
13-MAY-02
13-MAY-02
13-MAY-02
13-MAY-02
13-MAY-02
13-MAY-02
13-MAY-02
13-MAY-02
13-MAY-02
13-MAY-02
13-MAY-02
13-MAY-02

Achtung: Sollte die Oracle Datenbank nicht mehr im Status OPEN sein, so kann dieser Befehl nicht ausgeführt werden, da die dba_* Views nicht verfügbar sind. In diesem Fall bitte die folgende Abfrage mit v$ Views verwenden.

col name format a50
select vb.FILE#, vd.NAME, vb.STATUS, vb.TIME
from v$backup vb, v$datafile vd
WHERE vd.FILE#=vb.FILE# and vb.STATUS='NOT ACTIVE';
FILE# NAME STATUS TIME


  1 D:\ORACLE\HS1\SAPDATA1\SYSTEM_1\SYSTEM.DATA1       NOT ACTIVE  14-JUL-15
  2 D:\ORACLE\HS1\SAPDATA1\SYSAUX_1\SYSAUX.DATA1       NOT ACTIVE  14-JUL-15</code>

Um den Backup Modus zu beenden, sind die SQL Befehle

ALTER TABLESPACE <tablespace Name> END BACKUP;
ALTER DATABASE DATAFILE<Name und Pfad der Datendatei> END BACKUP;

zu verwenden.
Achtung: Bitte unbedingt prüfen, ob wirklich kein Backup läuft!