Aktualizace serveru selže při zálohování databáze
Popis
Aktualizace serverové komponenty probíhá v podstatě v těchto krocích:
- Odsouhlasení updatu
- Stažení a ověření souborů
- Vypnutí webové služby a služby eWayTimer
- Záloha databáze
- Aktualizace aplikačních souborů
- Aktualizace databáze
- Vytváření CLR procedur
- Zapnutí webové služby a služby eWayTimer
Nejčastější krok aktualizace serverové části, který se nezdaří, je zálohování databáze. V administrační aplikaci se objeví chybová hláška s tímto obsahem:
eWay.ServerUpdater.Exceptions.CommandRunningException: Command 'eWay.WebServiceDeploy.Wizard.WizardFormCommands.BackupDatabaseCommand' wasn't successful. The result was 'Error'. at eWay.ServerUpdater.DeployWizard.RunnedCommand.Run(ExceptionCatcher exceptionCatcher) at eWay.ServerUpdater.Executables.Executable.RunCommands(IEnumerable`1 commands) at eWay.ServerUpdater.Executables.ProcessTheUpdateExecutable.Execute() at eWay.ServerUpdater.Program.Main(String[] args)
Případně se může objevit hláška s tímto obsahem:
eWay.ServerUpdater.Exceptions.CommandRunningException: Command 'eWay.WebServiceDeploy.Wizard.WizardFormCommands.BackupDatabaseByEwayProcedureCommand' wasn't successful. The result was 'Error'. at eWay.ServerUpdater.DeployWizard.RunnedCommand.Run(ExceptionCatcher exceptionCatcher) in C:\CC.NET\Projects\NAnt\Sources\DeployManagement\ServerUpdater\ServerUpdater\DeployWizard\RunnedCommand.cs:line 38 at eWay.ServerUpdater.Executables.Executable.RunCommands(IEnumerable`1 commands) in C:\CC.NET\Projects\NAnt\Sources\DeployManagement\ServerUpdater\ServerUpdater\Executables\Executable.cs:line 73 at eWay.ServerUpdater.Executables.ProcessTheUpdateExecutable.Execute() in C:\CC.NET\Projects\NAnt\Sources\DeployManagement\ServerUpdater\ServerUpdater\Executables\ProcessTheUpdateExecutable.cs:line 73 at eWay.ServerUpdater.Program.Main(String[] args) in C:\CC.NET\Projects\NAnt\Sources\DeployManagement\ServerUpdater\ServerUpdater\Program.cs:line 61
CommandRunningException
říká, že spadl jeden z kroků (command). Důležité je vidět který. To je patrné z eWay.WebServiceDeploy.Wizard.WizardFormCommands.
BackupDatabaseCommand
- chybovalo zálohování databáze. Ve druhém případě je to způsobeno skutečností, která je označena jako BackupDatabaseByEwayProcedureCommand - jedná se o chybu danou nastavením zálohování.
V dialogu administrační aplikace není už dále vidět, jaká byla příčina chyby zálohování. Tu se dozvíme z logů aktualizačního procesu, fáze 2 - např. Update_2017-12-14_Phase2.txt
. Ten vypadá například takto:
2017-12-11 13:56:40: ERROR: : [MessageProcessor] [Error, ] Backups database '' to 'eWay_beforeUpdate_2017-12-11_13-56-34.bak'. Exception message: Simple Sql command 'backup database eWay' failed with messaqge: Cannot open backup device 'c:\Program Files\Microsoft SQL Server\MSSQL10_50.EWAYSQL\MSSQL\Backup\eWay_beforeUpdate_2017-12-11_13-56-34.bak'. Operating system error 3(failed to retrieve text for this error. Reason: 15100). BACKUP DATABASE is terminating abnormally. Ex. stacktrace: at eWay.WebServiceDeploy.Wizard.Utils.DatabaseUtils.RunSimpleSqlNonQueryCommand(String connectionString, String sqlText, Int32 commandTimeout) at eWay.WebServiceDeploy.Wizard.Utils.DatabaseUtils.BackupDbToFile(String instanceConnectionString, String databaseName, String filePath) at eWay.WebServiceDeploy.Wizard.WizardFormCommands.BackupDatabaseCommand.Run() Inner ex. stacktrace: at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at eWay.WebServiceDeploy.Wizard.Utils.DatabaseUtils.RunSimpleSqlNonQueryCommand(String connectionString, String sqlText, Int32 commandTimeout): 2017-12-11 13:56:40: DEBUG: : Result: None, : 2017-12-11 13:56:40: ERROR: : The updater execution ended with an exception.: Command 'eWay.WebServiceDeploy.Wizard.WizardFormCommands.BackupDatabaseCommand' wasn't successful. The result was 'Error'.
Verze
Všechny verze eWay-CRM®
Obtížnost řešení
Střední
Postup řešení
Ještě předtím než ServerUpdater konstatuje, že BackupDatabaseCommand
nebyl úspěšný, je zalogována chyba přímo z provádění příkazu (command). V našem konkrétním případě šlo o to, že SQL Server nemohl realizovat přístup k souboru c:\Program Files\Microsoft SQL Server\MSSQL10_50.EWAYSQL\MSSQL\Backup\eWay_beforeUpdate_2017-12-11_13-56-34.bak
. Důvodem byla chybějící složka na cestě.
Další běžné důvody selhání zálohy databáze jsou:
- Chybějící oprávnění zápisu na disk
- Nedostatek místa na cílovém disku
- Špatně nastavený recovery model SQL serveru (eWay-CRM® vyžaduje FULL)
Danou chybu je potřeba řešit na serveru dle jejího charakteru. Většinou se jedná o jednoduchý úkon (uvolnění místa, nastavení práv, změna / vytvoření cílové složky, apod.). Po opravě je potřeba proces aktualizace opakovat.
Z postupu aktualizace výše je patrné, že při zastavení na kroku zálohování ještě nedošlo k provedení žádné změny eWay-CRM® na serveru. Aplikační soubory ani data nejsou tedy v nekonzistentním stavu. Serverovou komponentu je tedy možno opět nastartovat:
- Zapnout webovou službu - přejmenovat soubor App_Offline.htm na _App_Offline.htm
- Zapnout službu eWayTimer
Nyní je eWay-CRM® ve stejném stavu jako byla před pokusem o aktualizaci. Další krok tedy vede do administrační aplikace, kde můžeme aktualizaci spustit znovu.