SQL-Skripte auf einem Oracle-Server

Hi,

ich bin Studentin und soll Skripte schreiben, die db-files auf einem Oracle-Server verschieben. Dabei ist mir nicht ganz klar wie ich da vorgehen soll.
Ich dachte daran erst die files über eine .bat-Datei auf Betriebssystemebene zu verschieben, ich weiss aber nicht wie ich mich auf dem Server zuvor anmelden muss. Muss ich mich da einfach erst an der DB anmelden mit sys@change_on_install@Oracle_sid?
Und ich weiss nicht genau wie ich die Änderungen in einer Controldatei vornehmen muss, weil es z.B. mehrere log-Files gibts. Und wie ich den neuen namen der dbfiles in der Controldatei festlege. Muss ich die log-files, datafiles etc. aus der db holen bei der ich angemeldet bin und die dann umbenennen, oder wie funktioniert das?
Wenn es hilft würde ich Teile meiner angefangenen Skripts hier hineinkopieren.
Ich habe absolut noch kein Gefühl für sowas. Mir fehlt die Vorstellung darüber wie solche Prozesse auf dem Server ablaufen.

LG Tina

Hallo Tina!

Da wird die DB aber richtig böse werden, wenn Du ihr die Datenfiles auf OS-Ebene verschiebst und ihr das nicht entsprechend mitteilst. Schau mal in die Doku unter „ALTER DATABASE RENAME FILE“. Hoffe das hilft.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Martin,

ja mein Betreuer hat gemeint ich soll aus einer sql-datei zwei .bat-Dateien erzeugen, die eine heisst rename.bat und soll mit move-Befehlen die DB-files auf eine andere Platte verschieben und die Mitteilung erfolg ja dann aufgrund der Änderung des Controlfiles, oder nicht? Ja ich schau mal in der Doku, aber ich check das trozdem nicht ganz.

Gruss Tina

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

hab das mit der alter database rename file gelesen. D.H. ich muss das auf alle Fälle machen und zusätzlich das Controlfile neu erstellen? Der mist ist dass die meisten Dokus und Bücher nicht für Anfänger geschrieben wurden. ;-(
Weisst du zufällig, wie ich mir eventuell ne kleine Oracle-Testdatenbank auf meinem Rechner installieren könnte?

Gruss Tina

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hi!

Weisst du zufällig, wie ich mir eventuell ne kleine
Oracle-Testdatenbank auf meinem Rechner installieren könnte?

ist eigentlich dabei: connecte dich mal als scott/tiger

grüße,
tomh

Hallo Tina!

D.H. ich
muss das auf alle Fälle machen und zusätzlich das Controlfile
neu erstellen? Der mist ist dass die meisten Dokus und Bücher
nicht für Anfänger geschrieben wurden. ;-(
Weisst du zufällig, wie ich mir eventuell ne kleine
Oracle-Testdatenbank auf meinem Rechner installieren könnte?

Gruss Tina

Dein Batch hat folgendes zu tun:

  1. Die Files physisch kopieren (DOS: copy c:\alterpfad\dbfile1.dbf d:\neuerpfad\dbfile2.dbf)
  2. Der Datenbank selbiges mitteilen (ein Script in SQL*Plus ausführen, das den ALTER DATABASE …) macht.
  3. Falls nötig/gewünscht die alte Datei löschen (würde ich aber erst machen, wenn sichergestellt ist, dass alles gut gegangen ist)

Gruß,
Martin

Hallo Martin,

also die Skripte sollen auf dem Server laufen mit Oracle 8i, daher als erstes führe ich folgendes Skript aus:
set ORACLE_SID=

sqlplus internal@%ORACLE_SID%
@02_shutdown.sql
start 03_rename.bat
sqlplus internal@%ORACLE_SID%
@04_controlfile.sql

Das 02_shutdown.sql beihaltet nur:
connect / as sysdba
shutdown immediate

Das 03_rename.bat beinhaltet:
nur die move befehle, es werden die files aus v$dbfile,v$logfile,v$controlfile und v$tempfile verschoben.

Tja und das 04_controlfile.sql beinhaltet:
STARTUP NOMOUNT–Startet nur die Instance ( SGA und Prozesse ). Notwendig um eine neue DB anzulegen.

CREATE CONTROLFILE REUSE SET DATABASE „“ RESETLOGS NOARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 4
MAXDATAFILES 254
MAXINSTANCES 1
MAXLOGHISTORY 113
LOGFILE
select ‚GROUP‘ || group# || ’ ’ || ‚‘’’ || ‚D:\database\cosd07am‘ || substr(member,15) || ‚‘’’ || ’ SIZE 8M’ from v$logfile;
–GROUP 1 ‚F:\LOGS\LOG1.ORA‘ SIZE 8M,
–GROUP 2 ‚G:\LOGS\LOG2.ORA‘ SIZE 8M
DATAFILE
select ‚‘’’ || ‚D:\database\‘ || substr(name,19) || ‚‘’’ from v$dbfile;
CHARACTER SET WE8ISO8859P1;
– Recovery is required if any of the datafiles are restored backups,
–# or if the last shutdown was not normal or immediate.
–RECOVER DATABASE USING BACKUP CONTROLFILE
–# Database can now be opened normally.
#Mit der Option resetlogs wird er Inhalt der aktuellen Redolog-Files ignoriert.
ALTER DATABASE OPEN RESETLOGS;
–# Commands to add tempfiles to temporary tablespaces.
–# Online tempfiles have complete space information.
–# Other tempfiles may require adjustment.
–select v$tablespace.name, v$tempfile.name from v$tablespace, v$tempfile where v$tablespace.ts# = v$tempfile.ts#;

select ‚alter tablespace ’ || v$tablespace.name || ’ add tempfile ’ || ‚‘‘’ || v$tempfile.name || ‚‘’ reuse;’ from v$tablespace, v$tempfile where v$tablespace.ts#=v$tempfile.ts#;
–ALTER TABLESPACE TEMP ADD TEMPFILE ‚D:\DATABASE\TMP1.ORA‘ REUSE;
–ALTER TABLESPACE TS_TEMP ADD TEMPFILE ‚D:\DATABASE\TS_TEMP1.DBF‘ REUSE;
–# End of tempfile additions.

select name from v$database;
select * from global_name;

shutdown immediate
startup restrict
startup

Jetzt weiss ich nicht ob ich noch ein anderes Skript schreiben muss mit der alter database Methode. Und wenn ich dies mache, muss ich das Controlfile trotzdem neu schreiben? Und ich weiss nicht wie ich im Controlfile die richtigen dateien mit dem neuen Pfad reinschreiben soll, da der Pfad immer eine unterschiedliche Länge hat und die Skripte auf mehreren Servern laufen sollen.

Hilfe.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]