华为云用户手册

  • 设置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,配置参数以连接Gauss DB。 表3 gaussdb.properties文件内参数 参数名 描述 取值范围 默认值 样例 gaussdb-user 高斯数据库用户,拥有全部权限。 NA NA user1 gaussdb-port 高斯数据库端口号。 NA NA 2002 gaussdb-name GaussDB(DWS)的数据库名称。 NA NA gaussdb gaussdb-ip 高斯数据库IP地址。 NA NA 10.XX.XX.XX
  • 设置application.properties application.properties文件中包括一系列应用配置参数,用于控制DSC在迁移数据库脚本时的行为,该文件中的参数为通用控制参数,适用于Teradata、MySQL迁移。 设置方法如下。 打开config文件夹中的application.properties文件。 根据实际需要修改application.properties文件中参数的值。 application.properties文件中的参数解释见表1。 参数值不区分大小写。 除了列出的参数外,用户不得更改任何参数值。 保存后退出。
  • 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 父主题: 表(可选参数、操作)
  • 主键和唯一键 如果在建表时声明了主键和唯一键两个约束,仅迁移主键。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 create table SD_WO.WO_DU_TRIGGER_REVENUE_T ( TRIGGER_REVENUE_ID NUMBER not null, PROJECT_NUMBER VARCHAR2(40), DU_ID NUMBER, STANDARD_MS_CODE VARCHAR2(100), TRIGGER_STATUS NUMBER, TRIGGER_MSG VARCHAR2(4000), BATCH_NUMBER NUMBER, PROCESS_STATUS NUMBER, ENABLE_FLAG CHAR(1) default 'Y', CREATED_BY NUMBER, CREATION_DATE DATE, LAST_UPDATE_BY NUMBER, LAST_UPDATE_DATE DATE ) ; alter table SD_WO.WO_DU_TRIGGER_REVENUE_T add constraint WO_DU_TRIGGER_REVENUE_PK primary key (TRIGGER_REVENUE_ID); alter table SD_WO.WO_DU_TRIGGER_REVENUE_T add constraint WO_DU_TRIGGER_REVENUE_N1 unique (DU_ID, STANDARD_MS_CODE); 输出 CREATE TABLE SD_WO.WO_DU_TRIGGER_REVENUE_T ( TRIGGER_REVENUE_ID NUMBER NOT NULL ,PROJECT_NUMBER VARCHAR2 (40) ,DU_ID NUMBER ,STANDARD_MS_CODE VARCHAR2 (100) ,TRIGGER_STATUS NUMBER ,TRIGGER_MSG VARCHAR2 (4000) ,BATCH_NUMBER NUMBER ,PROCESS_STATUS NUMBER ,ENABLE_FLAG CHAR( 1 ) DEFAULT 'Y' ,CREATED_BY NUMBER ,CREATION_DATE DATE ,LAST_UPDATE_BY NUMBER ,LAST_UPDATE_DATE DATE ,CONSTRAINT WO_DU_TRIGGER_REVENUE_PK PRIMARY KEY (TRIGGER_REVENUE_ID) ) ;
  • PROMPT命令 PROMPT命令应转换成Gauss支持的\ECHO命令。 Oracle语法 迁移后语法 prompt prompt Creating table product prompt =============================== prompt create table product ( product_id VARCHAR2(20), product_name VARCHAR2(50) ); \echo \echo Creating table product \echo =============================== \echo CREATE TABLE product ( product_id VARCHAR2(20), product_name VARCHAR2(50) );
  • TEXT和YEAR 输入:TEXT, YEAR 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 SELECT NAME, VALUE, DESCRIPTION TEXT, JOINED YEAR, LIMIT FROM EMPLOYEE; SELECT NAME, TEXT, YEAR, VALUE, DESCRIPTION, LIMIT FROM EMPLOYEE_DETAILS; 输出 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 SELECT "NAME", VALUE, DESCRIPTION AS TEXT, JOINED AS YEAR, "LIMIT" FROM EMPLOYEE; SELECT "NAME", "TEXT", "YEAR", VALUE, DESCRIPTION, "LIMIT" FROM EMPLOYEE_DETAILS;
  • 范围、账号和语言 当Gauss关键字用作SELECT列表中任意列的别名且没有使用AS时,需要使用“AS关键字”的格式来定义别名。 输入 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 CREATE OR REPLACE /*FORCE*/ VIEW SAD.FND_TERRITORIES_TL_V ( TERRITORY_CODE ,TERRITORY_SHORT_NAME ,LANGUAGE ,Account ,Range ,LAST_UPDATED_BY ,LAST_UPDATE_DATE ,LAST_UPDATE_LOGIN ,DESCRIPTION ,SOURCE_LANG ,ISO_NUMERIC_CODE ) AS SELECT t.TERRITORY_CODE ,t.TERRITORY_SHORT_NAME ,t.LANGUAGE ,t.Account ,t.Range ,t.LAST_UPDATED_BY ,t.LAST_UPDATE_DATE ,t.LAST_UPDATE_LOGIN ,t.DESCRIPTION ,t.SOURCE_LANG ,t.ISO_NUMERIC_CODE FROM fnd_territories_tl t UNION ALL SELECT 'SS' TERRITORY_CODE ,'Normal Country' TERRITORY_SHORT_NAME ,NULL LANGUAGE ,NULL Account ,NULL Range ,NULL LAST_UPDATED_BY ,NULL LAST_UPDATE_DATE ,NULL LAST_UPDATE_LOGIN ,NULL DESCRIPTION ,NULL SOURCE_LANG ,NULL ISO_NUMERIC_CODE FROM DUAL ; 输出 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 CREATE OR REPLACE /*FORCE*/ VIEW SAD.FND_TERRITORIES_TL_V ( TERRITORY_CODE ,TERRITORY_SHORT_NAME ,LANGUAGE ,CREATED_BY ,CREATION_DATE ,LAST_UPDATED_BY ,LAST_UPDATE_DATE ,LAST_UPDATE_LOGIN ,DESCRIPTION ,SOURCE_LANG ,ISO_NUMERIC_CODE ) AS SELECT t.TERRITORY_CODE ,t.TERRITORY_SHORT_NAME ,t.LANGUAGE ,t.CREATED_BY ,t.CREATION_DATE ,t.LAST_UPDATED_BY ,t.LAST_UPDATE_DATE ,t.LAST_UPDATE_LOGIN ,t.DESCRIPTION ,t.SOURCE_LANG ,t.ISO_NUMERIC_CODE FROM fnd_territories_tl t UNION ALL SELECT 'SS' TERRITORY_CODE ,'Normal Country' TERRITORY_SHORT_NAME ,NULL AS LANGUAGE ,NULL CREATED_BY ,NULL CREATION_DATE ,NULL LAST_UPDATED_BY ,NULL LAST_UPDATE_DATE ,NULL LAST_UPDATE_LOGIN ,NULL DESCRIPTION ,NULL SOURCE_LANG ,NULL ISO_NUMERIC_CODE FROM DUAL ;
  • 导出视图DDL 可通过右键单击“导出DDL”导出该视图的定义。 在“对象浏览器”窗格中,右键单击所选视图,选择“导出DDL”。 用户需自定义导出路径。如果需要将数据压缩,勾选“.zip”选项。 “Data Studio安全免责声明”必须勾选“我同意”才可以单击“确定”。用户可关闭安全免责声明,关闭后导出DDL时将不会再出现,详情请参见表1。 单击“确定”,右下角的状态栏会显示操作进度。 “导出完成”对话框和状态栏显示已完成操作的状态。 要终止导出操作,双击状态栏,打开“进度视图”页签,单击。 如果视图名称包含Windows不支持的字符,则导出的文件名称将与视图名称不同。 数据库编码 文件编码 支持导出DDL UTF-8 UTF-8 是 GBK 是 LATIN1 是 GBK GBK 是 UTF-8 是 LATIN1 否 LATIN1 LATIN1 是 GBK 否 UTF-8 是
  • AVG_ROW_LENGTH 在MySQL中,AVG_ROW_LENGTH表示平均每行的长度。 GaussDB(DWS)不支持此属性,并在迁移过程中被DSC删除。 输入示例 1 2 3 4 5 6 CREATE TABLE `public`.`runoob_tbl_test`( `runoob_id` VARCHAR(30), `runoob_title` VARCHAR(100) NOT NULL, `runoob_author` VARCHAR(40) NOT NULL, `submission_date` VARCHAR(30) )AVG_ROW_LENGTH=10000; 输出示例 1 2 3 4 5 6 7 8 9 10 CREATE TABLE "public"."runoob_tbl_test" ( "runoob_id" VARCHAR(120), "runoob_title" VARCHAR(400) NOT NULL, "runoob_author" VARCHAR(160) NOT NULL, "submission_date" VARCHAR(120) ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("runoob_id"); 父主题: 表(可选参数、操作)
  • 除法表达式 MySQL中,除法表达式中,当除数为0时,会返回null值。DWS会报错,因此对除法表达式进行转换,增加一个if条件表达式。 输入示例 1 2 select sum(c1) / c2 as result from table_t1; select sum(c1) / count (c3/c4) as result from table_t1; 输出示例 1 2 SELECT (if (c2 = 0, null, sum(c1) / c2)) AS "result" FROM table_t1; SELECT (if (count(if (c4 = 0, null, c3 / c4)) = 0, null, sum(c1) / count(if (c4 = 0, null, c3 / c4)))) AS "result" FROM table_t1; 父主题: SELECT
  • 示例 将GDS安装部署在节点192.168.1.100、192.168.1.101上,并指定安装目录为/opt/gdspackages/install_dir,GDS用户是gds_test:wheel。 gds_install -I /opt/gdspackages/install_dir --host 192.168.1.100,192.168.1.101 -U gds_test -G wheel --pkg /home/gds_test/GaussDB-8.2.1-REDHAT-x86_64bit-Gds.tar.gz
  • 参数说明 -I 安装目录。 默认值:/opt/${gds_user}/packages/,其中${gds_user}表示GDS业务的操作系统用户。 -U GDS用户。 -G GDS用户所属组。 --pkg GDS安装包路径,形如/path/to/GaussDB-8.2.1-REDHAT-x86_64bit-Gds.tar.gz。 --host 待安装部署节点的IP列表,支持文件和字符串两种形式: 文件形式:每一行一个IP地址,如: 192.168.2.200 192.168.2.201 字符串形式:半角逗号分隔,如: 192.168.2.200,192.168.2.201。 执行命令节点必须是待部署节点之一,其IP须在列表中。 --ping-host 调用gds_check时,在各检查节点上进行网络ping检查的目标地址。 取值:IP列表,支持文件和字符串两种形式,一般是DN、CN、网关的IP地址。 文件形式:每一行一个IP地址,如: 192.168.2.200 192.168.2.201 字符串形式:半角逗号分隔,如: 192.168.2.200,192.168.2.201 -V 显示版本信息。 -h, --help 显示帮助信息。
  • Oracle PACKAGE迁移注意事项 1. 应将包规范(即包头)与包体分置于不同文件、相同输入路径中进行迁移。 2. 应先使用Bulk模式迁移普通DDL语句(包含PACKAGE脚本中引用到的全部表结构信息),以在config/create-types-UDT.properties文件中形成字典信息。之后再使用Blogic模式迁移包规范(即包头)与包体。具体解释如下: 在部分Oracle PACKAGE定义包规范时,使用了"tbName.colName%TYPE"语法以基于其他表对象声明自定义的记录类型。 1 2 3 4 5 6 7 8 9 10 例如 CREATE OR REPLACE PACKAGE p_emp AS --定义RECORD类型 TYPE re_emp IS RECORD( rno emp.empno%TYPE, rname emp.empname%TYPE ); END; GaussDB暂不支持通过"tbName.colName%TYPE"语法在CREATE TYPE命令中指定列数据类型,DSC工具在迁移时需要构建含有诸如emp表信息的数据库上下文环境。由此需要先使用DSC工具迁移所有的建表脚本(即使用Bulk模式迁移普通DDL语句),DSC内部会自动生成相应的数据字典。当含有各种表信息的上下文环境构建完成后,可以使用Blogic模式迁移 Oracle PACKAGE,此时re_emp记录类型会根据emp表的列类型完成迁移。 1 2 3 4 5 期望输出 CREATE TYPE p_emp.re_emp AS ( rno NUMBER(4), rname VARCHAR2(10) );
  • 存储过程 Netezza语法 迁移后语法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 CREATE OR REPLACE PROCEDURE sp_ntz_proc_call ( CHARACTER VARYING(8) ) RETURNS INTEGER LANGUAGE NZPLSQL AS BEGIN_PROC DECLARE V_PAR_DAY ALIAS for $1; V_PRCNAME NVARCHAR(50):= 'SP_O_HXYW_LNSACCTINFO_H'; D_TIME_START TIMESTAMP:= CURRENT_TIMESTAMP; O_RETURN INTEGER; BEGIN O_RETURN := 0; CALL SP_LOG_EXEC(V_PRCNAME,V_PAR_DAY,D_TIME_START,0,0); RETURN O_RETURN; END; END_PROC; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE OR REPLACE FUNCTION sp_ntz_proc_call ( CHARACTER VARYING(8) ) RETURN INTEGER AS V_PAR_DAY ALIAS for $1; V_PRCNAME NCHAR VARYING(50):= 'SP_O_HXYW_LNSACCTINFO_H'; D_TIME_START TIMESTAMP:= CURRENT_TIMESTAMP; O_RETURN INTEGER; BEGIN O_RETURN := 0; SP_LOG_EXEC(V_PRCNAME,V_PAR_DAY,D_TIME_START,0,0); RETURN O_RETURN; END; /
  • 分析函数(analytic_function) Netezza语法 迁移后语法 1 2 3 4 5 6 7 8 9 10 11 SELECT COALESCE(NULLIF(GROUP_CONCAT(a.column_name),''),'*') FROM (SELECT a.column_name FROM tb_ntz_group_concat a WHERE UPPER(a.table_name) = 'EMP' ORDER BY a.column_pos) a; ------------- SELECT admin.group_concat('"top'||lpad(a.table_name,2,'0')||'":{'||a.column_name||'}') topofund_data FROM (SELECT a.table_name, a.column_name FROM tb_ntz_group_concat a WHERE UPPER(a.table_name) = 'EMP' ORDER BY a.column_pos) a; 1 2 3 4 5 6 7 8 9 10 11 SELECT COALESCE(NULLIF(STRING_AGG(a.column_name, ','),''),'*') FROM (SELECT a.column_name FROM tb_ntz_group_concat a WHERE UPPER(a.table_name) = 'EMP' ORDER BY a.column_pos) a; ------------- SELECT STRING_AGG('"top'||lpad(a.table_name,3,'0')||'":{'||a.column_name||'}', ',') topofund_data FROM (SELECT a.table_name, a.column_name FROM tb_ntz_group_concat a WHERE UPPER(a.table_name) = 'EMP' ORDER BY a.column_pos) a;
  • DATE 日期类型转换。 Netezza语法 迁移后语法 1 2 3 4 5 6 7 8 9 10 SELECT A1.ETL_DATE, A1.MARKET_CODE , A1.DECLARATION_DT , ROW_NUMBER() OVER(PARTITION BY A1.MARKET_CODE, A1.STOCK_CODE, DATE_PART('YEAR', DATE(A1.DECLARATION_DT)) ORDER BY A1.DECLARATION_DT DESC) AS RN FROM tb_date_type_casting A1; SELECT A1.ETL_DATE, A1.MARKET_CODE , A1.DECLARATION_DT , ROW_NUMBER() OVER(PARTITION BY A1.MARKET_CODE, A1.STOCK_CODE, DATE_PART('YEAR', DATE(A1.DECLARATION_DT)) ORDER BY A1.DECLARATION_DT DESC) AS RN FROM tb_date_type_casting A1; 1 2 3 4 SELECT A1.ETL_DATE, A1.MARKET_CODE , A1.DECLARATION_DT , ROW_NUMBER() OVER(PARTITION BY A1.MARKET_CODE, A1.STOCK_CODE, DATE_PART('YEAR', CAST(A1.DECLARATION_DT AS DATE)) ORDER BY A1.DECLARATION_DT DESC) AS RN FROM tb_date_type_casting A1;
  • ISNULL() Netezza语法 迁移后语法 1 2 3 4 5 SELECT A.ETL_DATE, A.BRANCH_CODE, A.CUST_NO , ISNULL ( B.RES_STOCK,0) AS RES_STOCK , ISNULL ( B.ZY_VOL ,0 ) AS ZY_VOL , ISNULL ( B.ZJ_VOL,0 ) AS ZJ_VOL FROM tab123; 1 2 3 4 5 SELECT A.ETL_DATE, A.BRANCH_CODE, A.CUST_NO , NVL ( B.RES_STOCK,0) AS RES_STOCK , NVL ( B.ZY_VOL ,0 ) AS ZY_VOL , NVL ( B.ZJ_VOL,0 ) AS ZJ_VOL FROM tab123;
  • ENGINE 在MySQL中,ENGINE指定表的存储引擎。当存储引擎为ARCHIVE、BLACKHOLE、CSV、FEDERATED、INNODB、MYISAM、MEMORY、MRG_MYISAM、NDB、NDBCLUSTER和PERFOMANCE_SCHEMA时,DSC支持该属性迁移,迁移过程中会将该属性删除。 输入示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 CREATE TABLE `public`.`runoob_alter_test`( `dataType1` int NOT NULL, `dataType2` DOUBLE(20,8), PRIMARY KEY(`dataType1`) )ENGINE=MYISAM; ## A. ALTER TABLE runoob_alter_test ENGINE INNODB; ALTER TABLE runoob_alter_test ENGINE=INNODB; ## B. ALTER TABLE runoob_alter_test ENGINE MYISAM; ALTER TABLE runoob_alter_test ENGINE=MYISAM; ## C. ALTER TABLE runoob_alter_test ENGINE MEMORY; ALTER TABLE runoob_alter_test ENGINE=MEMORY; 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CREATE TABLE "public"."runoob_alter_test" ( "datatype1" INTEGER NOT NULL, "datatype2" DOUBLE PRECISION, PRIMARY KEY ("datatype1") ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype1"); -- A. -- B. -- C. 父主题: 表(可选参数、操作)
  • ORDER BY 如果一个MySQL UPDATE语句包含一个 ORDER BY子句,则这些行将按照该子句指定的顺序更新。 输入示例 1 2 # 测试 ORDER BY 语法点 UPDATE employees SET department_id=department_id+1 ORDER BY id; 输出示例 1 2 -- 测试 ORDER BY 语法点 UPDATE "public"."employees" SET "department_id" = department_id+1; 父主题: UPDATE
  • STATS_AUTO_RECALC STATS_AUTO_RECALC指定是否为InnoDB表自动重新计算持久性统计信息。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`( `runoob_id` VARCHAR(30), `runoob_title` VARCHAR(100) NOT NULL, `runoob_author` VARCHAR(40) NOT NULL, `submission_date` VARCHAR(30) ) ENGINE=InnoDB, STATS_AUTO_RECALC=DEFAULT; ## A. ALTER TABLE runoob_alter_test STATS_AUTO_RECALC DEFAULT; ALTER TABLE runoob_alter_test STATS_AUTO_RECALC=DEFAULT; ## B. ALTER TABLE runoob_alter_test STATS_AUTO_RECALC 0; ALTER TABLE runoob_alter_test STATS_AUTO_RECALC=0; ## C. ALTER TABLE runoob_alter_test STATS_AUTO_RECALC 1; ALTER TABLE runoob_alter_test STATS_AUTO_RECALC=1; 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE TABLE "public"."runoob_alter_test" ( "runoob_id" VARCHAR(120), "runoob_title" VARCHAR(400) NOT NULL, "runoob_author" VARCHAR(160) NOT NULL, "submission_date" VARCHAR(120) ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("runoob_id"); -- A. -- B. -- C. 父主题: 表(可选参数、操作)
  • PLAN_TABLE_DATA PLAN_TABLE_DATA系统表存储了用户通过执行EXPLAIN PLAN收集到的计划信息。与PLAN_TABLE视图不同的是PLAN_TABLE_DATA表存储了所有session和user执行EXPLAIN PLAN收集的计划信息。 表1 PLAN_TABLE字段 名称 类型 描述 session_id text 表示插入该条数据的会话,由服务线程启动时间戳和服务线程ID组成。受非空约束限制。 user_id oid 用户ID,用于标识触发插入该条数据的用户。受非空约束限制。 statement_id varchar2(30) 用户输入的查询标签。 plan_id bigint 查询标识。 id int 计划中的节点编号。 operation varchar2(30) 操作描述。 options varchar2(255) 操作选项。 object_name name 操作对应的对象名,来自于用户定义。 object_type varchar2(30) 对象类型。 object_owner name 对象所属schema,来自于用户定义。 projection varchar2(4000) 操作输出的列信息。 PLAN_TABLE_DATA中包含了当前节点所有用户、所有会话的数据,仅管理员有访问权限。普通用户可以通过PLAN_TABLE视图查看属于自己的数据。 对于不活跃(已退出)的会话,其在PLAN_TABLE_DATA中的数据会在一定时间(默认5min)后被gs_clean清理。用户也可以手动执行gs_clean -C选项对表中不活跃的会话数据进行清理。 PLAN_TABLE_DATA中的数据是用户通过执行EXPLAIN PLAN命令后由系统自动插入表中,因此禁止用户手动对数据进行插入或更新,否则会引起表中的数据混乱。需要对表中数据删除时,建议通过PLAN_TABLE视图。 statement_id、object_name、object_owner和projection字段内容遵循用户定义的大小写存储,其它字段内容采用大写存储。 父主题: 系统表
  • PostGIS概述 PostGIS Extension依赖的第三方软件需要用户进行单独安装,用户如需使用PostGIS功能,请提交工单或联系技术支持人员提交申请。 如果用户在使用中出现“ERROR:EXTENSION is not yet supported.”这种报错,则表示没有安装PostGIS软件包,请联系技术支持进行获取。 GaussDB(DWS)提供PostGIS Extension(版本为PostGIS-2.4.2和PostGIS-3.2.2)。PostGIS Extension是PostgreSQL的空间数据库扩展,提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符。PostGIS Extension完全遵循OpenGIS规范。 GaussDB(DWS)中PostGIS Extension依赖第三方开源软件如下。 PostGIS 2.4.2依赖第三方开源软件: Geos 3.6.2 Proj 4.9.2 Json 0.12.1 Libxml2 2.7.1 Gdal 1.11.0 PostGIS 3.2.2依赖第三方开源软件: Geos-3.11.0 Proj-6.0.0 Json 0.12.1 Libxml2 2.7.1 Sqlite3 父主题: PostGIS Extension
  • effective_cache_size 参数说明:设置优化器在一次单一的查询中可用的磁盘缓冲区的有效大小。 设置这个参数,还要考虑GaussDB(DWS)的共享缓冲区以及内核的磁盘缓冲区。另外,还要考虑预计的在不同表之间的并发查询数目,因为它们将共享可用的空间。 这个参数对GaussDB(DWS)分配的共享内存大小没有影响,它也不会使用内核磁盘缓冲,它只用于估算。数值是用磁盘页来计算的,通常每个页面是8192字节。 参数类型:USERSET 取值范围:整型,1~INT_MAX,单位为8KB。 比默认值高的数值可能会导致使用索引扫描,更低的数值可能会导致选择顺序扫描。 默认值:128MB
共100000条