Açıklama
Süreçlerin basex veritabanları çeşitli sebeplerden dolayı bozulabilmektedir. Bozulmuş bir veritabanına yeni kayıt atılamayabilir veya okuma yapılamayabilir. Bir veritabanının bozulup bozulmadığını anlamak için xml job'larındaki hatalara bakılması gerekmektedir. Aşağıdaki Workflow.FormData.XmlDatabase tipindeki job hatasına benzer hatalar veritabanının bozulduğunu gösterir ve bu durumda ilgili veritabanının silinerek tekrar oluşturulması gerekir.
30.5.2018 16:54 Error Unhandled exception occured while completing job. System.IO.IOException: Improper use? Potential bug? Your feedback is welcome: Contact: basex-talk@mailman.uni-konstanz.de Version: BaseX 8.6.3 Java: Oracle Corporation, 1.8.0_161 OS: Windows Server 2012 R2, x86 Stack Trace: java.lang.ArrayIndexOutOfBoundsException at java.lang.System.arraycopy(Native Method) at org.basex.util.Array.move(Array.java:93) at org.basex.util.list.TokenList.insert(TokenList.java:124) at org.basex.index.resource.Docs.insert(Docs.java:164) at org.basex.index.resource.Resources.insert(Resources.java:68) at org.basex.data.Data.indexAdd(Data.java:1074) at org.basex.data.Data.insert(Data.java:815) at org.basex.query.up.primitives.db.DBAdd.apply(DBAdd.java:71) at org.basex.query.up.DataUpdates.apply(DataUpdates.java:174) at org.basex.query.up.ContextModifier.apply(ContextModifier.java:138) at org.basex.query.up.Updates.apply(Updates.java:157) at org.basex.query.QueryContext.iter(QueryContext.java:346) at org.basex.query.QueryProcessor.iter(QueryProcessor.java:90) at org.basex.server.ServerQuery.execute(ServerQuery.java:124) at org.basex.server.ClientListener.query(ClientListener.java:395) at org.basex.server.ClientListener.run(ClientListener.java:102) at AltiKare.Data.XmlRepository.BaseX.Query.Exec(Byte cmd, String arg) at AltiKare.Data.XmlRepository.BaseX.BaseXProvider.Replace(String collectionName, String path, String data) at AltiKare.Data.XmlRepository.BaseX.BaseXProvider.Replace(String collectionName, String path, XmlDocument data) at AltiKare.Data.XmlRepository.XmlRepository.ReplaceDocument(String path, XmlDocument document) at AltiKare.Workflow.Business.Server.Logic.Workers.FormDataXmlDatabase.CompleteCore() at AltiKare.Workers.Worker.<>c__DisplayClass17_0.<Complete>b__0() 30.5.2018 16:54 Debug Adding form data cccdc7b8-ba8c-4c06-ba49-320ef3cee52c to xml repository
Çözüm
Bozulmuş süreç veritabanları tespit edildikten sonra aşağıdaki adımları uygulayarak basex veritabanlarının tekrar oluşturulmasını sağlayabilirsiniz:
- Agent servisi durdurulur,
- Bozulan basex veritabanı klasörleri silinir veya her ihtimale karşı yedek olması açısından isimleri değiştirilerek yedek olarak tutulur,
- Aşağıdaki sorgular, her bir bozuk süreç Id'si ProcessId kriterine yazılarak çalıştırılır,
SELECT count(*) from [dbo].[wXmlDatabaseRegistry] with(nolock) where ItemId IN (select Id from wInstances with(nolock) where ProcessVersionId IN (select Id from wVersions with(nolock) where ProcessId = '93623116-b77f-4541-9a6d-010bb83df7ba')) SELECT count(*) from [dbo].[wXmlDatabaseRegistry] with(nolock) where ItemId IN (select DISTINCT DataID from wWorkItems with(nolock) where InstanceId IN (select Id from wInstances with(nolock) where ProcessVersionId IN (select Id from wVersions with(nolock) where ProcessId = '93623116-b77f-4541-9a6d-010bb83df7ba')))
- Bu sorgular, silinmesi gereken kayıt sayısını gösterecektir. Bu iki sorgudan dönen satırları silinir,
- Agent servisi başlatılır.
Agent bundan sonra yoğunluk durumuna göre basex veritabanlarını yeniden oluşturmaya başlayacaktır. 3. adımdaki sorguların sonucunda görülen kayıt sayısı kadar job yaratılarak bunlar işlendiğinde basex veritabanında birer kayıt oluşturulacak ve SQL'deki [wXmlDatabaseRegistry] tablosuna her bir işlem için bir kayıt atılacaktır.