Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: gstueb am 10.06.16 - 15:40:12

Titel: Datenbank per Script verschieben
Beitrag von: gstueb am 10.06.16 - 15:40:12
Hallo,

kann ich eine Datenbank per Script in ein anderes Verzeichnis auf dem gleichen Server verschieben? Ich finde auf Anhieb keine Methode dazu.

Klar, ich könnte eine Replik erstellen und dann das Original zu löschen... aber ein einfaches verschieben, so wie man es von Hand im Administrator machen kann, wäre mir lieber.

Danke & Grüße,
Gregor

Titel: Re: Datenbank per Script verschieben
Beitrag von: koehlerbv am 10.06.16 - 15:48:01
Hierzu müsstest Du einen AdminP-Request ("mit allem und scharf!") erstellen. Domino-bezogene LS-Befehle gibt es für den Client nicht.

Bernhard
Titel: Re: Datenbank per Script verschieben
Beitrag von: eknori (retired) am 10.06.16 - 20:48:04
Adminp ist die erste Wahl. Es gibt eine API funktion, mit der man das sehr elegant lösen kann. Damit lässt sich eine 64gb db im null komma nix auf dem gleichen Server in ein anderes Verzeichnis verschieben/ umbenennen.
Auch das Anlegen einer .nrf lässt sich damit erledigen. ( nein, dass kann die Funktion nicht )

Habe ich momentan nicht zur Hand, und ist, soweit ich weiss auch undokumentiert.
Ich kann das aber mal zusammenstellem (nach dem Wochenende)


ist seit R4 vorhanden und wurde in R5 in die API aufgenommen.

STATUS LNPUBLIC NSFDbRename (const char far *from, const char far *to);
Titel: Re: Datenbank per Script verschieben
Beitrag von: eknori (retired) am 10.06.16 - 20:50:01
ist auch DAOS save
Titel: Re: Datenbank per Script verschieben
Beitrag von: eknori (retired) am 10.06.16 - 20:57:42
http://www-12.lotus.com/ldd/doc/tools/c/6.0.2/api60ref.nsf/0/0C012179ED1A0BDE85256C6B00740197?OpenDocument

Das kann man sehr leicht in LS umsetzten.

Man kann sich auch sehr schön eine DLL / .so bauen, die die nicht von der IBM veröffentlichten Funktionen nach LS. / Java exposed. Wenn man es kann ..

Documentiert/Undocumentiert. Schert mich einen Dreck. Habe mit IBM dev folk gesprochen. Die verwenden das Zeugs. Gür die gibt es diese Diskussion gar. nicht
Titel: Re: Datenbank per Script verschieben
Beitrag von: koehlerbv am 10.06.16 - 21:42:36
Documentiert/Undocumentiert. Schert mich einen Dreck. Habe mit IBM dev folk gesprochen. Die verwenden das Zeugs. Gür die gibt es diese Diskussion gar. nicht
Es kann ja sein, dass man kleine unangenehme Erlebnisse ausblendet nach einer Weile: Aber ist das überhaupt schon mal schief gegangen? vor x Jahren schrillten bei mir auch die Alarmglocken, wenn etwas funktionierte, wovon die Dokus nichts erwähnten (und bei anderen Produkten - fast immer bestätigt - tut es das auch heute noch), aber bei Notes / Domino Stuff gilt ja die Nutzung durch IBM-Spezis selbst schon als nachgewiesene und stabile Beglaubigung.

Bernhard
Titel: Re: Datenbank per Script verschieben
Beitrag von: Pyewacket am 10.06.16 - 23:20:41
Das NSFDbRename funktioniert gut. Man kann damit auch vom Client
aus Datenbanken auf dem Server verschieben. Quelle und Ziel muss jeweils im
Format Servername!!Filepath angegeben werden wobei Servername bei Quelle und Ziel identisch sein muss.
Wenn man als Ziel beim Verzeichnis ein führendes \ angibt kann die DB aus Notesdata rausgeschoben werden,
der Server kennt sie danach nicht mehr.
Einschränkungen sind mir bisher drei aufgefallen:
- Die DB darf nicht im Zugriff sein, eventuell ein paar mal probieren.
- Das Zielverzeichnis muss bereits existieren
- Man kann damit nicht Gross/Kleinschreibung (bei Unix relevant) korrigieren, das geht nur über einen Zwischenschritt mit anderem tempnamen.

Peter
Titel: Re: Datenbank per Script verschieben
Beitrag von: eknori (retired) am 11.06.16 - 07:43:05
Code
#### DECLARATIONS ####

Declare Function W32_NSFDbRename Lib "nnotes.dll" Alias "NSFDbRename" _
(Byval OldDatabase As String, _
Byval NewDatabase As String) As Integer

Declare Function W32_OSLoadString Lib "nnotes.dll" Alias "OSLoadString" _
(Byval hModule As Long, _
Byval StringCode As Integer, _
Byval retBuffer As String, _
Byval BufferLength As Integer) As Integer

#### SCRIPT CODE ####

Sub Initialize
 
 Dim iret As Integer
 Dim szError As String * 256
 Dim ErrorString As String
 Dim StrLen As Integer
 Dim nnServer As NotesName
 Dim oldDatabase As String
 Dim newDatabase As String
 
 Set nnServer = New NotesName("My Server/My Org")
 oldDatabase = "mailoldmailfile.nsf"
 newDatabase = "mailnewmailfile.nsf"
 
'if a server is not specified, then only parse the database information to the API function,
'not the server if a server is specified, then parse both the server and database to 
'the API function
 
 If nnServer.Canonical = "" Then
  iret = W32_NSFDbRename(oldDatabase, newDatabase)
 Else
  iret = W32_NSFDbRename(nnServer.Canonical & "!!" & oldDatabase, nnServer.Canonical & "!!" & newDatabase)
 End If
 
'If an error occurs, then convert and display the error number and error message
 
 If iret <> 0 Then
  ErrorString = ""
  szError = String$(256, 0)
  StrLen = W32_OSLoadString(0, iret, szError, 255)
  If Strlen <> 0 Then ErrorString = Left$(szError, StrLen)
  Msgbox "Error " & iret & " (" & ErrorString & ")",,"Lotus Notes Error"
 End If

End Sub
Titel: Re: Datenbank per Script verschieben
Beitrag von: eknori (retired) am 11.06.16 - 08:11:47
Zitat
- Man kann damit nicht Gross/Kleinschreibung (bei Unix relevant) korrigieren, das geht nur über einen Zwischenschritt mit anderem tempnamen.

Du musst doch nur den lower-case name als target angeben.

Zumindest sehe ich in meiner BCC DbTool Implementierung nichts anderes.
Titel: Re: Datenbank per Script verschieben
Beitrag von: Pyewacket am 11.06.16 - 10:17:34
Es ist schon eine Weile her daß ich damit rumgespielt hab und inzwischen
haben wir kein Domino auf Unix (AIX) mehr.
Soweit ich mich erinnere hat das direkte Rename nur dann funktioniert wenn
die Quelldatenbank seit dem Serverstart noch nicht geöffnet war.

Beim ersten Öffnen eine DB auf Unix muss die Groß/Kleinschreibung genau so sein
wie im Filesystem, ansonsten wird die DB nicht gefunden. Nachdem die DB geöffnet war
ist bei weiteren Versuchen die DB zu öffnen egal welche Schreibweise verwendet wird.
Anscheinend schaut Domino beim dbopen erst im Speicher nach ob dieses File schon offen
ist und dieser Vergleich ist case-insensitive.
 

Titel: Re: Datenbank per Script verschieben
Beitrag von: eknori (retired) am 14.06.16 - 08:34:55
Immer wieder schön zu lesen, daß sich Leute hier Mühe geben, eine Frage zu beantworten und dann tagelang keine Rückmeldung vom Fragesteller kommt.

Titel: Re: Datenbank per Script verschieben
Beitrag von: MacSpudik am 15.06.16 - 13:40:45
Ich bin zwar nicht der Fragesteller, aber die Lösung finde ich super. Danke fürs Posten!

Es hätte mir viel Arbeit erspart, wenn ich einen Tag früher drüber gestolpert wäre. Wie das immer so ist, habe ich heute aus Zufall den Thread gelesen.
Zumindest werde ich das Script für die Zukunft in meine Admintools implementieren und vor allem sollte man sich wirklich angewöhnen, hier im Forum nach Lösungen zu suchen, bevor man etwas anfängt  :)
Das spart ne Menge Arbeit   8)

Grüße von
Sebastian