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

时间:2019-04-19 19:30:04

标签: sql database derby

不知道为什么,但是最近运行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 :(得分: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而损坏)更新重启等)。

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

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

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)执行一个connect 'jdbc:derby:c:\derby\databases\sample;shutdown=true';关闭连接字符串。请参阅“数据库连接示例”部分。 “ Derby开发人员指南”,以获取有关嵌入式模式下所有连接字符串样式的信息。

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

(通过执行受控的启动(即启动,关闭和重新启动),在重新启动步骤中Derby尝试检测可能已发生的任何数据库不一致(由于系统崩溃等原因)。它将尝试使用活动日志可将任何不良事务前滚(或回滚)到最后一次已知的良好提交,这是防止数据损坏的第一道防线之一,但是崩溃恢复有一定的限制,例如,如果数据库文件损坏或损坏的部分如果不一致的数据超出了活动日志中保留的数据,则可能太旧了,那么您可能需要从良好的备份中还原数据库。有关恢复工作原理的更多详细信息,请参阅“ 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>

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

如果已打开“联机日志归档”,则可以执行前滚恢复。

(有关SYSCS_CHECK_TABLE函数,备份和还原,日志归档以及前滚恢复的更多信息,请参见“ Derby管理指南”的“维护数据库完整性”部分。