2016-09-11 5 views
0

Ich verwende eine ODBC-Verbindung, um eine Datenbank zu sichern. dies ist mein Code:So sichern Sie die Datenbank im Autocommit-Modus aus

UPDATE [ATIDGEN] SET [LASTID] = '25' WHERE [TABLEID] = 'ATLOGIN'; 
//success 
::SQLEndTran(SQL_HANDLE_DBC, m_hdbc, SQL_COMMIT); 
//success 
BACKUP DATABASE [ArazDB2] TO DISK = 'D:\Amin88\Total\BKUP-13950621.BAK' WITH INIT,NOSKIP 
//state 42000, Cannot perform a backup or restore operation within a transaction. 

Wenn ich den Befehl UPDATE oben entfernen, Backup SQL_SUCCESS_WITH_INFO und SQL-Server-Logs melden Sie dies: // BACKUP konnte den Befehl BACKUP DATABASE ArazDB2 abzuschließen. Überprüfen Sie das Backup-Anwendungsprotokoll auf eine detaillierte Nachricht, aber die Backup-Datei wird erstellt !. 1- Nach dem Update, warum Sql-Server in einer Transaktion ist? Ich habe explizit SQLEndTran aufgerufen. 2- ohne Update, Warum meldet SQL-Server-Protokoll Sicherungsfehler, aber die Sicherungsdatei erstellt? Kann mir jemand helfen?

+0

Überprüfen Sie das SQL-Protokoll und den Sicherungsverlauf, um die Details des Fehlers zu erfahren. Können Sie die Details des Fehlers posten? –

+0

@ M.Hassan. sql server managt studio/management/sql server logs/Aktuelle zeigen genau diese nachricht. Das einzige Detail, von dem ich weiß, ist das zurückgegebene SQLGetDiagRec: state 42000, kann eine Sicherung oder Wiederherstellung innerhalb einer Transaktion nicht ausführen –

+0

Was ist das Client-Tool/Anwendung, die Sie mit ODBC-Verbindung verwenden –

Antwort

0

Es scheint, dass es eine Lebenstransaktion gibt.

Schließen Sie alle bestehenden Verbindungen zur Datenbank des SQL-Skript:

alter database mydb set single_user with rollback immediate 

Am Ende der Sicherung, führen Sie das Skript:

ALTER DATABASE mydb SET MULTI_USER 

aktualisiert

SQL Server-Probleme ein implizites COMMIT vor und nach jeder DDL-Anweisung (Data Definition Language).

BACKUP-Befehl wird als DDL betrachtet und benötigt implizites COMMIT.

Da sich die Datenbank in Autocommit Off befindet, aktivieren Sie Autocommit vor der Sicherung und dann nach der Sicherung.

conn.autocommit = true 
BACKUP DATABASE [ArazDB2] TO DISK = 'D:\Amin88\Total\BKUP-13950621.BAK' WITH INIT,NOSKIP 
conn.autocommit = false 
+0

Erstens, Es gibt keine andere Verbindung. Ich debugge die Anwendung und die einzige Verbindung wird von mir hergestellt. Zweitens, ich bin nicht berechtigt, bestehende Verbindungen Benutzer zu schließen, weil ich Datenbank sichern möchte, während andere Benutzer verbunden sind und wählen, einfügen, aktualisieren, löschen von Daten. –

+0

Bitte beachten Sie, dass ich ODBC-API verwende, um die Datenbank in meiner Anwendung zu sichern. Ich führe keine Abfragen in SQL-Server-Management-Studio –

+0

Sehr gute Idee. Ich habe Autocommit aktiviert und BACKUP DATABASE ausgeführt, und dann ist das Deaktivieren von Autocommit nicht erfolgreich. Der Fehler lautet: Verbindung ist mit Ergebnissen für einen anderen Befehl beschäftigt. Was ist das Problem damit? –

Verwandte Themen