为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:达梦8
【操作系统】:rockylinux8.10
【CPU】:
【问题描述】*:
ranger kms适配达梦8出现启动报错,无法获取序列信息,错误:
2024-12-20 06:16:49,273 INFO [demo-1-startStop-1] o.a.h.c.k.k.s.KMSWebApp (KMSWebApp.java:176) - ----------------Instantiating key provider ---------------
2024-12-20 06:16:49,723 INFO [demo-1-startStop-1] o.a.h.c.k.RangerKeyStoreProvider (RangerKeyStoreProvider.java:602) - Credential keystore password not applied for KMS; clear text password shall be applicable
2024-12-20 06:16:50,483 INFO [test-1-startStop-1] o.a.h.c.k.RangerKMSDB (RangerKMSDB.java:98) - Connected to DB : false
2024-12-20 06:16:50,483 INFO [test-1-startStop-1] o.a.h.c.k.RangerKeyStoreProvider (RangerKeyStoreProvider.java:194) - Ranger KMS Database is enabled for storing master key.
2024-12-20 06:16:50,488 INFO [test-1-startStop-1] o.a.h.c.k.RangerMasterKey (RangerMasterKey.java:207) - Generating Master Key...
2024-12-20 06:16:50,555 ERROR [test-1-startStop-1] o.a.r.k.d.BaseDao (BaseDao.java:119) - create(XXRangerMasterKey) failed
org.eclipse.persistence.exceptions.DatabaseException:
Internal Exception: dm.jdbc.driver.DMException: Error in line: 1
Invalid table or view name [SEQUENCE]
Error Code: -2106
Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?
bind => [1, RANGER_MASTERKEY_SEQ]
Query: DataModifyQuery(name="RANGER_MASTERKEY_SEQ" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?")
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:342)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:700)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:567)
at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2105)
at org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:313)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:275)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:261)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeNoSelectCall(DatasourceCallQueryMechanism.java:317)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeNoSelect(DatasourceCallQueryMechanism.java:288)
at org.eclipse.persistence.queries.DataModifyQuery.executeDatabaseQuery(DataModifyQuery.java:87)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:913)
at org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:3367)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1898)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1880)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1845)
at org.eclipse.persistence.sequencing.QuerySequence.update(QuerySequence.java:356)
at org.eclipse.persistence.sequencing.QuerySequence.updateAndSelectSequence(QuerySequence.java:293)
at org.eclipse.persistence.sequencing.StandardSequence.getGeneratedVector(StandardSequence.java:75)
at org.eclipse.persistence.sequencing.Sequence.getGeneratedVector(Sequence.java:267)
at org.eclipse.persistence.internal.sequencing.SequencingManager$Preallocation_Transaction_NoAccessor_State.getNextValue(SequencingManager.java:551)
at org.eclipse.persistence.internal.sequencing.SequencingManager.getNextValue(SequencingManager.java:1109)
at org.eclipse.persistence.internal.sequencing.ClientSessionSequencing.getNextValue(ClientSessionSequencing.java:72)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.assignSequenceNumber(ObjectBuilder.java:393)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.assignSequenceNumber(ObjectBuilder.java:337)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.assignSequenceNumber(UnitOfWorkImpl.java:542)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNotRegisteredNewObjectForPersist(UnitOfWorkImpl.java:4462)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.registerNotRegisteredNewObjectForPersist(RepeatableWriteUnitOfWork.java:523)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4407)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:601)
at org.apache.ranger.kms.dao.BaseDao.create(BaseDao.java:111)
at org.apache.hadoop.crypto.key.RangerMasterKey.saveEncryptedMK(RangerMasterKey.java:375)
at org.apache.hadoop.crypto.key.RangerMasterKey.generateMasterKey(RangerMasterKey.java:210)
at org.apache.hadoop.crypto.key.RangerKeyStoreProvider.generateAndGetMasterKey(RangerKeyStoreProvider.java:620)
at org.apache.hadoop.crypto.key.RangerKeyStoreProvider.<init>(RangerKeyStoreProvider.java:199)
at org.apache.hadoop.crypto.key.RangerKeyStoreProvider$Factory.createProvider(RangerKeyStoreProvider.java:746)
at org.apache.hadoop.crypto.key.kms.server.KMSWebApp.createKeyProvider(KMSWebApp.java:115)
at org.apache.hadoop.crypto.key.kms.server.KMSWebApp.contextInitialized(KMSWebApp.java:178)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4441)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4899)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1364)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1354)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Caused by: dm.jdbc.driver.DMException: Error in line: 1
Invalid table or view name [SEQUENCE]
at dm.jdbc.driver.DBError.throwException(DBError.java:711)
at dm.jdbc.a.b.o.x(MSG.java:591)
at dm.jdbc.a.b.o.C(MSG.java:526)
at dm.jdbc.a.b.o.B(MSG.java:507)
at dm.jdbc.a.a.a(DBAccess.java:245)
at dm.jdbc.a.a.a(DBAccess.java:718)
at dm.jdbc.driver.DmdbPreparedStatement.prepareSql(DmdbPreparedStatement.java:303)
at dm.jdbc.driver.DmdbPreparedStatement.allocateHandle(DmdbPreparedStatement.java:229)
at dm.jdbc.driver.DmdbPreparedStatement.<init>(DmdbPreparedStatement.java:131)
at dm.jdbc.driver.DmdbPreparedStatement.<init>(DmdbPreparedStatement.java:181)
at dm.jdbc.driver.DmdbConnection.do_prepareStatement(DmdbConnection.java:722)
at dm.jdbc.driver.DmdbConnection.do_prepareStatement(DmdbConnection.java:708)
at dm.jdbc.driver.DmdbConnection.prepareStatement(DmdbConnection.java:1332)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1611)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1558)
at org.eclipse.persistence.internal.databaseaccess.DatabaseCall.prepareStatement(DatabaseCall.java:762)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:628)
... 44 common frames omitted
2024-12-20 06:16:50,555 ERROR [test-startStop-1] o.a.h.c.k.RangerMasterKey (RangerMasterKey.java:383) - Error while saving master key in Database!!!
java.lang.NullPointerException: null
at org.apache.hadoop.crypto.key.RangerMasterKey.saveEncryptedMK(RangerMasterKey.java:379)
at org.apache.hadoop.crypto.key.RangerMasterKey.generateMasterKey(RangerMasterKey.java:210)
at org.apache.hadoop.crypto.key.RangerKeyStoreProvider.generateAndGetMasterKey(RangerKeyStoreProvider.java:620)
at org.apache.hadoop.crypto.key.RangerKeyStoreProvider.<init>(RangerKeyStoreProvider.java:199)
at org.apache.hadoop.crypto.key.RangerKeyStoreProvider$Factory.createProvider(RangerKeyStoreProvider.java:746)
at org.apache.hadoop.crypto.key.kms.server.KMSWebApp.createKeyProvider(KMSWebApp.java:115)
at org.apache.hadoop.crypto.key.kms.server.KMSWebApp.contextInitialized(KMSWebApp.java:178)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4441)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4899)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1364)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1354)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
2024-12-20 06:16:50,555 INFO [test-1-startStop-1] o.a.h.c.k.RangerMasterKey (RangerMasterKey.java:125) - Getting Master Key
2024-12-20 06:16:50,558 ERROR [test-1-startStop-1] o.a.h.c.k.RangerMasterKey (RangerMasterKey.java:356) - Unable to Retrieving Master Key from database!!! or
java.lang.Exception: No Master Key exists
at org.apache.hadoop.crypto.key.RangerMasterKey.getEncryptedMK(RangerMasterKey.java:33
应该是用了表模拟序列,最佳是弃用这种方式,改用序列(MySQL8之前版本不支持序列);用表模拟序列,如果写入量不大还行,但是有多个表大量并发写入的话设计上就存在瓶颈了。
但是如果不想改造,回到具体报错上Error Code: -2106
可能需要检查以下:
select owner, table_name from all_tables where table_name='SEQUENCE';
注意可能迁移过来时可能保持了原来的小写名称,在大小写敏感时找不到也认为是“不存在”
2. 表是否在登录账户模式下
select CURR_SCH from v$sessions where sess_id=sessid;
表是否在登录账户模式下,不是的话,(前提是有表写权限)得加前缀这样访问SCH.TABNAME
,或者就加一个别名比如给TEST账户加一个SYSDBA.SEQUENCE的别名create synonym test.sequence for sysdba.SEQUENCE;
这样应用SQL就不用改造
以上,还得注意SEQUENCE本身是数据库关键字,表不应该这么命名
达梦序列不支持这么用 建议看一下达梦序列的用法:https://eco.dameng.com/document/dm/zh-cn/pm/definition-statement#3.11%20%E7%AE%A1%E7%90%86%E5%BA%8F%E5%88%97