云服务器内容精选

  • 对象验证失败的原因有哪些? 可能的原因如下: 目标库验证失败 —建表语句如果指定tablespace,请检查目标库是否存在该tablespace,如果不存在请在目标库创建该tablespace。 —创建视图、函数等失败请检查是否依赖目标库table,如果依赖table请先确保table创建成功。 —是否选择了正确的转换配置进行转换,部分转换会将源库语法进行保留,目标库不兼容语法则会迁移失败,应根据需求选择合理的转换配置。 父主题: 迁移项目
  • 解决办法 执行以下命令,连接 GaussDB 目标库。 gsql -U username -d database -p 4000 -W pwd “username”为数据库用户名;“database”为数据库名,“pwd”为用户名密码。 连接上数据库,执行以下SQL语句,完成列名称“ctid”、“xc_node_id”、“tableoid”“ctrd”的修改。 create table test("CTRD" int); create table test("XC_NODE" int); create table test("TABLEO" int); create table test("CTRD" int);
  • 约束限制 数据库的系统库由数据库自身维护,可能会禁止用户的创建操作,因此不建议您使用系统库进行对象迁移。MySQL数据库的系统库有performance_schema、information_schema、mysql以及sys;GoldenDB数据库的系统库有information_schema、mysql、performance_schema以及sys等;PostgreSQL数据库系统库有postgres库等。 以GaussDB为目标库,当源端的对象名称超过63个字节时,迁移至GaussDB,对象名将会被截断。 使用系统库创建迁移项目可能导致权限检查失败。 每个用户最多支持10迁移任务配额。 此处用户选择要迁移的目标数据库,并填写目标数据库信息。 每个迁移项目对应一个评估项目,但可以基于一个评估项目多次创建迁移项目。
  • 解决方法 方法一:对指定数据库生效 以root用户连接数据库。 执行以下命令,切换enable_set_variables参数。 alter database databasename set b_format_behavior_compat_options = 'enable_set_variables'; 方法二:对指定的实例生效 以root用户连接数据库实例。 切换到数据库实例用户。 su - omm "omm" 为安装数据库实例用户,请以实际数据库实例用户为准。 执行以下命令,设置数据库参数。 gs_guc reload -Z datanode -N all -I all -c "b_format_behavior_compat_options='enable_set_variables'";
  • 解决办法 连接上 GaussDB数据库 执行以下SQL语句查询index数量。 1.ugo评估页面显示的index个数查询语句: SELECT count(*) FROM (select owner, index_name, status from ALL_INDEXES WHERE OWNER in ('schema_name') ) i l LEFT OUTER JOIN ( WITH cons_ind AS -- 主键和唯一键约束 (SELECT constraint_name FROM ALL_CONSTRAINTS WHERE owner in ('schema_name') AND constraint_type IN ('P', 'U') AND constraint_name = index_name), cons_col AS -- 约束的列信息 (SELECT ci.constraint_name, cc.position, cc.column_name FROM cons_ind ci, ALL_CONS_COLUMNS cc WHERE cc.owner in ('schema_name') AND cc.constraint_name = ci.constraint_name), ind_col AS -- 索引的列信息 (SELECT ic.index_name, ic.column_position, ic.column_name FROM cons_ind ci, ALL_IND_COLUMNS ic WHERE ic.index_owner in ('schema_name') AND ic.index_name = ci.constraint_name), not_match_ind AS -- 约束的列信息和索引的列信息不匹配 (SELECT cc.constraint_name, ic.index_name FROM cons_col cc FULL OUTER JOIN ind_col ic ON cc.constraint_name = ic.index_name AND cc.position = ic.column_position AND cc.column_name = ic.column_name WHERE cc.constraint_name IS NULL OR ic.index_name IS NULL ) SELECT ci.constraint_name FROM cons_ind ci LEFT OUTER JOIN ( SELECT constraint_name FROM not_match_ind WHERE constraint_name IS NOT NULL UNION SELECT index_name FROM not_match_ind WHERE index_name IS NOT NULL ) nm ON ci.constraint_name = nm.constraint_name WHERE nm.constraint_name IS NULL ) fil_cons_not ON il.index_name = fil_cons_not.constraint_name WHERE fil_cons_not.CONSTRAINT_NAME is null; 2.查询primary key+unqiue 约束总数 SELECTcount(*) FROM ALL_CONSTRAINTS WHERE owner in ('schema_name') AND constraint_type IN ('P', 'U') AND constraint_name = index_name;
  • 操作步骤 完成步骤四后,单击“下一步”,进入语法转换页面。 单击“启动”,进行迁移。页面显示对象类型、总数、转换成功、转换失败等信息以及转换开始时间与结束时间。 图1 语法转换 页面以进度条和百分比显示迁移进度。 单击“下载报告”,选择所需报告单击“下载”,下载至本地供用户分析。 转换错误报告:该报告介绍了无法等价转换为目标库语法的源库对象详情。 匿名化转换错误报告:该报告通过匿名方式介绍了无法等价转换为目标库语法的源库对象。 转换风险报告:该报告介绍了基于用户所选的配置项,冒一定风险转换为目标库语法的源库对象,但转换后存在一定的功能差异。 匿名化转换风险报告:对象信息脱敏后的转换风险报告。该报告通过匿名方式介绍了基于用户所选的配置项,冒一定风险转换为目标库语法的源库对象,但转换后存在一定的功能差异。 转换后的SQL解析失败报告:该报告介绍了无法使用目标库语法解析转换脚本的源库对象。 匿名化转换后的SQL解析失败报告:该报告通过匿名方式介绍了无法使用目标库语法解析转换脚本的源库对象。 单击“详情”,有转换失败的对象可进入对象校正页面查看对象类型的具体信息。 查看迁移历史详情信息,请见查看转换历史详情。 单击“暂停”,流程将被暂停,用户可以到转换历史中去查询之前执行过的迁移任务。 单击“启动”,将会进行一次新的转换流程。单击“恢复”,将继续进行转换流程。 再次单击“启动”,将再次进行语法转换,会覆盖上一次转换的全部转换数据,包含手工修改的对象,请谨慎操作。如确需重新转换,单击“确认”。 单击“下一步”,对象校验页面显示待验证的Schema、对象名称、对象类型等信息。 图2 对象校正 可依据具体对象名称进行搜索,也可依据Schema、转换状态及迁移状态等进行筛选。 仅当源数据库为Oracle、MySQL、PostgreSQL时,若“转换状态”为“失败”,可单击具体失败项的对象名称,查看“对象迁移成功率”。 当“支持迁移”为“否”时,可以使用“应用筛选器”查询同样包含该语法点的其他失败对象。 可对选中的具体对象单击“跳过迁移”,忽略不想验证迁移的对象。 重新转换:可选择需要重新转换的对象类型或对象,进行单独重新转换,不会覆盖其他对象的SQL修改。 单击进入“重新转换”页面,选定对象后单击“重新转换”,可返回步骤2重新启动语法转换。 Mysql为源,table对象转换后结果将会展示转换拆分后的子对象create table和create index;Oracle为源,table对象转换后结果将会展示转换拆分后的子对象create table和foreign_key,两者都可以选择子对象进行单独的迁移或是修改,拆分后的子对象数目不计入转换总对象数量当中。 拆分子对象是为了控制转换后父类对象部分子对象的迁移,所以页面展示的子对象并不是全量子对象,如需查看全量子对象的状态和内容需点击父类对象查看详情。 子对象拆分依赖UGO的转换功能,当出现解析脚本出错和转换脚本时出错的情形时无法进行转换,不会拆分子对象。 父对象与其下所有子对象的状态如下:当父对象转换状态为成功,则子对象转换状态都为成功;当父对象转换状态为失败,则子对象转换状态至少存在一个失败;当父对象转换状态为手工修改,至少有一个子对象转换状态为手工修改;当父对象迁移后若迁移状态为成功,则子对象迁移状态为成功或是忽略;当父对象迁移后迁移状态若为失败,则子对象迁移状态至少存在一个失败;当子对象全被忽略迁移,父对象也将会被忽略迁移。 对于“迁移状态”为“成功”的对象,如果重新进行转换,再次迁移和验证将出现错误“对象已存在于目标数据库上”。为避免这种情况,请手动从目标数据库中删除这些对象。若选择数据库对象类型,将重新转换选中类型下所有对象。 批量语句更新:批量语句更新支持类似问题的批量搜索和修改。如何批量语句更新,请参见批量语句更新。 可对选中的对象进行“修改”或“查看详情”。 单击“查看详情”,可查看对应对象的转换/迁移错误信息和源端、目标端以及比较的信息,也可以复制详细代码。 单击“修改”:可对具体对象进行逐条手工修改。如何修改,请参见修改对象校正。 选择可忽略的对象并单击“跳过迁移”,“迁移状态”变为“忽略”。也可以“撤销跳过”,撤销后对应状态恢复原样。 迁移结果注释了一些特性,可能会有功能影响,可单击“查看详情”查看详细信息。
  • 解决办法 连接上GaussDB数据库执行以下SQL语句查询index数量。 1.ugo评估页面显示的index个数查询语句: SELECT count(*) FROM (select owner, index_name, status from ALL_INDEXES WHERE OWNER in ('schema_name') ) i l LEFT OUTER JOIN ( WITH cons_ind AS -- 主键和唯一键约束 (SELECT constraint_name FROM ALL_CONSTRAINTS WHERE owner in ('schema_name') AND constraint_type IN ('P', 'U') AND constraint_name = index_name), cons_col AS -- 约束的列信息 (SELECT ci.constraint_name, cc.position, cc.column_name FROM cons_ind ci, ALL_CONS_COLUMNS cc WHERE cc.owner in ('schema_name') AND cc.constraint_name = ci.constraint_name), ind_col AS -- 索引的列信息 (SELECT ic.index_name, ic.column_position, ic.column_name FROM cons_ind ci, ALL_IND_COLUMNS ic WHERE ic.index_owner in ('schema_name') AND ic.index_name = ci.constraint_name), not_match_ind AS -- 约束的列信息和索引的列信息不匹配 (SELECT cc.constraint_name, ic.index_name FROM cons_col cc FULL OUTER JOIN ind_col ic ON cc.constraint_name = ic.index_name AND cc.position = ic.column_position AND cc.column_name = ic.column_name WHERE cc.constraint_name IS NULL OR ic.index_name IS NULL ) SELECT ci.constraint_name FROM cons_ind ci LEFT OUTER JOIN ( SELECT constraint_name FROM not_match_ind WHERE constraint_name IS NOT NULL UNION SELECT index_name FROM not_match_ind WHERE index_name IS NOT NULL ) nm ON ci.constraint_name = nm.constraint_name WHERE nm.constraint_name IS NULL ) fil_cons_not ON il.index_name = fil_cons_not.constraint_name WHERE fil_cons_not.CONSTRAINT_NAME is null; 2.查询primary key+unqiue 约束总数 SELECTcount(*) FROM ALL_CONSTRAINTS WHERE owner in ('schema_name') AND constraint_type IN ('P', 'U') AND constraint_name = index_name;
  • 操作步骤 完成步骤五,单击“下一步”,进入迁移验证页面。 请修正对象校正中所有转换失败项,才能启动迁移验证。 单击“启动”,进行校验。页面以进度条和百分比显示迁移进度。 迁移验证完成后,页面显示读取到的SQL行总数与迁移成功数与失败数。 查看校验历史详细信息,请见查看迁移历史详情。 图1 迁移验证 停止验证后,会出现提示“迁移存在错误/风险,请点击查看”单击后有“警告 : 异常自动暂停”弹框提示。 停止后单击“启动”,可继续进行迁移。 查看空存储过程:可查看失败的对象列表和失败次数。 单击“下载报告”,选择所需报告单击“下载”,下载至本地供用户分析。MySQL为源时,子对象的相关数据不会统计在迁移报告中。 迁移验证报告:该报告简要介绍了迁移和验证对象的状态。 迁移验证错误报告:该报告介绍了对象迁移失败的详情,包括每个对象的状态、迁移语句和错误信息。 匿名化迁移验证错误报告:该报告介绍了对象迁移失败的详情,包括每个对象的状态、迁移语句、错误信息,但源库SQL语句和迁移后的SQL语句均以匿名的形式呈现。 若有迁移失败,可单击对象类型后的“详情”,可返回对象校正页面查看对象类型的具体信息。 迁移验证完成后,若有验证失败项,可返回对象校正页面,进行单独修改或批量语句更新。
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 total_objects_count Integer 对象总数。 completed_objects_count Integer 完成迁移的对象数量。 objects_list Array of 表4 objects 对象迁移的对象列表。 表4 DatabaseObject 参数 参数类型 描述 object_type String 对象类型。 total_count Long 该类型对象的总数。 succeed_count Long 成功的对象数量。 failed_count Long 失败的对象数量。 ignored_count Long 忽略的对象数量。 manual_count Long 手动操作的对象数量。 success_rate String 成功率。
  • URI GET /v1/{project_id}/migration-projects/{migration_project_id}/verification-progress 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 租户在某一Region下的Project ID。 获取方法请参见获取项目ID。 migration_project_id 是 String 迁移项目ID。
  • 响应示例 状态码: 200 请求成功。 { "total_objects_count" : 6, "completed_objects_count" : 4, "objects_list" : [ { "object_type" : "FUNCTION", "total_count" : 4, "succeed_count" : 3, "failed_count" : 1, "ignored_count" : 0, "manual_count" : 0, "success_rate" : "75.00%" }, { "object_type" : "GRANT", "total_count" : 2, "succeed_count" : 0, "failed_count" : 0, "ignored_count" : 0, "manual_count" : 0, "success_rate" : "0.00%" } ] }