Benutzer-Werkzeuge

Webseiten-Werkzeuge


engine:procedures:mi_loaddatabase_ad

mi_LoadDatabase_Ad

Stellt eine Datenbank (darf KEINE ASE-System-DB wie z.B. „master“ sein !) aus einem (Full-)Backup wieder her.

Um die Prozedur ausführen zu können, muß der Benutzer die sogenannte „sa_role“ („Rolle“ im ASE) besitzen ! Zur Wiederherstellung einer Datenbank reicht eigentlich auch die „oper_role“, aber i.d.R. müssen wir noch weitere Aktionen durchführen (s. z.B. Parameter „KillProcessesOnDBFirst“), die „sa_role“ erfordern, also vereinfachen wir das Ganze und setzen nur diese eine „Rolle“ voraus.

Anmerkungen und Hinweise zum Parameter „DeviceNames“ :

1.) Die Sicherungsdateien („devices“), die das Backup enthalten, sind in „DeviceNames“ (durch „DeviceNamesSeparatedBy“ getrennt) anzugeben - derzeit sind maximal 10 „devices“ erlaubt und der Name eines „devices“ darf nicht mehr als 100 Bytes belegen !

2.) Bei Angabe von „NULL“ gehen wir von einem einzigen „device“ aus, und zwar mit dem Namen „<DatabaseName>_01_full.dump“.
Hintergrund für diesen „fallback“ ist, daß wir davon ausgehen, daß eine „dStore Engine“-Datenbank wiederhergestellt werden soll, die mit mi_DumpDatabase_Ad (die entsprechende „device“-Namen erzeugt, s. Doku dort) gesichert wurde.

3.) Ein „device“-Name darf nur aus Zahlen, den Buchstaben A bis Z (Groß- und Kleinschreibung egal) sowie Leertasten, den „slashes“ („/“ und „\“), Unter- und Bindestrichen („_“, „-“) sowie Punkten („.“) bestehen.

4.) Sicherungsdateien von Datenbanken im ASE können „logisch“ definiert (in der Tabelle „master..sysdevices“) oder sie können „physikalisch“ (Dateiname inkl. Pfad im zugrunde liegenden Betriebssystem) angegeben sein. Falls „NULL“ für „DevicePath“ übergeben wird, gehen wir ZUERST davon aus, daß die „devices“ (in „DeviceNames“ bzw. „<DatabaseName>_01_full.dump“) LOGISCH
angegeben sind. Werden wir NICHT fündig, gehen wir davon aus, daß „DatabaseName“ eine „dStore Engine“-Datenbank ist, die mit mi_DumpDatabase_Ad gesichert wurde, weswegen wir den im „Settings“-Eintrag zum Schlüssel „DumpPath_FullDumpOnly“ oder (falls zu „DumpPath_FullDumpOnly“ nichts konfiguriert ist) „DumpPath“ konfigurierten Wert als Pfad wählen.
Schlägt auch dies fehl (weil z.B. „DatabaseName“ gar keine „Engine“ ist, sprich es keine entsprechende „Settings“-Tabelle gibt oder weil die DB „offline“ ist oder weil keiner der Einträge konfiguriert ist), gibt es einen Fehler !

5.) Wenn mehrere „devices“ in „DeviceNames“ angegeben sind, müssen natürlich ALLE entweder „logisch“ oder „physikalisch“ (s. Punkt 4 oben) sein !

Anmerkungen zum Parameter „AdjustDBUserToLogins“ :

Falls das Backup von einem ANDEREN ASE-Server stammt, gibt es häufig folgende Situation : Die Datenbankbenutzer oder zumindest einige sind keinem oder einem falschen „login“ zugeordnet. Das kommt daher, weil die „logins“ in der „master“-Datenbank gespeichert werden und die Zuordnung „Benutzer zu Login“ über IDs erfolgt (und die sind halt auf dem ASE-Server, von dem das Backup stammt, ANDERS als auf dem aktuellen ASE-Server). Nach der Wiederherstellung gleichen wir daher (natürlich nur wenn „OnlineDatabaseAfterLoad = 1“ - sprich die DB nach dem Laden auch zugreifbar - ist) die Benutzer-Login-Zuordnung ab, sofern „AdjustDBUserToLogins = 1“ ist. D.h. wir versuchen, über den NAMEN (1:1-Zuordnung) zum jeweiligen Benutzer das entsprechende Login zu finden - alle Benutzer, zu denen KEIN gleichnamiges Login existiert, werden gelöscht !

Noch zwei weitere Besonderheiten, deren wir uns im Fall „AdjustDBUserToLogins = 1“ annehmen :

1.) Manchmal lädt man die Produktions-DB in eine Test- oder Entwicklungs-DB, weshalb der Super-Admin (Name entspricht dem Datenbanknamen) dann häufig fehlt (sofern nicht zufällig schon in der Produktions-DB ein Benutzer mit dem Namen der Test-/Entwicklungs-DB angelegt ist). Daher sorgen wir dafür, daß ein Super-Admin vorhanden ist - nätürlich nur, wenn auch ein gleichnamiges login existiert (was aber ja immer der Fall sein sollte, sofern die Engine korrekt installiert wurde).
Hinweise :
a) Da wir das Kennwort des Super-Admins natürlich NICHT kennen, ist es uns aber natürlich NICHT möglich, dafür zu sorgen, daß zum Super-Admin eine entsprechende Person des speziellen Typs „dStoreUser“ existiert (wir könnten natürlich eine anlegen, aber die Passwort-Eigenschaft wäre falsch, weil wir ja irgendeinen „dummy“-Wert nehmen müssten) !
b) Wir sorgen sowohl dafür, daß der Super-Admin in „sysusers“ von „DatabaseName“ vorhanden ist als auch in „UserInfo“.

2.) Wenn eine Datenbank auf einen anderen Server umgezogen wird, treten zwei Probleme auf :
A) Die Logins müssen separat übertragen werden (weil in der „master“-DB), was wir hier natürlich NICHT leisten können
B) Die Benutzer korrigieren wir in „DatabaseName“ selbst ja wie beschrieben, aber : Damit alle Funktionalitäten zur Verfügung stehen, müssen die Benutzer auch in den „dstore“-DBs („dstore“, „dstoreifin“ etc.) existieren (für Prozeduren nämlich, die auf Tabellen in diesen Datenbanken zugreifen). Und genau dafür sorgen wir (wenn „AdjustDBUserToLogins = 1“ ist

Anmerkung zum Parameter „CompressLevel“ :

Falls die Sicherungsdatei(en) komprimiert ist bzw. sind, wobei die „with compression“-Option beim Erstellen des backups verwendet wurde, wird dies automatisch (vom ASE-Backup-Server) erkannt und der Parameter „CompressLevel“ braucht nicht belegt zu werden. Falls jedoch bei der Erstellung die (veraltete) Syntax „compress::<Kompressions-Level>::<Pfad inkl. Dateiname>“ verwendet wurde, muß diese bei der Wiederherstellung bekannt sein (kann also nicht automatisch ermittelt werden). Daher ist in einem solchen Fall der „Kompressions-Level“ über den Parameter „CompressLevel“ anzugeben.
Hinweis : Wenn das backup mit mi_DumpDatabase_Ad gemacht wurde, wobei der dortige Parameter „CompressLevel“ übergeben wurde, muß man beim Wiederherstellen durch diese Prozedur hier „CompressLevel“ NICHT angegeben (weil die Implementierung in mi_DumpDatabase_Ad die „with compression“-Option benutzt) !

HTTP-MethodPOST
HTTP-AuthOptional
Tags
Engine-Kategoriesystem administration
Engine-TypDaten-Änderung
Letzte Aktualisierung7.0.8 (2015-08-21)

Parameter

Name 1) Standard-Wert Beschreibung 2) SQL-Datentyp3) ab Version
DatabaseName Name der herzustellenden Datenbank (keine System-DB wie „master“). Die Wiederherstellung DIESER DB hier muß entweder über eine andere „Engine“ oder über die Prozedur „_mi_LoadDatabase“ in der „dstore“-DB (hat dieselben Parameter) erfolgen .
varchar(50)6.5.2
DeviceNamesNULL Dateinamen (durch „DeviceNamesSeparatedBy“ getrennt, max. 10), die das Backup enthalten. Ein Name darf jeweils nicht mehr als 100 Bytes belegen. Falls „NULL“, gehen wir von einem einzigen „device“ mit dem Namen „<DatabaseName>_01_full.dump“ aus.
varchar(1000)6.5.2
DeviceNamesSeparatedBy',' Zeichenkette, durch die evtl. mehrere der Sicherungsdatei-Namen in „DeviceName“ voneinander getrennt sind
varchar(4)6.5.2
DevicePathNULL Verzeichnispfad im zugrunde liegenden OS für die in „DeviceNames“ angegeb. Sicherungsdateien. Wird „NULL“ angegeben, gehen wir von „logischen devices“ aus bzw. versuchen, den Pfad über „Settings“ auszulesen (s. Anmerkungen zum Parameter „DeviceNames“).
varchar(255)6.5.2
KillProcessesOnDBFirst1 Da die Wiederherstellung fehlschlägt, wenn es Prozesse gibt, die aktuell auf „DatabaseName“ verbunden sind, beenden wir vorher alle solche Prozesse. Möchte man das nicht, ist hier „0“ zu übergeben.
bit6.5.2
OnlineDatabaseAfterLoad1 Die Datenbank wird nach dem Reinladen des backups automatisch „online“ gesetzt. Falls das nicht gewünscht ist, hier „0“ übergeben.
bit6.5.2
AdjustDBUserToLogins1 Wird nur beachtet, wenn „OnlineDatabaseAfterLoad = 1“ ist ! Wir löschen DB-Benutzer ohne „passendes“ (1:1 über den Name) ASE-Login bzw. versuchen, eine falsche Zuordnung zu korrigieren (s. Beschreibung). Ist das nicht gewünscht, hier „0“ angeben !
bit6.5.2
CompressLevelNULL Wenn die Datei(en) mit „compress::<ComprLevel>::…“ gesichert wurde(n), hier <ComprLevel> angegeben. Mögl. Werte :
- „0“/„NULL“ : KEINE Kompr. / „with compression“ wurde verw. (was autom. erkannt wird)
- „1“ : min. Kompr.

- „9“ : max. Kompr.
tinyint6.5.2

Rückgabe

Die Prozedur hat keine Rückgaben.

Output-Parameter

Die Prozedur hat keine Output-Parameter.

Mögliche Return-Codes

Code Beschreibung Quelle 4)
-569Der Benutzer hat kein Ausführungsrecht für die Prozedurnur indirekt
-567Die Prozedur darf z. Zt. nicht ausgeführt werdennur indirekt
-566Die Prozedur darf mit den übergebenen Parametern nicht ausgeführt werdennur indirekt
-535Das Datum liegt nicht in der Vergangenheitnur indirekt
-530Der Wert ist nicht konvertierbarnur indirekt
-510Der Benutzer ist nicht registriertnur indirekt
-504Es ist ein Problem aufgetreten, das nicht gelöst werden kann, Prozedur wird daher abgebrochennur indirekt
-502Die Parameter-Werte der Prozedur können nicht verarbeitet werden (kein passendes Trennzeichen)nur indirekt
-500Falsche Parameterdirekt und indirekt

XML-Schema

Die Rückgabe erfolgt als XML-Dokument welches gegen das Schema Response/EngineProcedure_v1_0.xsd validiert.

Historie

7.0.8 2015-08-21Fehler korrigiert : Daß der Super-Admin im Fall „AdjustDBUserToLogins = 1“ sowohl in „sysusers“ als auch in
„UserInfo“ vorhanden ist, muß in der hier aufgerufenen „dstore.dbo._mi_LoadDatabase“ erledigt werden [wg. Rechten]
7.0.7 2015-01-291. Ab jetzt sorgen wir [wenn möglich] auch dafür, daß der Super-Admin in „UserInfo“ registriert ist
2. Interne Änderung : Datentyp-Erweiterung des „ReferenceKey“ [für „_mi_StartProcedure“-Aufruf]
7.0.4 2014-03-19Ab jetzt wird im Fall „AdjustDBUserToLogins = 1“ auch dafür gesorgt, daß jeder Benutzer auch in den „dstore“-
Datenbanken [in der „public“-Gruppe] existiert [relevant wenn das dump auf einem anderen Server reingeladen wird]
7.0.3 2013-12-13Ab jetzt wird im Fall „AdjustDBUserToLogins = 1“ auch dafür gesorgt, daß garantiert ein „Super-Admin“-Benutzer
existiert
6.5.4 2013-04-29Korrektur der Doku bzgl. Parameter „CompressLevel“
6.5.2 2013-02-26Erstmalig in dieser Version erstellt

Code-Snippets

Engine Playground

Der folgende Link öffnet in einem separaten Fenster den Engine Playground der fest mit dem dbap-demo System verbunden ist:

cURL

Unformatierte Ausgabe:

curl -X POST  'http://<partner>-<project>.dstore.de/default/engine/mi_LoadDatabase_Ad?DatabaseName=<value>'

Mit xmllint 5) formatierte Ausgabe:

curl -X POST  'http://<partner>-<project>.dstore.de/default/engine/mi_LoadDatabase_Ad?DatabaseName=<value>' | xmllint --format -
dStore_php
use dStore_php\WebService;
 
$service = new WebService\Service( WebService\Scheme::HTTP,'<partner>-<project>.dstore.de', 80);
 
$request = new WebService\Requests\Engine\Procedure\Request(
			new WebService\Requests\AccessData('default'),
	'mi_LoadDatabase_Ad',
		array(
			'DatabaseName' => '<value>',
			// 'DeviceNames' => NULL,
			// 'DeviceNamesSeparatedBy' => ',',
			// 'DevicePath' => NULL,
			// 'KillProcessesOnDBFirst' => 1,
			// 'OnlineDatabaseAfterLoad' => 1,
			// 'AdjustDBUserToLogins' => 1,
			// 'CompressLevel' => NULL
		)
);
 
$service->execute($request);
 
			$xml_result = $request->getResponse()->getBody()->toSimpleXmlDocument();
			$ResultSet = $xml_result->getRowsAsArray();
engine/execute

XML zur Ausführung mit der Methode engine/execute, z.B. per

curl --header 'Content-Type: application/xml' -X POST 'http://<partner>-<kunde>.dstore.de/default/engine/execute' -d '<xml-daten>'
<?xml version="1.0" encoding="UTF-8"?>
<ListOfBatches>
	<Batch No="0">
		<Procedure Name="mi_LoadDatabase_Ad">
			<Parameters>
				<Parameter Name="DatabaseName"><!-- varchar value --></Parameter>
				<!-- <Parameter Name="DeviceNames">NULL</Parameter> -->
				<!-- <Parameter Name="DeviceNamesSeparatedBy">','</Parameter> -->
				<!-- <Parameter Name="DevicePath">NULL</Parameter> -->
				<!-- <Parameter Name="KillProcessesOnDBFirst">1</Parameter> -->
				<!-- <Parameter Name="OnlineDatabaseAfterLoad">1</Parameter> -->
				<!-- <Parameter Name="AdjustDBUserToLogins">1</Parameter> -->
				<!-- <Parameter Name="CompressLevel">NULL</Parameter> -->
			</Parameters>
		</Procedure>
	</Batch>
</ListOfBatches>
1)
Pflichtparameter sind unterstrichen
4)
direkt meint „von der Prozedur selber“ und indirekt meint „von intern aufgerufenen Unterprozeduren“
5)
I.d.R. auf Unix-artigen Systemen bereits installiert, Bestandteil der libxml2, siehe http://www.xmlsoft.org
engine/procedures/mi_loaddatabase_ad.txt · Zuletzt geändert: 11.01.2016 (Externe Bearbeitung)