Ошибка базы данных Derby при записи в базу данных - PullRequest
0 голосов
/ 19 апреля 2019

Не знаю, почему, но недавно машина, работающая с базой данных Derby в течение 3 лет или около того, перестала работать со своим программным обеспечением, которое мы написали, и с использованием базы данных Derby. Программное обеспечение импортирует изображения и записывает местоположение в базу данных derby. Кажется, в базе данных derby достаточно места, но она не уверена, повреждена ли база данных или почему она больше не будет писать в нее. Вот некоторые из журналов ошибок:

 9-Apr-2019 19:29:43,575  ERROR 574f7773-98c0-43cd-9550-f41eb34951ab-SIMP StorageResourceDefaultImpl:190 - Error rollbacking transaction for the file: ..\image_storage\image_374\SL000ED88_1556785502569.bif
org.apache.commons.transaction.file.ResourceManagerSystemException: 16a36a59978-2962: Database is set to dirty, this *may* mean it is corrupt. No modifications are allowed until a recovery run has been performed! (ERR_SYSTEM)
at org.apache.commons.transaction.file.FileResourceManager.txInitialSaneCheckForWriting(FileResourceManager.java:996)
at org.apache.commons.transaction.file.FileResourceManager.rollbackTransaction(FileResourceManager.java:615)
at com.bioimagene.iii.ims.service.storage.impl.StorageResourceDefaultImpl.rollback(StorageResourceDefaultImpl.java:187)
at com.bioimagene.iii.ims.service.storage.impl.StorageResourceDefaultImpl.<init>(StorageResourceDefaultImpl.java:103)
at com.bioimagene.iii.ims.service.storage.impl.StorageServiceDefaultImpl.createStorageResource(StorageServiceDefaultImpl.java:59)
at sun.reflect.GeneratedMethodAccessor183.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)
at $Proxy64.createStorageResource(Unknown Source)
at com.bioimagene.iii.ims.server.impl.SaveImageRequestProcessorDelegateBase.processSaveImage(SaveImageRequestProcessorDelegateBase.java:115)
at com.bioimagene.iii.ims.server.impl.SaveImageRequestProcessorDelegateBase.processSaveImageRequest(SaveImageRequestProcessorDelegateBase.java:87)
at com.bioimagene.iii.ims.server.impl.SaveLocalImageRequestProcessorDelegate.processSaveLocalImageRequest(SaveLocalImageRequestProcessorDelegate.java:37)
at com.bioimagene.iii.ims.server.impl.ImsServerJbossRemotingImpl.processSaveLocalImageRequest(ImsServerJbossRemotingImpl.java:622)
at sun.reflect.GeneratedMethodAccessor182.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)
at $Proxy69.processSaveLocalImageRequest(Unknown Source)
at com.bioimagene.iii.ims.command.impl.SaveLocalImageRequestHandlerCommand.execute(SaveLocalImageRequestHandlerCommand.java:26)
at com.bioimagene.iii.ims.server.impl.DefaultImsClientRequestHandlerImpl.invoke(DefaultImsClientRequestHandlerImpl.java:89)
at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:908)
at org.jboss.remoting.transport.socket.ServerThread.completeInvocation(ServerThread.java:742)
at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:695)
at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:522)
at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:230)
19-Apr-2019 19:29:43,591  ERROR 574f7773-98c0-43cd-9550-f41eb34951ab-SIMP StorageResourceDefaultImpl:121 - Error starting storage transaction [id: 16a36a59978-2962] for the folder: image_storage\image_374
com.bioimagene.iii.ims.commons.exception.ImsStorageRollbackException: Error rollbacking transaction for the file: 

Кто-нибудь знает, как это исправить и перестать получать эти ошибки? ТНХ

1 Ответ

0 голосов
/ 21 апреля 2019

Введенная вами ошибка журнала:

... Database is set to dirty, this *may* mean it is corrupt. No modifications are allowed until a recovery run has been performed! (ERR_SYSTEM)

свидетельствует о том, что база данных находится в несогласованном состоянии (например, база данных не была корректно закрыта, произошел сбой системы или повреждение из-за операционной системы).проблемы с синхронизацией диска или вводом-выводом, внезапное отключение питания, незапланированная автоматическая принудительная перезагрузка Центра обновления Windows и т. д.).

Попробуйте выполнить восстановление после сбоя, выполнив контролируемый запуск, завершение работы и перезапуск затронутых (или всех) баз данных (т.е.. перезагрузка):

Если вы работаете в режиме клиент-сервер, то:

ij> /* Startup */
ij> connect 'jdbc:derby://localhost:1527/sample';
ij> 
ij> /* Shutdown */
ij> connect 'jdbc:derby://localhost:1527/;shutdown=true';
ERROR XJ015: DERBY SQL error: ERRORCODE: 50000, SQLSTATE: XJ015, SQLERRMC: Derby system shutdown.
ij> quit;

PS C:\db-derby-10.13.1.1-bin\bin> ### Shutdown Network Server ###
PS C:\db-derby-10.13.1.1-bin\bin> .\NetworkServerControl shutdown
Mon Apr 22 03:14:46 AEST 2019 : Apache Derby Network Server - 10.13.1.1 - (1765088) shutdown
PS C:\db-derby-10.13.1.1-bin\bin>

(Если вы работаете во встроенном режиме, вам нужно будет выполнить ijshutdown строка подключения для каждой базы данных (например, connect 'jdbc:derby:c:\derby\databases\sample;shutdown=true';). Информацию обо всех стилях строк подключения для встроенного режима см. в разделе «Примеры подключения к базе данных» в «Руководстве разработчика Derby».

Затем запустите Derby и / или ваше приложение.

(путем выполнения управляемого запуска (т. Е. Запуска, выключения и перезапуска) вrt step Derby пытается обнаружить любые несоответствия базы данных, которые могли произойти (из-за сбоя системы).Он будет пытаться использовать активные журналы для отката (или отката) любых неудачных транзакций до последнего известного исправного коммита.Это одна из первых линий защиты от повреждения данных.Однако у Crash Recovery есть свои ограничения, например, если ваши файлы базы данных настолько повреждены или их несовместимые части слишком стары, чем те, которые хранятся в активных журналах, вам может потребоваться восстановить базу данных из хорошей резервной копии.Обратитесь к «Руководству разработчика Derby» для получения дополнительной информации о том, как работает восстановление):

Загрузка баз данных

Конфигурация по умолчанию для Derby - загрузка (илиначать) базу данных, когда приложение впервые устанавливает соединение с ней.Когда Derby загружает базу данных, он проверяет, нужно ли выполнять восстановление базы данных, поэтому в некоторых необычных случаях загрузка может занять некоторое время.Вы также можете настроить свою систему на автоматическую загрузку всех баз данных в системе при ее запуске;см. derby.system.bootAll в Справочном руководстве Derby.

...

Хранение и восстановление

Если система или операционная системанеожиданно завершается с ошибкой, при следующем запуске Derby он может использовать журнал для восстановления, восстановления «потерянных» транзакций из журнала и отката незавершенных транзакций.Восстановление гарантирует, что все зафиксированные транзакции во время сбоя системы были применены к базе данных, а все транзакции, которые были активны, откатываются.Таким образом, базы данных остаются в согласованном действительном состоянии.

Затем попробуйте проверить согласованность таблиц:

ij>
SELECT schemaname, tablename,
SYSCS_UTIL.SYSCS_CHECK_TABLE(schemaname, tablename)
FROM sys.sysschemas s, sys.systables t
WHERE s.schemaid = t.schemaid;
...
...
...
SYS
   |SYSVIEWS
       |1

31 rows selected
ij>

В худшем случае может потребоваться восстановление из резервной копии.

Если вы включили Online Log Archiving, вы можете выполнить восстановление с повтором транзакций.

(См. Раздел «Поддержание целостности базы данных» «Руководства по администрированию Derby» для получения дополнительной информации о функции SYSCS_CHECK_TABLE, резервном копировании и восстановлении, архивировании журналов и восстановлении с повтором транзакций).

...