GeoServer适配达梦数据库完整教程:从账号创建到图层发布
一、达梦数据库创建GeoServer账号
1、达梦数据库安装空间数据包。
从官网下载的达梦数据库,默认是不带空间数据包的,需要先安装空间数据包,参考这篇文档:达梦数据库libgeos_c.dll加载失败解决方法:空间数据包安装指南。
2、达梦数据库创建GIS专用账号并授权。
在Linux服务器上,可以使用达梦安装目录bin目录下的disql进行操作,使用sysdba账号登录。
[root@localhost bin]# ./disql
disql V8
username:sysdba
password:
Server[LOCALHOST:5236]:mode is normal, state is open
login used time : 2.577(ms)
SQL>
然后创建geo账号并授权权限。
create user geo identified by 账号密码;
grant public,resource,dba to geo;
exit;
3、验证创建的geo用户使用空间数据库功能。
使用geo账号登陆。
[root@localhost bin]# ./disql
disql V8
username:geo
password:
Server[LOCALHOST:5236]:mode is normal, state is open
login used time : 2.947(ms)
SQL>
执行以下sql语句。
SQL> SP_INIT_GEO2_SYS(1);
SP_INIT_GEO2_SYS(1);
[-6909]:Error in spatial library: dmgeo system package has exists.
used time: 1.600(ms). Execute id is 0.
SQL> SP_INIT_GEO2_SYS(0);
DMSQL executed successfully
used time: 98.256(ms). Execute id is 13202.
SQL> SP_INIT_GEO_SYS(1);
DMSQL executed successfully
used time: 00:00:01.383. Execute id is 13203.
dmgeo system package has exists 说明创建geo账号时,已经具有空间数据库功能,无需重复启用。
特别注意:一定要使用 SP_INIT_GEO2_SYS(1) 而不是 SP_INIT_GEO_SYS(1),因为达梦驱动gt-dmgeo2支持的是 SYSGEO2,而不是 SYSGEO。
二、GeoServer添加达梦数据库驱动
1、参考达梦GeoServer文档获取GeoServer版本的Geotools、gt-dmgeo2、gt-dameng版本。
其实不查文档也行,使用最新版本的GeoServer搭配安装的达梦数据库中的最新驱动版本即可。
2、从达梦数据库安装目录,获取对应的java驱动并下载到本地。
/home/dmdba/dmdbms/drivers/jdbc:DmJdbcDriver11.jar

/home/dmdba/dmdbms/drivers/jdbc/dialect:geoutil-1.1.0.jar、gt-dameng-2.21.jar、gt-dmgeo2-2.24.jar

3、把下载的4个jar包放到GeoServer安装目录的 webapps/geoserver/WEB-INF/lib 目录下。例如本人的是:/opt/geoserver/webapps/geoserver/WEB-INF/lib
gt-dmgeo2-2.24.jar、gt-dameng-2.21.jar、geoutil-1.1.0.jar、DmJdbcDriver11.jar
4、重启GeoServer服务。
本人已经把GeoServer安装为了Linux服务,可以使用以下命令重启。
systemctl restart geoserver
5、登录GeoServer后台进行验证。
在浏览器中打开GeoServer管理界面,使用管理员账号登录,点击存储仓库菜单,添加新的存储仓库,查看矢量数据源有没有达梦。

三、GIS数据导入达梦数据库
1、如果你的GIS数据保存在数据库里面,那非常简单。把创建表和所有表的记录导出sql脚本,然后使用AI编程工具中的大模型把sql语法转换为达梦数据库语法,使用disql工具导入即可。
[root@localhost bin]# ./disql
disql V8
username:geo
password:
Server[LOCALHOST:5236]:mode is normal, state is open
login used time : 2.947(ms)
SQL> start /home/dmdba/sql/00_create_tables.sql
DROP Table ...
CREATE Table ...
...
executed successfully
used time: 5.441(ms). Execute id is 44202.
2、我这边情况复杂一些。原始数据是shp格式,同事转换为gdb发给我,然后我用QGIS把gdb转换为了GeoPackage发布到GeoServer上进行开发测试。现在要导入达梦数据库。
这里同样需要AI编程工具中的大模型,让大模型读取GeoPackage中的所有表,转换为导入达梦数据库的sql脚本即可。GeoPackage中的数据库格式是sqlite,电脑上需要有Python环境。这里提供AI写的把GeoPackage中的GIS数据转换为达梦SQL脚本供参考。点击此处下载 generate_dm_sql.py.
3、生成导入达梦数据库SQL脚本后,在达梦安装目录bin目录下执行disql,使用geo账号登录,使用 start /opt/dmdba/sql/00_create_tables.sql 即可执行上传的SQL脚本。
[root@localhost bin]# ./disql
disql V8
username:geo
password:
Server[LOCALHOST:5236]:mode is normal, state is open
login used time : 2.947(ms)
SQL> start /opt/dmdba/sql/00_create_tables.sql
示例导入SQL语句(结尾不能添加分号):
-- 1. 重新建表(会先 DROP 再 CREATE,清掉旧数据)
start /opt/dmdba/sql/00_create_tables.sql
-- 2. 导入数据
start /opt/dmdba/sql/GasChangZhan_insert.sql
start /home/dmdba/sql/GasCiGaoYaGuanXian_insert.sql
start /home/dmdba/sql/GasDiYaGuanXian_insert.sql
start /home/dmdba/sql/GasFaMen_insert.sql
start /home/dmdba/sql/GasGaoYaGuanXian_insert.sql
start /home/dmdba/sql/GasTiaoYaXiang_insert.sql
start /home/dmdba/sql/GasYinBaoZhuang_insert.sql
start /home/dmdba/sql/GasZhongYaGuanXian_insert.sql
四、在GeoServer中创建存储仓库
1、使用管理员账号登录GeoServer管理后台。

2、点击左侧菜单中的存储仓库,添加新的存储仓库,选择矢量数据源下面的 Dameng(geo2)。

3、填写新建矢量数据源表单,按照以下规则填写即可。
存储仓库的基本信息:
工作空间:选择所属工作空间
数据源名称:任意填写
连接参数:
dbtype:dm(geo2)
host:达梦数据库IP
port:达梦数据库端口
schema:geo(跟达梦数据库GIS账号一致)
user :geo
passwd:geo密码
4、添加完存储仓库,就可以使用添加的存储仓库添加图层了。
常见问题
1、使用达梦存储仓库发布图层报错:dm.jdbc.driver.DMException: Error in line: 1 Invalid schema name [SYSGEO2]。
完整错误:
java.lang.RuntimeException: Error occurred while building the resources for the configuration page
at org.geoserver.web.data.layer.NewLayerPage.buildLayerInfo(NewLayerPage.java:405)
at org.geoserver.web.data.layer.NewLayerPage$9.onClick(NewLayerPage.java:304)
at org.geoserver.web.wicket.SimpleAjaxLink$1.onClick(SimpleAjaxLink.java:47)
at org.apache.wicket.ajax.markup.html.AjaxLink$1.onEvent(AjaxLink.java:85)
at org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:154)
at org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:630)
at org.apache.wicket.core.request.handler.ListenerRequestHandler.internalInvoke(ListenerRequestHandler.java:300)
at org.apache.wicket.core.request.handler.ListenerRequestHandler.invoke(ListenerRequestHandler.java:274)
at org.apache.wicket.core.request.handler.ListenerRequestHandler.invokeListener(ListenerRequestHandler.java:222)
at org.apache.wicket.core.request.handler.ListenerRequestHandler.respond(ListenerRequestHandler.java:202)
at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:910)
at org.apache.wicket.request.RequestHandlerExecutor.execute(RequestHandlerExecutor.java:63)
at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:294)
at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:255)
at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:277)
at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:208)
at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:137)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:503)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:590)
at org.springframework.web.servlet.mvc.ServletWrappingController.handleRequestInternal(ServletWrappingController.java:166)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:51)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:503)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:590)
at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1419)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:764)
at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1665)
at org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:28)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:70)
at org.geoserver.ows.HTTPHeadersCollector.doFilter(HTTPHeadersCollector.java:48)
at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:67)
at org.geoserver.filters.HTTPMethodFilter.doFilter(HTTPMethodFilter.java:34)
at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:67)
at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:180)
at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:67)
at org.geoserver.filters.SpringDelegatingFilter.doFilter(SpringDelegatingFilter.java:41)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
at org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:39)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:352)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:67)
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:88)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:361)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:67)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:88)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:361)
at org.geoserver.security.filter.GeoServerAnonymousAuthenticationFilter.doFilter(GeoServerAnonymousAuthenticationFilter.java:52)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:361)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:67)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:227)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:221)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:88)
at org.geoserver.security.filter.GeoServerUserNamePasswordAuthenticationFilter.doFilter(GeoServerUserNamePasswordAuthenticationFilter.java:117)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:361)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:67)
at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:110)
at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:101)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:88)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:361)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:67)
at org.geoserver.security.filter.GeoServerSecurityContextPersistenceFilter$1.doFilterInternal(GeoServerSecurityContextPersistenceFilter.java:66)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:88)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:361)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:225)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:190)
at org.geoserver.security.GeoServerSecurityFilterChainProxy.doFilter(GeoServerSecurityFilterChainProxy.java:139)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
at org.geoserver.filters.SecurityHeadersFilter.doFilter(SecurityHeadersFilter.java:116)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:46)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
at org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:47)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
at org.geoserver.filters.FlushSafeFilter.doFilter(FlushSafeFilter.java:41)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:210)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:527)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:131)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:598)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:223)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1580)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1384)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1553)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1306)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:149)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
at org.eclipse.jetty.server.Server.handle(Server.java:563)
at org.eclipse.jetty.server.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1598)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:753)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:501)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:287)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:421)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:199)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149)
at java.base/java.lang.Thread.run(Thread.java:842)
Caused by: java.io.IOException: Error occurred building feature type
at org.geotools.jdbc.JDBCFeatureSource.buildFeatureType(JDBCFeatureSource.java:380)
at org.geotools.jdbc.JDBCDataStore.createFeatureSource(JDBCDataStore.java:887)
at org.geotools.data.store.ContentDataStore.getFeatureSource(ContentDataStore.java:333)
at org.geotools.data.store.ContentDataStore.getFeatureSource(ContentDataStore.java:591)
at org.geotools.data.store.ContentDataStore.getFeatureSource(ContentDataStore.java:96)
at org.geoserver.catalog.CatalogBuilder.buildFeatureType(CatalogBuilder.java:318)
at org.geoserver.web.data.layer.NewLayerPage.buildLayerInfo(NewLayerPage.java:395)
... 137 more
Caused by: dm.jdbc.driver.DMException: Error in line: 1 Invalid schema name [SYSGEO2]
at dm.jdbc.driver.DBError.throwException(SourceFile:793)
at dm.jdbc.a.a.ac.s(SourceFile:647)
at dm.jdbc.a.a.f.s(SourceFile:143)
at dm.jdbc.a.a.ac.K(SourceFile:579)
at dm.jdbc.a.a.ac.V(SourceFile:560)
at dm.jdbc.a.a.a(SourceFile:278)
at dm.jdbc.a.a.a(SourceFile:835)
at dm.jdbc.driver.DmdbStatement.executeInner(SourceFile:784)
at dm.jdbc.driver.DmdbStatement.do_executeQuery(SourceFile:232)
at dm.jdbc.driver.DmdbStatement.executeQuery(SourceFile:1138)
at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
at org.geotools.data.dameng2.DamengDialect.lookupGeometryType(DamengDialect.java:638)
at org.geotools.data.dameng2.DamengDialect.getMappingInternal(DamengDialect.java:572)
at org.geotools.data.dameng2.DamengDialect.getMapping(DamengDialect.java:540)
at org.geotools.jdbc.JDBCFeatureSource.getColumnMetadata(JDBCFeatureSource.java:831)
at org.geotools.jdbc.JDBCFeatureSource.buildFeatureType(JDBCFeatureSource.java:208)
... 143 more
解决方法:应该使用 SP_INIT_GEO2_SYS(1) 而不是 SP_INIT_GEO_SYS(1) 来初始化空间数据库。
2、如果获取SYSGEO2支持的函数和方法。
使用disql登录,执行以下SQL语句即可。
SELECT OBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS WHERE OWNER = 'SYSGEO2';
结果:
LINEID OBJECT_NAME OBJECT_TYPE
---------- -------------------- -----------
1 SYSGEO2 SCH
2 DMGEO2 PACKAGE
3 ST_BOX3D CLASS
4 ST_BOX2D CLASS
5 ST_GEOGRAPHY CLASS
6 ST_TIN CLASS
7 ST_TRIANGLE CLASS
8 ST_POLYHEDRALSURFACE CLASS
9 ST_MULTISURFACE CLASS
10 ST_MULTICURVE CLASS
11 ST_CURVEPOLYGON CLASS
LINEID OBJECT_NAME OBJECT_TYPE
---------- --------------------- ------------
12 ST_COMPOUNDCURVE CLASS
13 ST_CIRCULARSTRING CLASS
14 ST_GEOMETRYCOLLECTION CLASS
15 ST_MULTIPOLYGON CLASS
16 ST_MULTILINESTRING CLASS
17 ST_MULTIPOINT CLASS
18 ST_POLYGON CLASS
19 ST_LINESTRING CLASS
20 ST_POINT CLASS
21 ST_GEOMETRY CLASS
22 DMGEO2 PACKAGE BODY
LINEID OBJECT_NAME OBJECT_TYPE
---------- ---------------------- -----------
23 GEOMETRY_DUMP CLASS
24 CLUSTERARRAY TYPE
25 VALID_DETAIL CLASS
26 GEOMETRY_COLUMNS TABLE
27 GEOGRAPHY_COLUMNS TABLE
28 SPATIAL_REF_SYS TABLE
29 GEOGRAPHY_COLUMNS_SRID INDEX
30 GEOMETRY_COLUMNS_SRID INDEX
31 INDEX33570703 INDEX
32 INDEX33570702 INDEX
33 INDEX33570706 INDEX
LINEID OBJECT_NAME OBJECT_TYPE
---------- ------------- -----------
34 CONS134224814 CONSTRAINT
35 CONS134224813 CONSTRAINT
36 CONS134224812 CONSTRAINT
36 rows got
used time: 31.461(ms). Execute id is 156663.
3、在 Windows 上达梦数据库安装空间数据包后,执行 SP_INIT_GEO_SYS(1) 正常,但是执行 SP_INIT_GEO2_SYS(1) 报错:[HY000] 加载第三方库[liblwgeom.dll]失败,库文件缺失或版本太旧 (-2870)。
空间数据包版本和达梦数据库不匹配的问题。例如我从官网下载的达梦数据库版本是:DM Database Server 64 V8-03134284458-20251113-301923-20178。当我使用 dm8_20260319_x86_win_64_ent_8.1.4.80_pack48_spatial.zip空间数据包时,执行 SP_INIT_GEO2_SYS(1) 就会报这个错误。当我换成 dm8_20251121_x86_win_64_ent_8.1.4.170_spatial.zip 就不报错了。
可以通过以下SQL语句查询达梦数据库版本:select top 1 a.banner ||‘-’|| b.build_version from v$version a ,v$instance b;
windows、麒麟、centos空间数据包下载地址:https://pan.baidu.com/s/13vIR3Dni2iVkmCRGqr2N4Q?pwd=jfj7
参考文档
GeoServer使用达梦当作空间数据库:https://eco.dameng.com/document/dm/zh-cn/start/GeoServer-development