Derby数据库错误未写入数据库

问题描述 投票:0回答:1

不知道为什么但最近运行德比数据库3年左右的机器已停止运行我们编写的软件并使用德比数据库。该软件导入图像并将该位置写入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: 

有谁知道如何解决这个问题并停止获取此错误?谢谢

sql database derby
1个回答
0
投票

您提供的日志错误:

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

建议数据库处于不一致状态(例如,数据库没有干净地关闭,或者系统崩溃,或由于操作系统磁盘同步或IO问题导致的损坏,突然断电,计划外自动强制Windows Update重启等)。

尝试通过执行受影响(或所有)数据库的受控启动,关闭和重新启动来执行崩溃恢复(即重新启动):

如果您在客户端 - 服务器模式下运行,则:

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>

(如果您在嵌入模式下运行,则需要为每个数据库执行ij shutdown连接字符串(例如,connect 'jdbc:derby:c:\derby\databases\sample;shutdown=true';)。有关所有数据的信息,请参阅“Derby Developer's Guide”中的“数据库连接示例”部分。嵌入式模式的连接字符串样式)。

然后启动Derby和/或您的应用程序。

(通过执行受控启动(即启动,关闭和重启),在重启步骤中,Derby尝试检测可能发生的任何数据库不一致(由于系统崩溃等原因)。它将尝试使用Active Logs将任何错误的事务前滚(或回滚)到上次已知的良好提交。这是防止数据损坏的第一道防线之一。但是,崩溃恢复有限制,例如,如果您的数据库文件如此破坏或其部分是不一致的东西太旧了,而不是保留在Active Logs中,那么你可能需要从一个好的备份中恢复数据库。有关恢复如何工作的更多详细信息,请参阅“Derby Developer's Guide”:

引导数据库

Derby的默认配置是在应用程序首次连接数据库时引导(或启动)数据库。当Derby引导数据库时,它会检查是否需要在数据库上运行恢复,因此在某些特殊情况下,引导可能需要一些时间。您还可以将系统配置为在启动时自动引导系统中的所有数据库;请参阅“Derby参考手册”中的“derby.system.bootAll”。

...

存储和恢复

如果系统或操作系统意外失败,当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>

在最坏的情况下,您可能需要从备份还原。

如果您已打开在线日志存档,则可以执行前滚恢复。

(有关SYSCS_CHECK_TABLE功能,备份和还原以及日志存档和前滚恢复的详细信息,请参阅“Derby管理指南”的“维护数据库完整性”部分。

© www.soinside.com 2019 - 2024. All rights reserved.