华为云用户手册

  • REGEXP_INSTR REGEXP_INSTR扩展了INSTR函数的功能,支持搜索字符串的正则表达式模式。DSC可迁移含有2到6个参数的REGEXP_INSTR。 sub_expr参数(参数#7)在Oracle中可用,但不支持迁移。如果输入脚本包含sub_expr,DSC会将其记录为错误。 支持将return_option设为0,不支持其他值。 支持将match_param设为“i”(匹配不区分大小写)和“c”(匹配区分大小写),不支持其他值。 1 2 3 4 5 6 7 8 9 REGEXP_INSTR( string, pattern, [start_position,] [nth_appearance,] [return_option,] [match_param,] [sub_expr] )
  • REGEXP_SUBSTR REGEXP_SUBSTR通过支持搜索字符串的正则表达式模式来扩展SUBSTR函数的功能。可迁移含有2到5个参数的REGEXP_SUBSTR。 sub_expr参数(参数#6)在Oracle中可用,但不支持迁移。如果输入脚本包含sub_expr,则DSC会将其记录为错误。 支持将match_param设为“i”(匹配不区分大小写)和“c”(匹配区分大小写),不支持其他值。 1 2 3 4 5 6 7 8 REGEXP_SUBSTR( string, pattern, [start_position,] [nth_appearance,] [match_param,] [sub_expr] )
  • CHECKSUM 在MySQL中,CHECKSUM表示对所有的行维护实时校验和。 GaussDB (DWS)不支持该属性修改表定义信息,DSC迁移时会将该关键字删除。 输入示例 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE `public`.`runoob_alter_test`( `dataType1` int NOT NULL AUTO_INCREMENT, `dataType2` FLOAT(10,2), `dataType3` DOUBLE(20,8), PRIMARY KEY(`dataType1`) ) CHECKSUM=1; ALTER TABLE runoob_alter_test CHECKSUM 0; ALTER TABLE runoob_alter_test CHECKSUM=0; ALTER TABLE runoob_alter_test CHECKSUM 1; ALTER TABLE runoob_alter_test CHECKSUM=1; 输出示例 1 2 3 4 5 6 7 8 9 10 CREATE TABLE "public"."runoob_alter_test" ( "datatype1" SERIAL NOT NULL, "datatype2" REAL, "datatype3" DOUBLE PRECISION, PRIMARY KEY ("datatype1") ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype1"); 父主题: 表(可选参数、操作)
  • 操作步骤 以gds_user用户登录安装GDS的数据服务器。 请根据启动GDS的方式,选择停止GDS的方式。 若用户使用“gds”命令启动GDS,请使用以下方式停止GDS。 执行如下命令,查询GDS进程号。 ps -ef|grep gds 示例:其中GDS进程号为128954。 ps -ef|grep gds gds_user 128954 1 0 15:03 ? 00:00:00 gds -d /input_data/ -p 192.168.0.90:5000 -l /log/gds_log.txt -D gds_user 129003 118723 0 15:04 pts/0 00:00:00 grep gds 使用“kill”命令,停止GDS。其中128954为上一步骤中查询出的GDS进程号。 kill -9 128954
  • SSL认证方式及客户端参数介绍 SSL认证有两种认证方式,如表1所示。从安全性考虑,建议使用双向认证方式。 表1 认证方式 认证方式 含义 配置客户端环境变量 维护建议 双向认证(推荐) 客户端验证服务器证书的有效性,同时服务器端也要验证客户端证书的有效性,只有认证成功,连接才能建立。 设置如下环境变量: PGSSLCERT PGSSLKEY PGSSLROOTCERT PGSSLMODE 该方式应用于安全性要求较高的场景。使用此方式时,建议设置客户端的PGSSLMODE变量为verify-ca。确保了网络数据的安全性。 单向认证 客户端只验证服务器证书的有效性,而服务器端不验证客户端证书的有效性。服务器加载证书信息并发送给客户端,客户端使用根证书来验证服务器端证书的有效性。 设置如下环境变量: PGSSLROOTCERT PGSSLMODE 为防止基于TCP链接的安全攻击,建议使用SSL证书认证功能。除配置客户端根证书外,建议客户端使用PGSSLMODE变量为verify-ca方式连接。 在客户端配置SSL认证相关的环境变量,详细信息请参见表2。 客户端环境变量的路径以“/home/dbadmin/dws_ssl/”为例,在实际操作中请使用实际路径进行替换。 表2 客户端参数 环境变量 描述 取值说明 PGSSLCERT 指定客户端证书文件,包含客户端的公钥。客户端证书用于表明客户端身份的合法性,公钥将发送给对端用来对数据进行加密。 必须包含文件的绝对路径,如: export PGSSLCERT='/home/dbadmin/dws_ssl/sslcert/client.crt' 默认值:空 PGSSLKEY 指定客户端私钥文件,用于数字签名和对公钥加密的数据进行解密。 必须包含文件的绝对路径,如: export PGSSLKEY='/home/dbadmin/dws_ssl/sslcert/client.key' 默认值:空 PGSSLMODE 设置是否和服务器进行SSL连接协商,以及指定SSL连接的优先级。 取值及含义: disable:只尝试非SSL连接。 allow:首先尝试非SSL连接,如果连接失败,再尝试SSL连接。 prefer:首先尝试SSL连接,如果连接失败,将尝试非SSL连接。 require:只尝试SSL连接。如果存在CA文件,则按设置成verify-ca的方式验证。 verify-ca:只尝试SSL连接,并且验证服务器是否具有由可信任的证书机构签发的证书。 verify-full:GaussDB(DWS)不支持此模式。 默认值:prefer 说明: 若集群外访问客户端时,部分节点出现报错:ssl SYSCALL error。则可执行export PGSSLMODE="allow"或export PGSSLMODE="prefer"。 PGSSLROOTCERT 指定为客户端颁发证书的根证书文件,根证书用于验证服务器证书的有效性。 必须包含文件的绝对路径,如: export PGSSLROOTCERT='/home/dbadmin/dws_ssl/sslcert/certca.pem' 默认值:空 PGSSLCRL 指定证书吊销列表文件,用于验证服务器证书是否在废弃证书列表中,如果在,则服务器证书将会被视为无效证书。 必须包含文件的绝对路径,如: export PGSSLCRL='/home/dbadmin/dws_ssl/sslcert/sslcrl-file.crl' 默认值:空
  • 客户端和服务器端SSL连接参数组合情况 客户端最终是否使用SSL加密连接方式、是否验证服务器证书,取决于客户端参数sslmode与服务器端(即GaussDB(DWS)集群侧)参数ssl、require_ssl。参数说明如下: ssl(服务器) ssl参数表示是否开启SSL功能。on表示开启,off表示关闭。 对于集群版本高于1.3.1(包括1.3.1)的集群,默认为on,不支持在GaussDB(DWS)管理控制台上设置。 对于集群版本低于1.3.1的集群,默认为on。ssl参数可通过GaussDB(DWS)管理控制台上集群的“安全设置”页面中的“SSL连接”进行设置。 require_ssl(服务器) require_ssl参数是设置服务器端是否强制要求SSL连接,该参数只有当ssl为on时才有效。on表示服务器端强制要求SSL连接。off表示服务器端对是否通过SSL连接不作强制要求。 对于集群版本高于1.3.1(包括1.3.1)的集群,默认为off。require_ssl参数可通过GaussDB(DWS)管理控制台上集群的“安全设置”页面中的“服务器端是否强制使用SSL连接”进行设置。 对于集群版本低于1.3.1的集群,默认为off,不支持在GaussDB(DWS)管理控制台上设置。 sslmode(客户端) 可在SQL客户端工具中进行设置。 在gsql命令行客户端中,为“PGSSLMODE”参数。 在Data Studio客户端中,为“SSL模式”参数。 客户端参数sslmode与服务器端参数ssl、require_ssl配置组合结果如下: 表3 客户端与服务器端SSL参数组合结果 ssl(服务器) sslmode(客户端) require_ssl(服务器) 结果 on disable on 由于服务器端要求使用SSL,但客户端针对该连接禁用了SSL,因此无法建立连接。 disable off 连接未加密。 allow on 连接经过加密。 allow off 连接未加密。 prefer on 连接经过加密。 prefer off 连接经过加密。 require on 连接经过加密。 require off 连接经过加密。 verify-ca on 连接经过加密,且验证了服务器证书。 verify-ca off 连接经过加密,且验证了服务器证书。 off disable on 连接未加密。 disable off 连接未加密。 allow on 连接未加密。 allow off 连接未加密。 prefer on 连接未加密。 prefer off 连接未加密。 require on 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 require off 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 verify-ca on 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 verify-ca off 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。
  • 在gsql客户端配置SSL认证相关的数字证书参数 GaussDB(DWS)在集群部署完成后,默认已开启SSL认证模式。服务器端证书,私钥以及根证书已经默认配置完成。用户需要配置客户端的相关参数。 登录GaussDB(DWS)管理控制台,在左侧导航栏中,进入“连接客户端”页面。 在“下载驱动程序”区域,单击“下载SSL证书”进行下载。 图1 SSL证书下载 使用文件传输工具(例如WinSCP工具)将SSL证书上传到客户端主机。 例如,将下载的证书“dws_ssl_cert.zip”存放到“/home/dbadmin/dws_ssl/”目录下。 使用SSH远程连接工具(例如PuTTY)登录gsql客户端主机,然后执行以下命令进入SSL证书的存放目录,并解压SSL证书: cd /home/dbadmin/dws_ssl/ unzip dws_ssl_cert.zip 在gsql客户端主机上,执行export命令,配置SSL认证相关的数字证书参数。 SSL认证有两种认证方式:双向认证和单向认证。认证方式不同用户所需配置的客户端环境变量也不同,详细介绍请参见SSL认证方式及客户端参数介绍。 双向认证需配置如下参数: export PGSSLCERT="/home/dbadmin/dws_ssl/sslcert/client.crt" export PGSSLKEY="/home/dbadmin/dws_ssl/sslcert/client.key" export PGSSLMODE="verify-ca" export PGSSLROOTCERT="/home/dbadmin/dws_ssl/sslcert/cacert.pem" 单向认证需要配置如下参数: export PGSSLMODE="verify-ca" export PGSSLROOTCERT="/home/dbadmin/dws_ssl/sslcert/cacert.pem" 从安全性考虑,建议使用双向认证方式。 配置客户端环境变量,必须包含文件的绝对路径。 修改客户端密钥的权限。 客户端根证书、密钥、证书以及密钥密码加密文件需保证权限为600。如果权限不满足要求,则客户端无法以SSL方式连接到集群。 chmod 600 client.key chmod 600 client.crt chmod 600 client.key.cipher chmod 600 client.key.rand chmod 600 cacert.pem
  • 查看执行计划和开销 执行计划显示如何对指代SQL语句的表格进行扫描,分为次序扫描和索引扫描。 SQL语句执行成本为预估的查询时间(查询的语句成本单位是随机的,通常情况下检查对象为磁盘页)。 查看SQL查询的计划和成本,可通过以下方式: 在“SQL终端”中输入查询或使用已有查询,单击工具栏的来查看解释计划。 若要查看使用了Analyze的解释计划,单击查询按钮,选择“包含ANALYZE结果”。然后再次单击查询。 “执行计划”默认在底部的新页签以树形图样式显示。显示支持树形样式和文本样式。 树形执行计划和Visual Explain中显示的数据可能会有所不同,因为二者执行的参数不同。 下表展示了使用和未使用Analyze解释计划时所选择的参数和显示的列: 表1 解释计划选项 解释计划类型 参数 列 未选择“包含ANALYZE结果”(默认值) Verbose、Costs Node type、startup cost、total cost、rows、width、additional Info 选择“包含ANALYZE结果” Analyze、Verbose、Costs、Buffers、Timing Node type、startup cost、total cost、rows、width、Actual startup time、Actual total time、Actual Rows、Actual loops、Additional Info Additional Info列包括谓词信息(过滤谓词和hash条件)、分布键、输出信息以及节点类型信息。 树形样式将节点划分为16个类型。在树形样式中,每个节点都将以相应类型的图标开头。下表列举了节点类别及相应图标。 表2 节点类别和图标 节点类别 图标 Aggregate Group Aggregate Function Hash Hash Join Nested Loop Nested Loop Join Modify Table Partition Iterator Row Adapter Seq Scan on Set Operator Sort Stream Union Unknown 将鼠标悬停在突出显示的单元格上,可以识别负载最重、开销最大、速度最慢的节点。只有树形样式支持单元格突出显示。 若选择了多个查询,则仅针对最后一个查询显示使用/未使用Analyze的解释计划。 每次执行一个执行计划,该计划都会在新页签中打开。 如果丢失连接但对象浏览器中依然保持数据库的连接,会弹出“连接错误”对话框,显示以下内容: “是”:重建连接,获取查询计划及开销。 “否”:断开对象浏览器中的数据库连接。 “执行计划”窗口中的工具栏菜单选项如下: 工具栏菜单 图标 描述 树形样式 此图标用于以树形样式查看解释计划。 文本样式 此图标用于以文本样式查看解释计划。 复制 此图标用于将所选内容从结果窗口复制到剪贴板,支持快捷键Ctrl+C。 保存 此图标用于以文本样式保存解释计划。 有关刷新、SQL预览和搜索栏的具体信息,请参见执行SQL查询。 刷新之后会重新执行Explain/Analyze查询并刷新当前页签显示的计划内容。 结果显示在“消息”页签中。 父主题: SQL终端管理
  • LONG RAW CREATE TABLE不支持“Data type LONG RAW”,需要用Bytea来替换Long Raw数据类型。 输入 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE TABLE SAD.WORKFLOWDEFS ( ID NUMBER(*,0), WF_NAME VARCHAR2(200), WF_DEFINITION LONG RAW, WF_VERSION NUMBER(*,0), WF_PUBLISH CHAR(1), WF_MAINFLOW CHAR(1), WF_APP_NAME VARCHAR2(20), CREATED_BY NUMBER, CREATION_DATE DATE, LAST_UPDATED_BY NUMBER, LAST_UPDATE_DATE DATE, WFDESC VARCHAR2(2000) ); 输出 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CREATE TABLE sad.workflowdefs ( id NUMBER (38, 0), wf_name VARCHAR2 (200), wf_definition BYTEA, wf_version NUMBER (38, 0), wf_publish CHAR(1), wf_mainflow CHAR(1), wf_app_name VARCHAR2 (20), created_by NUMBER, creation_date DATE, last_updated_by NUMBER, last_update_date DATE, wfdesc VARCHAR2 (2000) ); 父主题: Oracle语法迁移
  • 详细配置说明 参数 说明 默认值 支持版本 url dws数据库JDBC连接地址。 - 1.0 username dws数据库用户名。 - password dws数据库用户密码。 - connectionMaxUseTimeSeconds 连接最大使用时间(秒),超过该时间会强制关闭当前连接并重新获取;使用COPY_MERGE/COPY_UPSERT时会使用临时表,临时表的schema在连接断开时才会清除,主要用于清除该部分数据。 3600 connectionMaxIdleMs 连接最大空闲时间(毫秒)。 60000 metadataCacheSeconds 元数据缓存时间(秒),为提升性能,会对理论上不怎么变更的数据,例如表结构,该参数用于设置缓存过期时间。 180 retryBaseTime 重试时sleep时间 = retryBaseTime * 次数 + (0~retryRandomTime)毫秒,该参数设置时间基数(毫秒)。 1000 retryRandomTime retryBaseTime重试时sleep时间 = retryBaseTime * 次数 +(0~retryRandomTime)毫秒,该参数设置重试时的随机数范围,该参数主要用于在死锁场景将两个task执行时间错开(毫秒)。 300 maxFlushRetryTimes 执行刷库任务时,最大尝试执行次数。 3 autoFlushBatchSize 后台任务刷库策略:缓存条数大于等于autoFlushBatchSize或者当前时间 - 缓存开始时间大于等于autoFlushMaxIntervalMs,该参数配置缓存最大条数。 5000 autoFlushMaxIntervalMs 后台任务刷库策略:缓存条数大于等于autoFlushBatchSize或者当前时间 - 缓存开始时间大于等于autoFlushMaxIntervalMs,该参数配置缓存最大时间(毫秒)。 3000 copyWriteBatchSize 在writeMode设置为AUTO时,在数据量低于copyWriteBatchSize时会使用upsert方式入库,否则根据是否有主键选择copy/copy+ upsert方式入库。 6000 writeMode 数据写入模式: AUTO: 数据量低于copyWriteBatchSize使用UPSERT方式入库,否则使用COPY_UPSERT方式入库。 COPY_MERGE: 有主键使用copy+merge入库。 无主键使用copy入库。 COPY_UPSERT: 无主键使用copy入库。 有主键使用copy + upsert入库。 UPSERT: 无主键使用insert into。 有主键使用upsert入库。 UPDATE: 使用update where语法更新数据,若原表无主键可选择指定uniqueKeys,指定字段不要求必须是唯一索引,但非唯一索引可能会影响性能。 COPY_UPDATE: 数据先通过copy方式入库到临时表,通过临时表加速使用update from where方式更新目标数据。 UPDATE_AUTO: 批量小于copyWriteBatchSize使用UPDATE,否则使用COPY_UPDATE。 AUTO conflictStrategy 数据库存在主键时的主键冲突策略: INSERT_OR_IGNORE:主键冲突时忽略新数据。 INSERT_OR_UPDATE:主键冲突时使用新的数据列更新原数据对应列。 INSERT_OR_REPLACE:主键冲突时使用新数据替换原数据,数据库中新数据不包含列设置为null,对于全列更新和INSERT_OR_UPDATE无差异。 INSERT_OR_UPDATE threadSize 执行任务时的并发数量,异步任务中以表为维度提交任务,多表之间可并发;对于同一个表存在对字段列数不同的操作,例如在攒批中存在100条操作A B C字段、200条操作A B D字段那么最后会将操作字段一样的归为一类,不同类之间可并发入库,设置该参数可参考这两个场景设置,以提升吞吐。 3 logSwitch 日志开关,开启后会打印比较详细的过程日志,便于在调试或定位问题时开启。 false logDataTables 入库时需要打印数据的表,便于在定位问题时对比数据。 - flushSuccessFunction 数据入库成功后的回调函数。 - errorFunction 后台任务执行失败的回调函数。 - batchOutWeighRatio 为提高整体吞吐,当对autoFlushBatchSize要求不是很严格时,可设置该参数,当往buffer中提交数据时buffer中数据量大于batchOutWeighRatio * autoFlushBatchSize时提交线程将会执行提交入库的任务,该参数用于避免业务线程提交任务,尽量使用后台线程执行提交。 1 tableConfig 对于conflictStrategy、writeMode、copyWriteBatchSize、autoFlushMaxIntervalMs、autoFlushBatchSize、batchOutWeighRatio在多表共用一个client的情况可能需要根据不同表配置不同值,该参数可实现以上参数的表级配置,在未配置的表则生效全局参数。 说明: 注意一旦配置表级参数,其它表级参数也会被设置默认值,必须将其它表级参数也设置上。 - uniqueKeys 该参数为表级参数必须通过tableConfig配置,该参数用于在表中无主键但是有唯一索引时,在入库时使用该参数指定字段做唯一约束,在update场景中该字段不需要是唯一索引或者主键,但upsert场景必须要唯一索引或主键。 - 1.0.3 copyMode 使用copy入库的格式: CS V:将数据拼接成字符串数据用双引号包裹的CSV格式,其中字段间以逗号分割,数据间以换行分割。使用jdbc copy api入库,该方式性能略低于DELIMITER方式,但比较稳定可靠。 DELIMITER:将数据字段使用copy api入库,其中字符间以0X1E分割,数据间以0X1F分割。该方式要求数据不包含分隔符,如包含将报错不能正常入库,且该方式定义null字符串为null数据,如果数据为null字符串将被设置为null。 CSV 1.0.6 caseSensitive 表字段大小写是否敏感。 false 1.0.7 createTempTableMode 在使用copy merge/upsert时,创建临时表方式: AS:使用create temp table *** as select * from *** as方式创建,该方式支持表中带自增字段的使用,但性能略低。 LIKE:使用create temp table *** like方式创建,该方式不支持表中带自增字段。 AS 1.0.7 numberAsEpochMsForDatetime 如果数据库字段是时间类型(date\time\timestamp)并且数据源为数字类型,是否将源数据按毫秒时间戳转换为对应时间类型。 说明: 在copy入库场景该参数不生效。 在此版本前该参数为开启状态,且如果数据是数字类型字符串也将视为时间戳。 false 1.0.9 stringToDatetimeFormat 如果数据库字段是时间类型(date\time\timestamp)并且数据源为字符串类型,通过SimpleDateFormat按stringToDatetimeFormat格式转换为日期类型,然后通过日期中的时间戳构造数据库对应类型数据。 说明: 该参数配置即代表开启,如果不需要请勿配置。 null updateAll upsert时set字段是否包含主键。 true 1.0.10
  • 简介 dws-client是一款基于DWS JDBC实现的高性能、便捷入库工具,用户在使用时必须保证JDBC可以连接。其中使用dws-client入库具备如下优势: dws-client提供对缓存的空间、时间维度的限制,支持攒批提升入库性能,以满足业务在高峰低谷期的入库实时性。 攒批:在实时性要求不严格的场景,对单条数据操作进行缓存,待缓存至多条后批量操作,以提升写入性能。 支持并发入库。 内部实现多种高性能入库方式、主键冲突策略,满足各种场景入库需求。 API方式交互,低门槛使用。 图1 dws-client交互场景
  • 异常处理 异常可分为三类: InvalidException运行时异常不显示抛出,触发在请求参数无效时。 DwsClientException对所有异常的封装,包含被解析的code以及原始异常。 DwsClientRecordException对DwsClientException的扩展,包含写入异常的数据集合以及对应DwsClientException异常。 异常code对照: public enum ExceptionCode { /** * 无效参数 */ INVALID_CONFIG(1), /** * 连接异常 */ CONNECTION_ERROR(100), /** * 只读 */ READ_ONLY(101), /** * 超时 */ TIMEOUT(102), /** * 连接数过多 */ TOO_MANY_CONNECTIONS(103), /** * 加锁异常 */ LOCK_ERROR(104), /** * 认证失败 */ AUTH_FAIL(201), /** * 已经关闭 */ ALREADY_CLOSE(202), /** * 无权限 */ PERMISSION_DENY(203), SYNTAX_ERROR(204), /** * 内部异常 */ INTERNAL_ERROR(205), /** * 中断异常 */ INTERRUPTED(206), /** * 表未发现 */ TABLE_NOT_FOUND(207), CONSTRAINT_VIOLATION(208), DATA_TYPE_ERROR(209), DATA_VALUE_ERROR(210), /** * 解析不到的异常 */ UNKNOWN_ERROR(500); private final int code; }
  • 约束 表中的约束应用于多列。DSC支持以下约束: REFEREN CES 约束/FOREIGN KEY:目前无法通过工具迁移。 PRIMARY KEY约束:可通过工具迁移。 UNIQUE约束:可通过工具迁移。 输入:CREATE TABLE,使用CONSTRAINT 1 2 3 4 5 6 7 8 9 10 CREATE SET TABLE DP_SEDW.T_170UT_HOLDER_ACCT, NO FALLBACK, NO BEFORE JOURNAL, NO AFTER JOURNAL ( BUSINESSDATE VARCHAR(10) , SOURCESYSTEM VARCHAR(5) , UPLOADCODE VARCHAR(1) , HOLDER_NO VARCHAR(7) NOT NULL , POSTAL_ADD_4 VARCHAR(40) , EPF_IND CHAR(1) , CONSTRAINT uq_t_170ut_hldr UNIQUE ( SOURCESYSTEM, UPLOADCODE, HOLDER_NO ) ) PRIMARY INDEX ( HOLDER_NO, SOURCESYSTEM ) ; 输出: 1 2 3 4 5 6 7 8 9 10 CREATE TABLE DP_SEDW.T_170UT_HOLDER_ACCT ( BUSINESSDATE VARCHAR( 10 ) , SOURCESYSTEM VARCHAR( 5 ) , UPLOADCODE VARCHAR( 1 ) , HOLDER_NO VARCHAR( 7 ) NOT NULL , POSTAL_ADD_4 VARCHAR( 40 ) , EPF_IND CHAR( 1 ) , CONSTRAINT uq_t_170ut_hldr UNIQUE ( SOURCESYSTEM, UPLOADCODE, HOLDER_NO ) ) DISTRIBUTE BY HASH ( HOLDER_NO, SOURCESYSTEM ); 输入: 建表后,可使用ALTER语句为该表字段添加列级约束。 1 2 3 4 CREATE TABLE GCC_PLAN.T1033 ( ROLLOUT_PLAN_LINE_ID NUMBER NOT NULL, UDF_FIELD_VALUE_ID NUMBER NOT NULL) ; ALTER TABLE GCC_PLAN.T1033 ADD CONSTRAINT UDF_FIELD_VALUE_ID_PK UNIQUE (UDF_FIELD_VALUE_ID) ; 输出: 1 2 3 4 CREATE TABLE GCC_PLAN.T1033 ( ROLLOUT_PLAN_LINE_ID NUMBER NOT NULL, UDF_FIELD_VALUE_ID NUMBER NOT NULL, CONSTRAINT UDF_FIELD_VALUE_ID_PK UNIQUE (UDF_FIELD_VALUE_ID) ; 建表脚本中,需在所有列声明之后添加约束创建语法。 父主题: 表迁移
  • 图形化查看执行计划和开销 Visual Explain计划从扩展JSON格式中获取信息,以图形化方式显示SQL查询。该功能有助于优化查询以增强查询和服务器性能及分析数据库所用的查询路径,并找出最拥挤,开销最高和运行最慢的节点。 图形化执行计划展示了SQL语句所引用的表是如何被扫描的(普通顺序扫描和索引扫描)。 SQL语句的执行开销取决于其运行时长(可使用任意开销单位度量,但是通常以磁盘中每页的抓取数计算。) Costliest:“Self Cost”最高的计划节点。 Heaviest: 输出行数最大的计划节点被认为是最拥挤的计划节点。 Slowest:所需执行时间最长的计划节点。 按照以下步骤以图表形式查看所需SQL查询的计划和成本: 在“SQL终端”页签输入查询或使用现有查询,然后单击工具栏中的 。 显示“可视化计划分析”窗口。 如果在获取执行计划和开销的过程中丢失连接,请参见查看执行计划和开销获取关于重新连接选项的具体信息。 1 - “一般信息”:显示查询详情。 2 - “可视化解释计划”:以图形化方式显示所有节点,如开销最高、最拥挤的和最慢的计划节点。单击每个计划节点可查看节点详情。 3 - “属性 - 一般”:以毫秒为单位提供查询的执行时间。 4 - “属性 - 所有节点”:提供所有节点信息。 字段名 说明 Node Name 显示节点名称。 Analysis 显示各节点的分析信息。 RowsOutput 显示计划节点输出的行数。 RowsOutput Deviation (%) 显示预估的输出行数和计划节点实际的输出行数之间的偏差百分比。 Execution Time (ms) 显示查询在计划节点上的执行时间。 Contribution (%) 显示查询在计划节点上的执行时间占整个查询执行时间的百分比。 Self Cost 显示在计划节点上执行查询的“Total Cost”,即为所有子节点的总开销。 Total Cost 显示在计划节点上执行查询所消耗的总成本。 5 - “属性 - 执行计划”:显示所有节点上的执行信息。 列名 说明 节点名称 节点名称 实体名称 对象名称 开销 计划节点执行时间 行 计划节点输出行数 循环 每个节点执行的循环数 宽度 计划节点输出行的平均宽度估算值(以字节为单位) 实际行数 计划节点输出行数的估算值 实际时间 计划节点的实际执行时间 6 - “计划节点 - 一般”:显示各节点信息。 行名 描述 Output 显示计划节点返回的字段信息。 Analysis 显示开销最大、最慢和最拥挤的计划节点分析信息。 RowsOutput Deviation (%) 显示预估的输出行数和计划节点的实际输出行之间的偏差百分比。 Row Width (bytes) 显示预估的计划节点输出行的平均宽度(单位:字节)。 Plan Output Rows 显示计划节点输出的行数。 Actual Output Rows 显示预估的计划节点输出行数。 Actual Startup Time 计划节点生成第一条记录所耗费的执行时间。 Actual Total Time 显示计划节点的实际执行时间。 Actual Loops 显示该节点执行的迭代数。 Startup Cost 显示计划节点输出第一条记录所耗费的时间。 Total Cost 显示查询在计划节点上的执行时间。 Is Column Store 表示表的存储方式(列或行存储)。 Shared Hit Blocks 显示缓存命中的共享块数量。 Shared Read Blocks 显示从缓存读取的共享块数量。 Shared Dirtied Blocks 显示缓存中弄脏的共享块数量。 Shared Written Blocks 显示缓存写入的共享块数量。 Local Hit Blocks 显示缓存命中的局部块数量。 Local Read Blocks 显示从缓存读取的局部块数量。 Local Dirtied Blocks 显示缓存中弄脏的局部块数量。 Local Written Blocks 显示缓存写入的局部块数量。 Temp Read Blocks 显示从缓存读取的临时块数量。 Temp Written Blocks 显示缓存写入的临时块数量。 I/O Read Time (ms) 显示该节点执行任意I/O读操作的耗时。 I/O Write Time (ms) 显示该节点执行任意I/O写操作的耗时。 Node Type 显示计划节点的类型。 Parent Relationship 显示与父节点的关系。 Inner Node Name 子节点名称 Node/s 无需输入,将从属性中移除。 根据计划节点类型可以显示其他信息。举例如下: 计划节点 其他 Partitioned CStore Scan 表名、表别名和模式名 Vector Sort 排序键 Vector Hash Aggregate 分组键 Vector Has Join Join类型和Hash条件 Vector Streaming 分布键和Spawn On 7 - “计划节点 - DN详情”:为每个节点提供详细的DN信息。只有在从DN收集数据时,“DN详情”才可用。 有关复制和搜索工具栏选项的说明,请参阅查看数据。 父主题: SQL终端管理
  • LOCK DSC工具在迁移MySQL事务处理锁表语句时会根据GaussDB(DWS)特性进行相应适配。 输入示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ## A. START TRANSACTION; LOCK TABLES `mt`.`runoob_tbl` WRITE,`mt`.`runoob_tb2` READ; commit; ## B. START TRANSACTION; LOCK TABLES `mt`.`runoob_tbl` WRITE; commit; ## C. START TRANSACTION; LOCK TABLES `mt`.`runoob_tbl` READ,`mt`.`runoob_tbl` AS t1 READ; commit; 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -- A. START TRANSACTION; LOCK TABLE "mt"."runoob_tbl" IN ACCESS EXCLUSIVE MODE; LOCK TABLE "mt"."runoob_tb2" IN ACCESS SHARE MODE; COMMIT WORK; -- B. START TRANSACTION; LOCK TABLE "mt"."runoob_tbl" IN ACCESS EXCLUSIVE MODE; COMMIT WORK; -- C. START TRANSACTION; LOCK TABLE "mt"."runoob_tbl" IN ACCESS SHARE MODE; COMMIT WORK;
  • TRANSACTION DSC工具在迁移MySQL事务处理语句时会根据GaussDB(DWS)特性进行相应适配。 输入示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ##该声明仅适用于会话中执行的下一个单个事务 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION READ ONLY; SET TRANSACTION READ WRITE; SET TRANSACTION ISOLATION LEVEL READ COMMITTED,READ ONLY; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE,READ WRITE; ##使用SESSION关键字,适用于当前会话中执行的所有后续事务 START TRANSACTION; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE; commit ; 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 --该声明仅适用于会话中执行的下一个单个事务 SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED; SET LOCAL TRANSACTION ISOLATION LEVEL REPEATABLE READ; SET LOCAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SET LOCAL TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET LOCAL TRANSACTION READ ONLY; SET LOCAL TRANSACTION READ WRITE; SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY; SET LOCAL TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE; --使用SESSION关键字,适用于当前会话中执行的所有后续事务 START TRANSACTION; SET SESSION CHARACTERIS TICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED; SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED; SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE; COMMIT WORK;
  • ROLLUP MySQL中的group by column with rollup需要转换为GaussDB(DWS)中的group by rollup (column); 输入示例 1 2 3 select id,product_id,count(1) from czb_account.equity_account_log where id in (6957343,6957397,6957519,6957541,6957719) group by 1, 2 with rollup; 输出示例 1 2 3 4 5 6 7 8 9 10 SELECT id, product_id, count(1) FROM czb_account.equity_account_log WHERE id IN (6957343, 6957397, 6957519, 6957541, 6957719) GROUP BY ROLLUP(1, 2); 父主题: 数据操作语句(DML)
  • 概述 本章主要介绍关于DSC使用过程中相关的内容,包括DSC工具的安装,工具配置,DSC工具的迁移流程等内容。 请务必使用最新的补丁更新操作系统和相关软件,以防漏洞和其他安全问题。 为确保安全性,DSC会对其创建的文件和文件夹进行访问控制。要访问这些文件和文件夹,用户必须拥有所需权限。例如,用户需要权限600/400访问目标文件和日志文件,需要权限700访问目标文件夹和日志文件夹。此外,该工具不在日志中保存敏感数据,以确保数据安全。 --input-folder中指定的文件或文件夹不得具有GROUP和OTHERS的写权限。 出于安全考虑,如果输入文件/文件夹具有写入权限,则该工具不会执行。 不得使用拥有root权限的用户在Linux中安装和执行DSC。 DSC.jar文件中提供的umask值是系统设置值,与文件权限相关。建议用户不要修改此值。修改此值将影响文件权限。 DSC是一个单机应用程序,无需与任何网络或数据库连接即可运行。它可以在与任何网络隔离的任何机器上运行。 父主题: 使用DSC
  • 设置Java内存分配 DSC支持通过参数控制Java虚拟机(JVM)的内存分配量,并预设默认值。 在迁移操作期间,如果内存使用超过设置的值,DSC将提示“java.lang.OutOfMemoryError: GC overhead limit exceeded”错误消息并退出,此时用户可通过更改application.properties配置文件中的initialJVMMemory和maxJVMMemory 的值,以分配更多内存。 可用系统资源决定了内存分配量。 表2 JVM内存分配的控制参数 参数 说明 推荐取值 Xms 指定初始内存分配量,单位为MB。 该参数最小值为256 MB,最大值取决于可用的系统资源。 默认值:256 Xmx 指定内存分配量的上限,单位为MB。 该参数最小值为1024 MB,最大值取决于可用的系统资源。 默认值:1024 打开校验模块config文件夹下的gaussdb.properties文件,参照表3,配置参数以连接GaussDB(DWS)。 表3 gaussdb.properties文件内参数 参数名 描述 取值范围 默认值 样例 gaussdb-user GaussDB(DWS)数据库用户,拥有全部权限。 NA NA user1 gaussdb-port GaussDB(DWS)数据库端口号。 NA NA 8000 gaussdb-name GaussDB(DWS)的数据库名称。 NA NA gaussdb gaussdb-ip GaussDB(DWS)数据库IP地址。 NA NA 10.XX.XX.XX
  • 设置application.properties application.properties文件中包括一系列应用配置参数,用于控制DSC在迁移数据库脚本时的行为,该文件中的参数为通用控制参数,适用于Teradata、MySQL迁移。 设置方法如下。 打开config文件夹中的application.properties文件。 根据实际需要修改application.properties文件中参数的值。 application.properties文件中的参数解释见表1。 参数值不区分大小写。 除了列出的参数外,用户不得更改任何参数值。 保存后退出。
  • MULTISET MULTISET是一个普通表,所有数据库都支持这个表。迁移工具同时支持MULTISET和SET表。 MULTISET表支持与VOLATILE一起使用。 输入:CREATE MULTISET TABLE 1 CREATE VOLATILE MULTISET TABLE T1 (c1 int ,c2 int); 输出: 1 2 3 4 5 6 7 CREATE LOCAL TEMPORARY TABLE T1 ( c1 INTEGER ,c2 INTEGER ) ; 父主题: 表迁移
  • CREATE TABLE Teradata的CREATE TABLE (缩写关键字为CT)语句用于创建表。 示例: 输入:CREATE TABLE 1 2 3 CT tab1 ( id INT ); 输出: 1 2 3 4 5 6 CREATE TABLE tab1 ( id INTEGER ) ; 执行CREATE tab2 AS tab1时,从tab1中复制的结构将用于创建表tab2。如果CREATE TABLE语句包含WITH DATA选项,则会将tab1的数据也复制到tab2中。使用CREATE AS时,源表中的CONSTRAINT行将保留在新表中。 如果session_mode设为Teradata,则必须删除目标表中的重复记录。该操作通过在迁移脚本中添加MINUS运算符实现。 如果session_mode设为ANSI,则允许目标表中存在重复记录。 如果源表具有PRIMARY KEY(主键)或UNIQUE CONSTRAINT(唯一约束),则该表不包含任何重复记录。在这种情况下,不需要添加MINUS操作符删除重复的记录。 示例: 输入:CREATE TABLE AS WITH DATA(session_mode=Teradata) 1 2 CREATE TABLE tab2 AS tab1 WITH DATA; 输出: 1 2 3 4 5 6 7 8 9 10 11 BEGIN CREATE TABLE tab2 ( LIKE tab1 INCLUDING ALL EXCLUDING PARTITION EXCLUDING RELOPTIONS ); INSERT INTO tab2 SELECT * FROM tab1 MINUS SELECT * FROM tab2; END ; / 输入:CREATE TABLE AS WITH DATA AND STATISTICS 1 2 3 4 CREATE SET VOLATILE TABLE tab2025 AS ( SELECT * from tab2023 ) WITH DATA AND STATISTICS PRIMARY INDEX ( LOG TYPE, OPERSEQ); 输出: 1 2 3 4 5 CREATE LOCAL TEMPORARY TABLE tab2025 DISTRIBUTE BY HASH ( LOGTYPE, OPERSEQ ) AS ( SELECT * FROM tab2023 ); ANALYZE tab2025; 父主题: 表迁移
  • SPATIAL空间索引 GaussDB(DWS)不支持SPATIAL空间索引。DSC工具迁移时会根据GaussDB(DWS)的特性进行相应适配。 内联SPATIAL空间索引。 输入示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 CREATE TABLE `public`.`test_create_table04` ( `ID` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `A` POINT NOT NULL, `B` POLYGON NOT NULL, `C` GEOMETRYCOLLECTION NOT NULL, `D` LINESTRING NOT NULL, `E` MULTILINESTRING NOT NULL, `F` MULTIPOINT NOT NULL, `G` MULTIPOLYGON NOT NULL, SPATIAL INDEX A_INDEX(A), SPATIAL INDEX B_INDEX(B), SPATIAL INDEX C_INDEX(C), SPATIAL KEY D_INDEX(D), SPATIAL KEY E_INDEX(E), SPATIAL KEY F_INDEX(F), SPATIAL INDEX G_INDEX(G) ); 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 CREATE TABLE "public"."test_create_table04" ( "id" SERIAL NOT NULL PRIMARY KEY, "a" POINT NOT NULL, "b" POLYGON NOT NULL, "c" GEOMETRYCOLLECTION NOT NULL, "d" POLYGON NOT NULL, "e" BOX NOT NULL, "f" BOX NOT NULL, "g" POLYGON NOT NULL ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("id"); CREATE INDEX "a_index" ON "public"."test_create_table04" USING GIST ("a"); CREATE INDEX "b_index" ON "public"."test_create_table04" USING GIST ("b"); CREATE INDEX "c_index" ON "public"."test_create_table04" USING GIST ("c"); CREATE INDEX "d_index" ON "public"."test_create_table04" USING GIST ("d"); CREATE INDEX "e_index" ON "public"."test_create_table04" USING GIST ("e"); CREATE INDEX "f_index" ON "public"."test_create_table04" USING GIST ("f"); CREATE INDEX "g_index" ON "public"."test_create_table04" USING GIST ("g"); ALTER TABLE创建SPATIAL空间索引。 输入示例 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TABLE `public`.`test_create_table04` ( `ID` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `A` POINT NOT NULL, `B` POLYGON NOT NULL, `C` GEOMETRYCOLLECTION NOT NULL, `D` LINESTRING NOT NULL, `E` MULTILINESTRING NOT NULL, `F` MULTIPOINT NOT NULL, `G` MULTIPOLYGON NOT NULL ); ALTER TABLE `test_create_table04` ADD SPATIAL INDEX A_INDEX(A); ALTER TABLE `test_create_table04` ADD SPATIAL INDEX E_INDEX(E) USING BTREE; 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 CREATE TABLE "public"."test_create_table04" ( "id" SERIAL NOT NULL PRIMARY KEY, "a" POINT NOT NULL, "b" POLYGON NOT NULL, "c" GEOMETRYCOLLECTION NOT NULL, "d" POLYGON NOT NULL, "e" BOX NOT NULL, "f" BOX NOT NULL, "g" POLYGON NOT NULL ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("id"); CREATE INDEX "a_index" ON "public"."test_create_table04" USING GIST ("a"); CREATE INDEX "e_index" ON "public"."test_create_table04" USING GIST ("e"); CREATE INDEX创建SPATIAL空间索引。 输入示例 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE `public`.`test_create_table04` ( `ID` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `A` POINT NOT NULL, `B` POLYGON NOT NULL, `C` GEOMETRYCOLLECTION NOT NULL, `D` LINESTRING NOT NULL, `E` MULTILINESTRING NOT NULL, `F` MULTIPOINT NOT NULL, `G` MULTIPOLYGON NOT NULL ); CREATE SPATIAL INDEX A_INDEX ON `test_create_table04`(A); 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE TABLE "public"."test_create_table04" ( "id" SERIAL NOT NULL PRIMARY KEY, "a" POINT NOT NULL, "b" POLYGON NOT NULL, "c" GEOMETRYCOLLECTION NOT NULL, "d" POLYGON NOT NULL, "e" BOX NOT NULL, "f" BOX NOT NULL, "g" POLYGON NOT NULL ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("id"); CREATE INDEX "a_index" ON "public"."test_create_table04" USING GIST ("a"); 父主题: 索引
  • 类型对照 输入示例BOOL/BOOLEAN 1 2 3 4 5 CREATE TABLE IF NOT EXISTS `runoob_dataType_test`( `dataType_1` INT, `dataType_2` BOOL, `dataType_3` BOOLEAN ); 输出示例 1 2 3 4 5 6 7 8 9 CREATE TABLE IF NOT EXISTS "public"."runoob_datatype_test" ( "datatype_1" INTEGER, "datatype_2" BOOLEAN, "datatype_3" BOOLEAN ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype_1");
  • 数据类型 子类型 包中的自定义类型无法被转换。 SUBTYPE error_msg IS sad_products_t.exception_description%TYPE; SUBTYPE AR_FLAG IS SAD_RA_LINES_TI.AR_FLAG%TYPE; SUBTYPE LOCK_FLAG IS SAD_SHIPMENT_BATCHES_T.LOCK_FLAG%TYPE; bas_subtype_pkg.error_msg 输入: 1 2 3 4 5 6 7 8 9 CREATE OR REPLACE PACKAGE SAD.bas_subtype_pkg IS SUBTYPE func_name IS sad_products_t.func_name%TYPE; END bas_subtype_pkg; / CREATE OR REPLACE PACKAGE BODY SAD.bas_subtype_pkg IS BEGIN NULL; END bas_subtype_pkg; / 输出: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE OR REPLACE PACKAGE BODY SAD.bas_dml_lookup_pkg IS g_pkg_name CONSTANT VARCHAR2(30) := 'bas_dml_ic_price_rule_pkg' ; g_func_name VARCHAR2(100); FUNCTION func_name RETURN VARCHAR2 IS l_func_name bas_subtype_pkg.func_name;; BEGIN l_func_name := g_pkg_name || '.' || g_func_name ; RETURN l_func_name ; END func_name; END bas_dml_lookup_pkg; / %ROWTYPE 包的过程/函数包含 IN/OUT参数中的%ROWTYPE属性,此功能不被支持。 脚本:BAS_DML_SERVIECE_PKG.SQL, BAS_LOOKUP_MISC_PKG.SQL 输入: 1 2 3 4 5 6 7 8 CREATE OR REPLACE PACKAGE BODY "SAD"."BAS_DML_SERVIECE_PKG" IS PROCEDURE save_split_ou(pi_split_ou IN split_ou%ROWTYPE, po_error_msg OUT VARCHAR2) IS --- BEGIN --- end save_split_ou; end BAS_DML_SERVIECE_PKG; 输出: 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE OR REPLACE PROCEDURE SAD.BAS_DML_SERVIECE_PKG#save_split_ou ( pi_split_ou IN split_ou%ROWTYPE ,po_error_msg OUT VARCHAR2 ) IS MIG_PV_VAL_DUMMY_G_FUNC_NAME VARCHAR2 ( 30 ) := MIG_ORA_EXT.MIG_FN_GET_PKG_VARIABLE ( current_schema ( ) ,'BAS_DML_SERVIECE_PKG' ,'g_func_name' ) ::VARCHAR2 ( 30 ) ; ex_data_error EXCEPTION ; ex_prog_error EXCEPTION ; --- BEGIN --- END; 输入 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE OR REPLACE PACKAGE BODY SAD.BAS_DML_SERVIECE_PKG IS PROCEDURE save_split_ou(pi_split_ou IN split_ou%ROWTYPE, po_error_msg OUT VARCHAR2) IS BEGIN UPDATE split_ou so SET so.auto_balance_flag = pi_split_ou.auto_balance_flag, so.balance_start_date = pi_split_ou.balance_start_date, so.balance_source = pi_split_ou.balance_source WHERE so.dept_code = pi_split_ou.dept_code; EXCEPTION WHEN OTHERS THEN po_error_msg := 'Others Exception raise in ' || g_func_name || ',' || SQLERRM; END save_split_ou; END bas_dml_serviece_pkg; / 输出 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 CREATE TYPE mig_typ_split_ou AS ...; CREATE OR REPLACE PROCEDURE SAD.BAS_DML_SERVIECE_PKG#save_split_ou ( pi_split_ou IN mig_typ_split_ou ,po_error_msg OUT VARCHAR2 ) PACKAGE IS BEGIN UPDATE split_ou so SET so.auto_balance_flag = pi_split_ou.auto_balance_flag ,so.balance_start_date = pi_split_ou.balance_start_date ,so.balance_source = pi_split_ou.balance_source WHERE so.dept_code = pi_split_ou.dept_code ; EXCEPTION WHEN OTHERS THEN po_error_msg := 'Others Exception raise in ' || g_func_name || ',' || SQLERRM ; END ; / 父主题: Oracle语法迁移
  • 背景信息 gs_dumpall是GaussDB(DWS)用于导出所有数据库相关信息工具,它可以导出集群数据库的所有数据,包括默认数据库postgres的数据、自定义数据库的数据、以及集群所有数据库公共的全局对象。 gs_dumpall工具在进行数据导出时,其他用户可以访问集群数据库(读或写)。 gs_dumpall工具支持导出完整一致的数据。例如,T1时刻启动gs_dumpall导出整个集群数据库,那么导出数据结果将会是T1时刻该集群数据库的数据状态,T1时刻之后对集群数据库的修改不会被导出。 gs_dumpall在导出整个集群所有数据库时分为两部分: gs_dumpall自身对所有数据库公共的全局对象进行导出,包括有关数据库用户和组,表空间以及属性(例如,适用于数据库整体的访问权限)信息。 gs_dumpall通过调用gs_dump来完成集群中各数据库的SQL脚本文件导出,该脚本文件包含将数据库恢复为其保存时的状态所需要的全部SQL语句。 以上两部分导出的结果为纯文本格式的SQL脚本文件,使用gsql运行该脚本文件可以恢复集群数据库。
  • 参数说明 通用参数: -f, --filename=FILENAME 将输出发送至指定文件。如果这里省略,则使用标准输出。 -v, --verbose 指定verbose模式。该选项将导致gs_dumpall向转储文件输出详细的对象注解和启动/停止次数,向标准错误流输出处理信息。 -V, --version 打印gs_dumpall版本,然后退出。 --lock-wait-timeout=TIMEOUT 请勿在转储刚开始时一直等待以获取共享表锁。如果无法在指定时间内锁定某个表,就选择失败。可以以任何符合SET statement_timeout的格式指定超时时间。 -?, --help 显示gs_dumpall命令行参数帮助,然后退出。 转储参数: -a, --data-only 只转储数据,不转储模式(数据定义)。 -c, --clean 在重新创建数据库之前,执行SQL语句清理(删除)这些数据库。针对角色和表空间的转储命令已添加。 -g, --globals-only 只转储全局对象(角色和表空间),无数据库。 -o, --oids 转储每个表的对象标识符(OIDs),作为表的一部分数据。该选项用于应用以某种方式(例如:外键约束方式)参照了OID列的情况。如果不是以上这种情况,请勿使用该选项。 -O, --no-owner 不输出设置对象的归属这样的命令,以匹配原始数据库。默认情况下,gs_dumpall会发出ALTER OWNER或SET SESSION AUTHORIZATION语句设置所创建的模式元素的所属。如果脚本正在运行,该语句不会执行成功,除非是由系统管理员触发(或是拥有脚本中所有对象的同一个用户)。通过指定-O,编写一个任何用户都能存储的脚本,且该脚本会授予该用户拥有所有对象的权限。 -r, --roles-only 只转储角色,不转储数据库或表空间。 -s, --schema-only 只转储对象定义(模式),而非数据。 -S, --sysadmin=NAME 在转储过程中使用的系统管理员名称。 -t, --tablespaces-only 只转储表空间,不转储数据库或角色。 -x, --no-privileges 防止转储访问权限(授权/撤销命令)。 --column-inserts|--attribute-inserts 以INSERT命令带列名(INSERT INTO表(列、…)值…)方式导出数据。这会导致恢复缓慢。但是由于该选项会针对每行生成一个独立分开的命令,所以在重新加载某行时出现的错误只会导致那行丢失,而非整个表内容。 --disable-dollar-quoting 该选项将禁止在函数体前使用美元符号$,并强制使用SQL标准字符串语法对其进行引用。 --disable-triggers 该参数为扩展预留接口,不建议使用。 --inserts 发出INSERT命令(而非COPY命令)时转储数据。这会导致恢复缓慢。注意如果重排列顺序,可能会导致恢复整个失败。--column-inserts选项更加安全,虽然可能更慢些。 --no-security-labels 该参数为扩展预留接口,不建议使用。 --no-tablespaces 该参数在8.2.0.100版本中已废弃,为兼容历史版本功能保留该函数。 请勿输出创建表空间的命令,也请勿针对对象选择表空间。使用该选项,无论默认表空间是哪个,在恢复过程中所有对象都会被创建。 --no-unlogged-table-data 该参数为扩展预留接口,不建议使用。 --quote-all-identifiers 强制对所有标识符加引号。为了向后续版本迁移,且其中可能涉及引入额外关键词,在转储相应数据库时该选项会有帮助。 --dont-overwrite-file 不重写当前文件。 --use-set-session-authorization 输出符合SQL标准的SET SESSION AUTHORIZATION命令而不是ALTER OWNER命令来确定对象所有权。这样令转储更加符合标准,但是如果转储文件中的对象的历史有些问题,那么可能不能正确恢复。并且,使用SET SESSION AUTHORIZATION的转储需要数据库系统管理员的权限才能转储成功,而ALTER OWNER需要的权限则低得多。 --with-encryption=AES128 指定转储数据需用AES128进行加密。 --with-key=KEY AES128密钥长度必须是16字节。 --include-extensions 如果include-extensions参数被设置,将备份所有的CREATE EXTENSION语句。 --include-templatedb 转储过程中包含模板库。 --dump-nodes 转储过程中包含节点和Node Group。 --include-nodes 将TO NODE语句包含在已转储的CREATE TABLE命令中。 --include-buckets 该参数为扩展预留接口,不建议使用。 --dump-wrm 存储过程中包含负载资源管理器,具体包括资源池、负载组以及负载组映射。 --binary-upgrade 该参数为扩展预留接口,不建议使用。 --binary-upgrade-usermap="USER1=USER2" 该参数为扩展预留接口,不建议使用。 --tablespaces-postfix 该参数为扩展预留接口,不建议使用。 --parallel-jobs 指定备份进程并发数,取值范围为1~1000。
  • 注意事项 禁止修改导出的文件和内容,否则可能无法恢复成功。 为了保证数据一致性和完整性,gs_dumpall会对需要转储的表设置共享锁。如果某张表在别的事务中设置了共享锁,gs_dumpall会等待此表的锁释放后锁定此表。如果无法在指定时间内锁定某张表,转储会失败。用户可以通过指定--lock-wait-timeout选项,自定义等待锁超时时间。 由于gs_dumpall读取所有数据库中的表,因此必须以数据库集群管理员身份进行连接,才能导出完整文件。在使用gsql执行脚本文件导入时,同样需要管理员权限,以便添加用户和组,以及创建数据库。
  • 迁移后验证 Database Schema Convertor转换完含有SQL语句的源文件后,在目标GaussDB(DWS)上执行转换后的文件,并生成文件执行成功和失败的明细报告。 Database Schema Convertor完成迁移后,会调用迁移后验证脚本(通过配置项控制)。此验证脚本(配置详情见配置文件)会连接到目标 GaussDB数据库 并执行。 迁移后验证脚本会连接到目标GaussDB数据库(具体信息在配置文件中配置),并执行该脚本。 配置config文件夹下的application.properties 在GaussDB中执行迁移脚本的取值范围:true/false,默认值:false。 将executesqlingauss设置为true。 true: executesqlingauss将在GaussDB上执行迁移脚本。 配置config文件夹下的gaussdb.properties #目标数据库配置 #gauss database user with all privileges gaussdb-user= gaussdb-port= #Database name for GaussDBA gaussdb-name= #gaussdb ip gaussdb-ip= gsql客户端的依赖关系: 由于在GaussDB上执行脚本时需依赖gsql(GaussDB(DWS)),为保证Database Schema Convertor正常运行,需在安装了GaussDB实例或客户端(gsql)的节点上运行Database Schema Convertor,且进行验证的用户具有执行gsql命令的权限。 由于Gauss数据库实例/客户端只能安装在Linux操作系统中,因此只能用于Linux环境下的功能验证。 在远程GaussDB实例上执行gsql命令,建议在GaussDB实例的如下配置文件中增加客户端系统IP或主机名。 /home/gsmig/database/coordinator ---pg_hba.conf 回显 GaussDB(DWS) ********************** Verification Started ****************************** Sql script execution on Gauss DB start time : Wed Jan 22 17:27:07 CST 2020 Sql script execution on Gauss DB end time : Wed Jan 22 17:27:44 CST 2020 Summary of Verification : ================================================================================================================================== Statement | Total | Passed | Failed | Success Rate(%) ----------------------------------------------------------------------------------------------------------------------------------- COMMENT | 15 | 15 | 0 | 100 CREATE VIEW | 4 | 3 | 1 | 75 CREATE INDEX | 4 | 3 | 1 | 75 CREATE TABLE | 6 | 6 | 0 | 100 ALTER TABLE | 3 | 3 | 0 | 100 --------------------------------------------------------------------------------------------------------------------------------- Total | 32 | 30 | 2 | 93 Gauss Execution Log file : /home/gsmig/18Jan/DSC/DSC/log/gaussexecutionlog.log Gauss Execution Error Log file : /home/gsmig/18Jan/DSC/DSC/log/gaussexecutionerror.log Verification finished in 38 seconds ********************** Verification Completed ****************************
  • PACK_KEYS 在MySQL中,PACK_KEYS表示MyISAM存储引擎中的压缩索引。GaussDB(DWS)不支持该属性,DSC迁移时会将该属性删除。 输入示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 CREATE TABLE `public`.`runoob_alter_test`( `dataType1` int NOT NULL AUTO_INCREMENT, `dataType2` DOUBLE(20,8), `dataType3` TEXT NOT NULL, PRIMARY KEY(`dataType1`) ) ENGINE=MyISAM PACK_KEYS=1; ##A ALTER TABLE runoob_alter_test PACK_KEYS 0; ALTER TABLE runoob_alter_test PACK_KEYS=0; ##B ALTER TABLE runoob_alter_test PACK_KEYS 1; ALTER TABLE runoob_alter_test PACK_KEYS=1; ##C ALTER TABLE runoob_alter_test PACK_KEYS DEFAULT; ALTER TABLE runoob_alter_test PACK_KEYS=DEFAULT; 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 CREATE TABLE "public"."runoob_alter_test" ( "datatype1" SERIAL NOT NULL, "datatype2" DOUBLE PRECISION, "datatype3" TEXT NOT NULL, PRIMARY KEY ("datatype1") ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype1"); --A --B --C 父主题: 表(可选参数、操作)
共100000条