暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

DM8达梦数据库数据导入导出常见问题

原创 达梦 2021-01-31
16270

DM 只导出表结构不导出数据

针对导出数据库表结构通常有3种方法:

  1. 使用 DTS 导出

打开 DTS 迁移工具,选择【DM–>SQL】并链接到数据库中,如下图所示:

选择迁移类型

添加定义脚本,并选择【迁移范围】(仅迁移对象定义),如下图所示:

选择迁移范围

选择需要导出结构的表,如下图所示:

选择表

迁移完成,表结构已经导出,如下图所示:

表结构迁移完成

DTS 同样可以将表结构迁移至其他数据库中或者从其他数据库迁移至 DM 数据库中。

  1. 使用 DMP 方式导出

打开 manager.exe,DM 管理工具链接至数据库中,如下图所示:

Manager工具

右键选择你想要导出的模式,点击【导出】,如下图所示:如下图所示:

选择要导出的模式

勾选掉数据行选项,点击【确定】完成导出,如下图所示:

去掉数据行选项

完成导出,包含表结构的 DMP 文件生成,如下图所示:

导出完成日志

  1. 使 Disql 命令行方式导出

参考《DM_dexp 和 dimp 使用手册》(手册位于数据库安装路径 /dmdbms/doc/special 文件夹下)。-dexp 参数 -ROWS- 导出数据行-改为 ROWS=N

SELECT DBMS_METADATA.GET_DDL('TABLE',表名,模式名);//参考 DBMS_METADATA 系统包
CALL SP_TABLEDEF('模式名', '表名');//SQL 语句调用系统过程 SP_TABLEDEF
复制

可以通过 SP_TABLEDEF 系统过程查看表的定义。

6092 数据大小已超过可支持范围

  • 方法一

​一般情况下,此问题由于实际数据超过了 DM 数据库支持的大小范围,重点分析被迁移数据的数字类型字段 (INT、BIGINT、NUMBER),找到造成引起报错的字段后,观察数据可以考虑将字段改为 BIGINT 或者 VARCHAR 字符字段以规避错误。

各数据类型范围详情可以参考《DM_SQL 语言使用手册》第一章 1.4.1 节内容(手册位于数据库安装路径 /dmdbms/doc 文件夹下)。

INTEGER 类型:-2147483648 (-2^31)~ +2147483647(2^31-1)。
BIGINT 类型: -9223372036854775808(-2^63)~9223372036854775807(2^63-1)。
复制
  • 方法二

默认 8 KB 的页大小情况下,字符类型无法创建超过 3900 长度的表。需要重新初始化数据库实例,对页大小进行调整。需要注意的是:这个限制长度只针对建表的情况,在定义变量的时候,可以不受这个限制长度的限制。

页大小 字符类型实际最大长度
4k 1900
8k 3900
16k 8000
32k 8188

​两个建库参数有影响,一个字符集,一个“长度以字符为单位”。

​比如 oracle 中的 nvarchar2(50) 这个类型,表示该字段类型为 nvarchar2,长度为 50,不论英文、数字、中文都能存 50 个。在 DM 数据库中,如果长度以字符为单位这个参数建库的时候选了否,UNICODE 字符集,nvarchar2(50) 还是只能存 16 个中文。

  • 方法三

在有表结构的基础上,将报错的表【启用超长记录】打开。

  • 方法四

找到超过限定列长度的字符类型,改为 Text。​这种方式是在有表结构的基础上,且可以确认到记录超长字段,设置【字符类型】为 Text。

如何使用管理工具导入 SQL 数据

  • 方法一

将将 SQL 语句粘贴到查询窗口,然后执行。这种方式适合 SQL 不多的情况下使用,如果 SQL 比较多,比如几万条,那么在复制粘贴的时候就会受性能影响了,可能会导致管理工具卡死。

  • 方法二

将 SQL 保存到 SQL 类型的文件中,然后用管理工具打开 SQL 文件,如下图所示:

管理工具

这种方式也相对简单,但是如果文件大小不能超过 20 MB,当超过 20 MB 时会报 [文件过于庞大] 错误,如下图所示:

错误

  • 方法三

使用管理工具的【执行脚本】功能,如下图所示:

执行脚本

这种方式适合导入比较大的脚本,测试导入 3.42 GB 的 SQL 也是可以的,但还是不建议直接这样导入很大的 SQL,如果不能及时提交会使用大量的内存资源。

另外:如果要导入比较大的 SQL 还可以考虑使用迁移工具将数据 SQL 导入 DM 数据库,使用迁移工具还可以设置一次性提交的语句条数和缓存批次,这样可以提高数据导入的效率。

选择迁移模式

迁移参数

DM 如何导出数据为 SQL 格式

无论使用“管理工具”还是“迁移工具”都可以远程连接数据库进行操作,所以只要本机安装 DM 数据库客户端即可操作,不需要登录服务器本机操作。

  • 使用管理工具

方法一:

使用生成 SQL 脚本方式生成建表语句,并保存为 SQL 文件,或直接生成文件,如下图所示:

生成SQL脚本

SQL脚本

方法二:

查看表属性中的 DDL,复制语句并保存为 SQL 文件,如下图所示:

DDL

导出数据,此方法在数据量不大的情况下可以使用。查询出表数据,在结果中右键选择【导出所有】,选路径然后选要保存的类型为 SQL 并输入文件名。如下图所示:

结果集

保存类型

  1. 使用 DM 数据迁移工具 DTS

​该方法适合导出比较大的表,如下图所示:

迁移工具

数据源

导出SQL文件

选择对象

迁移

迁移报告

迁移过程和结束会显示迁移的情况,如有错误可以点击【查看日志】和【重新迁移出错对象】,有报错时在列表中也可以点击查看具体的报错信息。

迁移成功

将 Excel 数据导入 DM

使用 DM 数据迁移工具 DTS(以下简称“DTS”)可将不同数据或数据类型的文件数据导入到 DM 数据库中,其中 Excel 就可以使用迁移工具进行导入。

无论 Windows 或 Linux,在安装好 DM 数据库后,都会在安装后的 dmdbms/tool 目录下安装一系列的客户端工具,如 Windows 下迁移工具名称为 dts.exe,如下图所示:

目录地址

如果试用图形化安装的 DM 数据库,同时会桌面或开始菜单生产一个【达梦数据库】的文件夹,可以在文件夹中快速的启动【DM 数据迁移工具】,如下图所示:

工具目录

  • 如何使用迁移工具导入 Excel

打开迁移工具,点击【新建工程】按钮,新建工程,如下图所示:

新建工程

展开新建的工程,选择【迁移】-点击【新建迁移】,如下图所示:

新建迁移

迁移名称

开始配置迁移(导入)Excel数据,​点击【下一步】,如下图所示:

迁移工具

​在列表中选择【文件迁移到达梦】中【Excel–>DM】,如下图所示:

迁移方式

​选择要导入的 Excel 文件,如下图所示:

选择Excel文件

​配置要导入的目的端数据库,如下图所示:

目的端数据库

​选择要导入到的模式,如下图所示:

选择导入到的模式

​选择要导入的模式对应的目的表,如果有没有新建,可输入表名,导入过程中会自动创建相应的表,如下图所示:

目的对象

​点击【完成】开始迁移,如下图所示:

开始迁移

​完成迁移,如下图所示:

完成迁移

​检查数据,如下图所示:

检查数据

至此,数据已经导入到 DM 数据库中了,如果需要设置导入的列的数据类型,可以在导入前先将对应的数据表进行创建,然后再导入过程中的【目的对象】输入表名即可。

同样的,还可以将不同类型的数据库(如 Oracle、DB2、MySQL 等)和文件(如 TXT、XML等)数据导入到 DM 数据库中。另外达梦公司还有 DMETL 软件,也可以通过 DMETL 进行导入,此处不进行详细介绍。

MANAGER 如何导出 SQL 脚本

  • 导出单个对象的 DDL 语句

选中单个对象,如具体的表或者视图,单击右键选择【生成 SQL 脚本】,如下图所示:

生成SQL脚本

  • 导出一类对象的 DDL 语句

​选中表节点或者视图节点,右键,生成 SQL,会生成下面所有表的 SQL,如下图所示:

生成SQL脚本

  • 导出所有对象的 DDL 语句

模式对象导出

选择导出的文件

导入 dmp 的正确方式

导出备份文件,如下图所示:

导出

选择导出 dmp 存放的路径,如下图所示:

导出目录

导出成功,如下图所示:

导出成功

​在选择的路径下会生成 dmp 文件和导出日志,如下图所示:

文件

使用管理工具导入,如原表还存在,则报错,如下图所示:

报错信息

  • 如果只是一个表的导出 dmp 文件,则清空表 truncate table,再导入即可。

(为了防止清空表而导致数据丢失,可以重命名表如:alter table tab1 rename to tab2;再创建表和 tab2 一样表结构的 tab1如:create table tab1 as select * from tab2 where 1=2;

  • 如果是模式导出的 dmp 文件,则先删除模式下的全部表。如表太多了,可以直接删除用户。重新创建用户,再模式导入 dmp 文件。

删除drop、user 用户,如下图所示:

删除用户

执行以下语句,创建用户(创建用户前,需先创建表空间):

create user "TELLER2019" identified by "TELLER2019"
default tablespace "HCSTTB"--指定数据表空间
default index tablespace "HCSTTB";--指定索引表空间
grant "PUBLIC","RESOURCE" to "TELLER2019"; --用户权限
复制

导入 dmp 备份文件,如下图所示:

备份文件

选择 dmp 存放路径,如下图所示:

存放路径

导入成功,如下图所示:

成功

如果表已经存在了,使用默认方式导入 dmp 时会报错【表或视图已存在】,我们分以下不同情况讨论:

  • 如果需要导入少量表且只表定义并未发生过变化,我们可以在导入命令增加参数 ignore=y 即可,导入时忽略创建错误;
  • 如果需要导入的表定义已经发生过变化,则我们需要删除数据库中的表后再导入;
  • 如果需要导入少量表且数据需要重新灌入,则可以将表数据备份之后,将此表 truncate,再进行导入操作,同时增加参数 ignore=y;

导入 dmp 文件时出现乱码、问号

一般是由于导出与导入时的字符集的环境变量不同。使用命令行 dimp 命令导入,并在执行 dimp 前先执行 export LANG=... 将当前字符集调整的和导出时的一样。

读取 DM 数据库中文乱码,则可能是使用的应用软件和 DM 数据库的应用软件字符集不一致,调整两个字符集为一致状态。另外,在 DM 数据库中,字符集一旦确定好则不可以修改,需要在创建 DM 数据库实例之前确定好字符集,保证不会出现此类问题。

导入 dmp 文件提示初始化参数不一致

警告信息如下:

页大小不匹配,restore error code : -8210。
CASE_SENSIVE 参数不匹配、大小写参数不一致,大小写区分属性不匹配,restore error code : -8212。
LENGTH_IN_CHAR 属性不匹配,restore error code : -8266;编码不一致。
复制
  • 页大小不匹配

【问题原因】

这是因为产生备份文件的数据库数据文件使用页大小与还原备份文件的数据库数据文件所使用的页大小不同,必须保证两边的数据文件使用的页大小一致才能正常还原。

注意

数据文件使用的页大小 (page_size),可以为 4 KB、8 KB、16 KB 或 32 KB,选择的页大小越大,则 DM 支持的元组长度也越大,但同时空间利用率可能下降,缺省使 8 KB。

【解决方法】

使用数据库配置助手 dbca 重现初始化一个库,在设置参数时注意保证两边的页大小一致。

或者在命令行中使用 dminit 重现初始化一个库,在设置参数时注意保证两边的页大小一致。

  • 大小写区分属性不匹配,restore error code : [-8212]

【解决方法】

这是因为产生备份文件的数据库的标识符大小写 (case_sensitive) 的敏感程度与还原备份文件的数据库对标识符大小写的敏感程度不同,必须保证两边对标识符大小写敏感程度一致才能正常还原。

注意

标识符大小写敏感,默认值为 Y。当大小写敏感时,小写的标识符应用双引号括起,否则被转换为大写;当大小写不敏感时,系统不自动转换标识符的大小写,在标识符比较时也不区分大小写。

  • LENGTH_IN_CHAR 属性不匹配

【解决方法】

这是因为产生备份文件的数据库的 LENGTH_IN_CHAR 属性(默认为 0)与还原备份文件的数据库的 LENGTH_IN_CHAR 属性不一致,必须保证两边数据库的 LENGTH_IN_CHAR 属性一致才能正常还原。

注意

LENGTH_IN_CHAR 属性设置为 1 时,所有 VARCHAR 类型对象的长度以字符为单位,否则以字节为单位。

  • 编码不一致

【解决方法】

这是因为产生备份文件的数据库的字符集编码属性(默认为 GB18030)与还原备份文件的数据库的字符集编码属性不一致,必须保证两边数据库的字符集编码属性一致才能正常还原。

注意

只有初始化实例的时候可以选择以上属性,一经启用无法修改。需要重新初始化实例保持导出和导入的初始化设置一样。

高效的数据装载方式

​DM 数据库除了 dts 和 dimp 之外,还提供了快速数据装载命令行工具 dmfldr,通过使用 dmfldr 工具能够把按照一定格式排序的文本数据以简单、快速、高效的方式载入到 DM 数据库中,或把 DM 数据库中的数据按照一定格式写入文本文件。

dmfldr 实际上除了客户端工具,还包含一个在 DM 数据库服务器中的 dmfldr 功能模块,它们共同完成 dmfldr 的各项功能。

​当进行数据载入时, dmfldr 客户端接收用户提交的命令与参数,分析控制文件与数据文件,将数据打包发送给服务器端的 dmfldr 模块,由服务器完成数据的真正装载工作。并分析服务器返回的消息,必要时根据用户参数指定生成日志文件与错误数据文件。

​当进行数据导出时,dmfldr 客户端接收用户提交的命令与参数,分析控制文件,将用户要求转换成相应消息发送给服务器端的 dmfldr 模块。服务器解析并打包需要导出的数据,发送给 dmfldr 客户端,客户端将数据写入指定的数据文件,必要时根据用户参数指定生成日志文件。

在程序目录 bin 下执行,使用方法如下:

./dmfldr userid=SYSDBA/SYSDBA control=’/opt/fldr.ctl’
复制

​其中 fldr.ctl 需要手动进行配置,控制文件用于指定数据文件中数据的格式,在数据载入时,dmfldr 根据控制文件指定的格式来解析数据文件;导出数据时,dmfldr 也会根据控制文件指定的列分隔符、行分隔符等生成数据文件。控制文件中还可以指定其他的一些 dmfldr 参数值。

​具体使用方法和配置方法详见《DM_dmfldr 使用手册》。(手册位于数据库安装路径 /dmdbms/doc/special 文件夹下)

ArcGIS 使用 DM 导入导出 shp 数据

在 2015 年 10 月 27 日至 28 日举行的 2015 第十三届 Esri 中国用户大会上,Esri 中国信息技术有限公司总裁何宁宣布:Esri 中国公司与武汉达梦数据库股份有限公司达成合作,通过双方间的共同研发,ArcGIS 即将完成对 DM 数据库的原生支持。从 ArcGIS 10.4.X 开始支持达梦数据 V7.1.5 及以上版本。下面简单介绍如何使用 DM 数据库:

软件 版本
操作系统 Windows 10
ArcGIS ArcGIS 10.4.1
DM 数据库 DM V7.6.0.153(32 位和 64 位都要安装)
  1. 安装 ArcGIS 10.4.1 过程省略。
  2. 安装 64 位 DM 数据并初始化一个实例,安装 32 位 DM 数据库,过程省略。
  3. 将 32 位 DM 数据的..\dmdbms\bin 目录中的 .dll 文件全部拷贝到 ArcGIS 的 ..\Desktop10.4\bin 目录下,有同名文件直接覆盖掉。此步骤非常重要,如果没有拷贝 32 位的 dll 文件到 ArcGIS 中,将会报错,如下图所示:

报错信息

  1. 使用管理员用户登录数据,调用系统过程 SP_INIT_GEO_SYS(1) 创建 DMGEO 包,如下图调用过程后,工具包中【GEOGRAPHY SYSTEM】将会处于启用状态。

工具包

  1. 添加 shp 数据。

打开 ArcCatalog-右键【连接到文件夹】,如下图所示:

连接到文件

  1. 连接 DM 数据库。

打开 ArcCatalog-数据库连接-双击【添加数据库连接图标】-在【数据库平台】选择【Dameng】,在【数据源】中添加 DM 数据库原,身份验证类型使用默认的【数据库身份认证】,输入数据库的的用户和密码,这里使用数据库的系统管理员用户 SYSDBA,最后点击【确定】即可。

数据源的格式:LOCALHOST;TCP_PORT=5236;CHARACTER_CODE=PG_UTF8

LOCALHOST 表示使用本机的数据库,如果是远程的请使用 IP;
TCP_PORT=5236 表示数据库端口号是 5236;
CHARACTER_CODE=PG_UTF8 表示使用 PG_UTF8 字符集。
复制

连接后可查看数据库中的表数据,如下图所示:

表信息

  1. 导入 shp 文件数据到 DM 数据中。

导入 shp 文件数据,如下图所示:

导入

导入后可以在 DM 数据中看到刚导入的要素类,如下图所示:

要素类

  1. 将保存在 DM 数据库中的要素类数据导出为 shp 文件数据,并测试导出要素类为 shp 文件数据。

导出

导出后的 shp 文件,如下图所示:

信息

用 ArcMap 测试导出的 shp 文件数据,如下图所示:

文件数据

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论