华为云用户手册

  • 约束限制 账户余额大于等于0元,才可设置自动扩容。 实例状态为“正常”和“存储空间满”时可以进行扩容。 仅支持RDS for MySQL云盘实例,即存储类型为SSD云盘或极速型SSD。存储类型介绍请参见数据库实例存储类型。 云数据库 RDS for MySQ L实例 最大可自动扩容至4000GB。 如果是主备实例,针对主节点设置自动扩容时,会同时对其备节点生效。 实例在进行规格变更、内核小版本升级、备机迁移、重启时,不能进行此操作。 包周期实例存在未完成订单时,不会自动扩容。
  • 示例流程 图1 给用户授权RDS权限流程 创建用户组并授权 在 IAM 控制台创建用户组,并授予关系型数据库只读权限“RDS ReadOnlyAccess”。 如果需要使用到对接其他服务的一些功能时,除了需要配置“RDS ReadOnlyAccess”权限外,还需要配置对应服务的权限。 例如:使用控制台连接实例时,除了需要配置“RDS ReadOnlyAccess”权限外,您还需要配置数据管理服务“DAS FullAccess”权限后,才可正常使用控制台登录数据库实例。 创建用户并加入用户组 在IAM控制台创建用户,并将其加入1中创建的用户组。 用户登录并验证权限 新创建的用户登录控制台,切换至授权区域,验证权限: 在“服务列表”中选择云数据库 RDS,进入RDS主界面,单击右上角“购买关系型数据库”,尝试购买关系型数据库,如果无法购买关系型数据库(假设当前权限仅包含RDS ReadOnlyAccess),表示“RDS ReadOnlyAccess”已生效。 在“服务列表”中选择除云数据库 RDS外(假设当前策略仅包含RDS ReadOnlyAccess)的任一服务,若提示权限不足,表示“RDS ReadOnlyAccess”已生效。
  • 约束条件 开启该特性的实例必须是加域(AD域)实例,使用域账号进行登录。加域实例的实例详情的“数据库信息”模块会展示“ 域名 |目录地址”信息。创建加域(AD域)实例请参见购买实例。 只读实例不支持打开SSIS功能。 需要设置实例的“clr enabled”参数值为1,开启CLR功能。 仅支持项目部署模式。 支持使用SQL Server Agent运行SSIS程序包。 仅支持如下版本:2014标准版、2014企业版、2016标准版、2016企业版、2017标准版、2017企业版、2019企业版、2022企业版。 包处理路径必须以“D:\SSIS”开头。在构建SSIS包时用到的路径都必须以“D:\SSIS”开头,部署到实例后台后包会自动存在放在“D:\SSIS\{projectName}\{projectFile}”路径下。确保工程中用到的所有文件、参数变量、表达式路径均是以此路径开头。 您不能直接部署SSIS项目,请使用msdb.dbo.rds_ssis_task存储过程执行,详细信息请参考部署SSIS工程。 请使用DontSaveSensitive的安全规则来构建SSIS项目(.ispac)用于部署。 请不要手动创建或者恢复SSISDB数据库,否则可能造成实例SSIS无法正常使用。 构建的SSIS项目文件需要上传到用户的OBS桶,目前支持的文件格式包括:“.zip”、“.ispac”。文件名需要和工程名保持一致,zip中需要包含有.ispac的工程文件,文件名只能包含大小写字母、数字、中划线、下划线等字符。
  • 功能介绍 目前,云数据库RDS for MariaDB实例支持只读实例。 在对数据库有少量写请求,但有大量读请求的应用场景下,单个实例可能无法抵抗读取压力,甚至对主业务产生影响。为了实现读取能力的弹性扩展,分担数据库压力,您可以在某个区域中创建一个或多个只读实例,利用只读实例满足大量的数据库读取需求,以此增加应用的吞吐量。 只读实例为单个物理节点的架构(没有备节点),采用MariaDB的原生复制功能,将主实例的更改同步到所有只读实例,而且主实例和只读实例之间的数据同步不受网络延时的影响。只读实例跟主实例在同一区域,但可以在不同的可用区。
  • 功能限制 1个主实例最多可以创建5个只读实例。如果需要更多只读实例请联系客服人员申请,最多可以创建10个只读实例。 暂不支持包年/包月计费方式。 不支持单独购买只读实例,需要购买主实例后才能购买只读实例。 主实例、备实例及只读实例的数据都是一致的,暂不支持过滤库或者表不同步。 备份设置:不支持自动备份设置以及手动备份。 实例恢复:不支持通过备份文件或任意时间点创建只读实例,不支持通过备份集覆盖只读实例。 数据迁移:不支持将数据迁移至只读实例。 数据库管理:不支持创建和删除数据库。 账号管理:只读实例不提供创建账号权限。请在主实例上创建,请参见创建数据库账号。 回收站:不支持加入回收站管理。
  • 预定义参数 本章节介绍了在PostgreSQL11开源版本的基础上,RDS for PostgreSQL增强版支持的预定义参数。 表1 预定义参数 预定义参数 说明 NLS_DATE_FORMAT 日期格式定义参数。 NLS_DATE_LANGUAGE 日期语言定义参数。 NLS_DUAL_CURRENCY 区域名称定义参数,影响本地货币符号显示格式; NLS_CURRENCY 货币符号定义参数。 NLS_TIME_FORMAT 不带时区的时间格式定义参数。 NLS_TIME_TZ_FORMAT 带时区的时间格式定义参数。 NLS_TIMESTAMP_FORMAT 不带时区的时间戳格式定义参数。 NLS_TIMESTAMP_TZ_FORMAT 带时区的时间戳格式定义参数。 NLS_NUMERIC_CHARACTERS 十进制数分组分割符定义参数。 NLS_ISO_CURRENCY 区域名称定义参数,影响ISO货币符号显示格式。 NLS_TERRITORY 区域名称定义参数,会根据区域货币与数字显示格式重置NLS_CURRENCY、NLS_ISO_CURRENCY、NLS_NUMERIC_CHARACTERS参数值。 NLS_LANGUAGE 区域语言定义参数。 NLS_LENGTH_SEMAN TICS 指定字符串字段定义时的默认长度单位,取值范围:BYTE,CHAR; NLS_SORT 指定本地字符集排序规则。 NLS_COMP 指定会话级范围查找或排序操作的排序规则。 父主题: RDS for PostgreSQL增强版
  • 限制条件 恢复中的实例,不可进行该操作。 除RDS界面和API以外的其他方式创建的数据库和账号,也会展示在RDS界面。如果创建的数据库名和账号名不满足数据库命名规则和帐号命名规则,例如包含中文或不支持的特殊字符,那么该数据库和账号不支持RDS界面或API的数据库管理和账号管理功能。 如果源库的数据库名和账号名不满足数据库命名规则和帐号命名规则,迁移到目标库RDS for MySQL后,该数据库和账号不支持RDS界面或API的数据库管理和账号管理功能。
  • 账号类型 表1 账号说明 账号类型 说明 管理员账号root 创建实例页面只提供管理员root账户,支持的权限请参见RDS for MySQL约束与限制。 说明: 建议用户谨慎对root账户执行revoke、drop user、rename user操作,避免影响业务正常使用。 系统账户 创建RDS for MySQL数据库实例时,系统会自动为实例创建如下系统账户(用户不可使用),用于给数据库实例提供完善的后台运维管理服务。 rdsAdmin:管理账户,拥有最高权限,用于查询和修改实例信息、故障排查、迁移、恢复等操作。 rdsRepl:复制账户,用于备实例或只读实例在主实例上同步数据。 rdsBackup:备份账户,用于后台的备份。 rdsMetric:指标监控账户,用于watchdog采集数据库状态数据。 rdsProxy:数据库代理账户,该账户在 开通读写分离 时才会自动创建,用于通过读写分离地址连接数据库时鉴权使用。 其他账号 在控制台、API或SQL语句中创建的账号。 创建后可以自行设置权限,请参见修改数据库账号权限。
  • 操作步骤 创建c#函数,编译出一个RDS for SQL Server的dll。 图1 c#函数代码 创建函数详细说明请参见官方文档。 使用S SMS 等工具连接数据库。 图2 连接数据库 选择需要创建程序集的数据库,添加对应的程序集。 只能创建safe模式(权限集显示为安全),不能创建其他模式。 dll文件会以十六进制的形式存入。如图4所示。 图3 新建程序集 图4 dll文件 执行程序,如图5所示表示执行成功。程序集中新增一个TESTS程序集,如图6所示。 图5 执行结果 图6 TESTS程序集
  • 操作背景 公共语言运行库(CLR)是Microsoft .NET Framework 的核心,为所有.NET Framework代码提供执行环境。在CLR中运行的代码称为托管代码。CLR提供执行程序所需的各种函数和服务,包括实时(JIT)编译、分配和管理内存、强制类型安全性、异常处理、线程管理和安全性。 SQL CLR(SQL Common Language Runtime)是自SQL Server 2005才出现的新功能,它将.NET Framework中的CLR服务注入到SQL Server中,让SQL Server的部分数据库对象可以使用.NET Framework的编程语言开发(当前只支持VB.NET和C#),包括预存程序、用户自定义函数、触发程序、用户自定义类型以及用户自定义汇总函数等功能。但是要想执行CLR代码,首先要开启CLR特性。 更多介绍请参见Microsoft SQL Server官网公共语言运行时 (CLR) 集成编程概念。 CLR集成安全性相关内容请参见Microsoft SQL Server官网CLR 集成安全性。
  • 操作场景 RDS for MySQL支持用户下载Binlog备份,用于本地存储备份。您可以下载单个Binlog备份文件,也可以合并下载Binlog备份文件。 云数据库 RDS for MySQL 5.6/5.7版的实例支持合并下载Binlog备份文件。 Binlog备份文件列表显示的完成时间为最后一个事务提交时间。 管理控制台Binlog备份文件的命名格式为:Binlog名称+时间戳;备份文件格式为row。 处于冻结状态的实例不允许下载Binlog备份文件。
  • 备份清理 备份文件清理分为两种场景:手动备份清理和自动备份清理。 手动备份是由用户触发产生的全量备份,需要用户手动删除,否则会一直保存。 自动备份的备份文件不支持手动删除,可通过设置同区域备份策略调整备份保留天数,超出备份保留天数的已有备份文件会被自动删除。 Binlog本地日志清理: 清理Binlog日志时,即使设置保留时长为0,RDS也会保证主节点的Binlog同步到备节点、只读节点全部完成,并且备份到OBS成功以后才会执行清理。 如果选择的保留时长大于0,例如设置1天,那么在Binlog同步及备份成功后,本地Binlog日志将会继续保留1天,到期后自动删除。
  • 备份原理 单机实例 采用单个数据库节点部署架构。与主流的主备实例相比,它只包含一个节点,但具有高性价比。备份触发后,从主库备份数据并以压缩包的形式存储在 对象存储服务 上,不会占用实例的磁盘空间。 主备实例 采用一主一备的经典高可用架构,主备实例的每个节点的规格保持一致。备份触发后,从备库备份数据并以压缩包的形式存储在对象存储服务上,不会占用实例的磁盘空间。 当数据库或表被恶意或误删除,虽然RDS支持HA高可用,但备库会被同步删除且无法还原。因此,数据被删除后只能依赖于实例的备份保障数据安全。
  • 备份方案 RDS的备份方案请参见表1。 表1 备份方案 任务类型 备份类型 使用场景 数据备份 自动备份 RDS会在数据库实例的备份时段中创建数据库实例的自动备份,自动备份为全量备份。系统根据您指定的备份保留期保存数据库实例的自动备份。如果需要,您可以将数据恢复到备份保留期中的任意时间点。 开启自动备份策略后,会自动触发一次全量备份,备份方式为物理备份。之后会按照策略中的备份时间段和备份周期进行全量备份。自动备份策略开启后,实例每五分钟会自动进行一次增量备份,以保证数据库可靠性。 手动备份 手动备份是由用户启动的数据库实例的全量备份,备份方式为物理备份。手动备份会一直保存,不会随着RDS实例的删除而释放,直到用户手动删除。 增量备份 增量备份即Binlog备份,RDS for MariaDB默认自动开启。 在进行全量备份的同时系统每五分钟会自动生成增量备份,用户不需要设置。生成的增量备份可以用来将数据恢复到指定时间点。 下载备份文件 下载全量备份文件 包含使用OBS Browser+下载、直接浏览器下载、按地址下载三种方式。 下载增量备份文件 支持下载单个Binlog文件,或者合并下载Binlog文件。 合并下载Binlog文件包含使用OBS Browser+下载、直接浏览器下载、按地址下载三种方式。
  • 约束限制 账户余额大于等于0元,才可进行克隆实例。 克隆实例需要具有相应的权限,您可联系华为云客服人员申请。 实例克隆过程中不会限制主实例业务访问,克隆实例中的数据和下发克隆动作时的数据一致,不能保证和主实例数据完全一致。 克隆的新实例磁盘类型和大小必须和主实例保持一致。 克隆的新实例AZ必须和主实例保持一致。 克隆实例的参数组、数据库版本、实例类型和主实例保持一致。 SQL Server 2008R2标准版和只读实例不支持实例克隆。 实例克隆过程中,主实例不能进行如下操作: 实例规格变更 开启透明 数据加密 (Transparent Data Encryption,简称TDE) 开启或关闭FileStream 数据迁移 恢复数据到自身 修改MSDTC相关内容 删除实例 手动切换主备实例 重置密码 单机转主备实例 实例版本升级
  • 操作场景 您可以复制您创建的自定义数据库参数模板。当您已创建一个数据库参数模板,并且想在新的数据库参数模板中包含该组中的大部分自定义参数和值时,复制参数模板是一个方便的解决方案。您还可以导出某数据库实例应用的参数列表,生成一个新的参数模板,供您后期使用。 复制数据库参数模板之后,新参数模板可能不会立即显示,建议您等待5分钟再使用。 您无法复制默认参数模板。不过,您可以创建基于默认参数模板的新参数模板。
  • 备份方案 表1提供了常见的数据备份和下载备份文件的方法。 表1 备份方案 任务类型 备份类型 使用场景 同区域备份 自动备份 RDS会在数据库实例的备份时段中创建数据库实例的自动备份,自动备份为全量备份。系统根据您指定的备份保留期保存数据库实例的自动备份。如果需要,您可以将数据恢复到备份保留期中的任意时间点。 开启自动备份策略后,会自动触发一次全量备份,备份方式为物理备份。之后会按照策略中的备份时间段和备份周期进行全量备份。 手动备份 手动备份是由用户启动的数据库实例的全量备份,备份方式为物理备份。手动备份会一直保存,不会随着RDS实例的删除而释放,直到用户手动删除。 增量备份 增量备份即事务日志备份,云数据库 RDS for SQL Server默认自动开启,系统自动每5分钟对上一次自动备份,或增量备份后更新的数据进行备份。 跨区域备份 跨区域备份 支持将备份文件存放到另一个区域存储,某一区域的实例故障后,可以在异地区域使用备份文件在异地恢复到新的RDS实例,用来恢复业务。 下载备份文件 下载备份文件 包含使用OBS Browser+下载、直接浏览器下载、按地址下载三种方式。
  • 备份原理 单机实例 采用单个数据库节点部署架构。与主流的主备实例相比,它只包含一个节点,但具有高性价比。备份触发后,从主库备份数据并以压缩包的形式存储在对象存储服务上,不会占用实例的磁盘空间。 主备实例 采用一主一备的经典高可用架构,主备实例的每个节点的规格保持一致。备份触发后,从主库备份数据并以压缩包的形式存储在对象存储服务上,不会占用实例的磁盘空间。 当数据库或表被恶意或误删除,虽然RDS支持HA高可用,但备机数据库会被同步删除且无法还原。因此,数据被删除后只能依赖于实例的备份保障数据安全。 图1 备份原理
  • 优势 助力企业满足等保合规要求。 满足等保测评数据库审计需求。 满足国内外安全法案合规需求,提供满足数据安全标准(例如Sarbanes-Oxley)的合规报告。 支持备份和恢复数据库审计日志,满足审计数据保存期限要求。 支持风险分布、会话统计、会话分布、SQL分布的实时监控能力。 提供风险行为和攻击行为实时告警能力,及时响应数据库攻击。 帮助您对内部违规和不正当操作进行定位追责,保障数据资产安全。 数据库安全审计采用数据库旁路部署方式,在不影响用户业务的提前下,可以对数据库进行灵活的审计。 基于数据库风险操作,监视数据库登录、操作类型(数据定义、数据操作和数据控制)和操作对象,有效对数据库进行审计。 从风险、会话、SQL注入等多个维度进行分析,帮助您及时了解数据库状况。 提供审计报表模板库,可以生成日报、周报或月报审计报表(可设置报表生成频率)。同时,支持发送报表生成的实时告警通知,帮助您及时获取审计报表。
  • DDL工具简介 MySQL 5.6之前数据库中对大表的表结构修改的DDL操作通常会引发DML语句阻塞,复制延迟升高等问题,导致数据库对外呈现出一种“异常”的状态。本文介绍了MySQL原生的数据库DDL方式Copy和Inplace算法、开源工具gh-ost以及MySQL 8.0新增的Instant秒级加列的算法的原理,使用限制,适用场景等。 MySQL原生的Copy算法由于在拷贝数据的过程中对源表加MDL写锁,导致DML语句被长时间阻塞,已经不推荐使用。 Inplace算法相比Copy算法有很大的改进,采用在原表上进行更改的方法,不需要生成临时表,占用的额外空间小。同时Inplace操作只需要短暂的持有MDL写锁,不会造成DML操作被长时间阻塞。但是对大表的表结构修改,依然要消耗大量的时间,导致备机在回放DDL语句时产生较大的复制延迟。 开源gh-ost将一个DDL操作拆分成多个小操作,减少单次操作的时间来降低复制延迟。同时只有在最后rename镜像表和原表的过程中才会短暂阻塞读写操作。gh-ost基于Binlog回放增量数据,同时额外维护了额外的心跳表来记录DDL执行过程,支持临时暂停DDL过程。这些机制导致gh-ost的执行时间比原生的DDL算法略长。 MySQL 8.0之后提出的instant秒级加列算法,不再需要rebuild整个表,只需要在表的metadata中记录新增列的基本信息即可。这种方式将大表的加列操作降低到了秒级。但是目前这种方式的应用场景只局限在添加列,设置列默认值,删除列默认值,修改ENUM/SET列的定义等少量DDL场景。 根据每种算法和工具的特点,建议在可以使用instant算法的DDL场景和版本下,尽可能使用instant算法来减少DDL对整个业务的影响。此外的其他情况,如果客户是主备或含有只读实例的场景,且对复制延迟带来的影响容忍较低的情况下,使用gh-ost工具来进行DDL操作。如果客户需要快速变更表结构,可以容忍短时间的主备不一致的问题,用Inplace算法可以满足需求。Copy算法由于会长时间阻塞DML操作,占用大量磁盘空间,且执行时间较长,目前在可以应用其他算法和工具的场景下不推荐使用。 表1 DDL工具说明 方法 MySQL Copy MySQL Inplace gh-ost instant DDL过程中读取数据 允许 允许 允许 允许 DDL过程中写入数据 不允许 允许(短暂时间不允许) 允许(短暂时间不允许) 允许 额外空间占用 大 小(需要rebuild会略高) 大 小 执行时间 非常长 长 非常长 短 复制延迟 大 大 小 小 父主题: MySQL Online DDL工具使用
  • 函数 本章节介绍了在PostgreSQL11开源版本的基础上,RDS for PostgreSQL增强版支持的内置函数和高级函数包。 表1 内置函数 内置函数 说明 add_months(date,integer) 返回date加上integer的值,返回值为DATE类型。 appendchildxml(XMLType_instance, XPath_string, value_expr[, namespace_string]) 在XMLType类型数据XMLType_instance指定位置XPath_string处追加value_expr节点,其中namespace_string用于描述XPath_string的命名空间信息。 asciistr(string) 返回给定字符串string对应的ASCII值,不支持非ASCII字符。 bin_to_num(expr_list) 将expr_list中的二进制串转换为对应的十进制数,返回值类型为NUMBER。 bitand(number1,number2) 返回number1和number2按位与的值,返回值为BIT类型。 convert(char, dest_char_set[, source_char_set]) 将source_char_set字符集编码格式的输入字符串char,转换为dest_char_set字符集编码格式,该函数只在服务端生效。 cosh(n) 返回参数n的双曲余弦值; decode(expr,search1, result1[[,search2, result2],......][, default]) 将expr表达式值依次与所有search表达式(search1,search2......)进行比较,如果与searchn进行匹配,则返回resultn,否则返回default。如果没有default,返回null。 empty_blob() 返回一个空BLOB类型。 hextoraw(char) 将十六进制字符串转换为RAW类型的值。 instrb(string, substring[, position[, occurrence]]) 返回从字符string的第position位置开始,第occurrence次出现的子串substring起始位置,默认从字符串string首部开始第一次出现的位置。 last_day(date) 返回date所在月的最后一天。 lengthb(char) 返回char字符的字节长度,char支持的类型为所有字符串类型(如CHAR, VARCHAR2, NCHAR, NVARCHAR2等)或可隐式转换为字符串的类型(如integer等)。 listagg(measure_expr[, 'delimiter']) within group(order_by_clause) [over query_partition_clause] 将query_partition_clause分组中的每个列表达式measure_expr值按order_by_clause规则排序后,再合并成一行,值之间使用delimiter分隔符进行分割。 lnnvl(condition) 返回条件表达式condition的取反值,返回类型为BOOLEAN。 mod(n2, n1) 支持除数为0的情况,即当n1为0时,直接返回n2。 months_between(date1, date2) 返回date1与date2之间相差的月数,当date2早于date1,返回值为负数。 nanvl(n2, n1) 当单精度或双精度浮点数n2的值为NAN,则返回n1,否则返回n2。 nchr(number) 返回本地字符集中二进制与number相等的字符。 new_time(date, timezone1, timezone2) 返回timezone1的date时间对应的timezone2的时间,返回值类型为DATE。 next_day(date, char) 返回date后的第一个自然日(包括工作日、休息日和节假日),返回值为DATE类型。 numtodsinterval(n, interval_unit) 根据INTERVAL数据类型单元interval_unit(取值范围:'DAY'、'HOUR'、'MINUTE'、'SECOND'),将数字n转换为数据类型INTERVAL DAY TO SECOND。 numtoyminterval(n, 'interval_unit') 将数字n按照指定单位interval_unit转为数据类型INTERVAL YEAR TO MONTH,其中interval_unit取值为:YEAR、MONTH。 nlssort(char[, nlsparam]) 按照nlsparam指定的排序字符集对字符串char进行排序,默认使用char字符串字符集排序; nls_upper(char[, nlsparam]) 根据nlsparam指定的排序规则将字符串char中的字母转换为大写,其中char字符串类型为CHAR, VARCHAR2, NCHAR, NVARCHAR2,CLOB或NCLOB,nlsparam的取值为'NLS_SORT = sort'。 nls_lower(char[, nlsparam]) 根据nlsparam指定的排序规则将字符串char中的字母转换为小写,其中char字符串类型为CHAR, VARCHAR2, NCHAR, NVARCHAR2,CLOB或NCLOB,nlsparam的取值为'NLS_SORT = sort'。 nvl(expr1, expr2) 返回expr1, expr2中第一个非空值。 rawtohex(raw) 将RAW类型的值转换为十六进制字符串。 regexp_count(source_char, pattern, position, match_param) 返回指定字符串source_char中的指定位置position开始,匹配正则表达式模式pattern的次数。其中,match_param参数会影响正则表达式匹配规则,比如match_param='i'忽略大小写等。 regexp_instr(source_char, pattern[, position[, occurrence[, return_opt[, match_param[, subexpr]]]]]) 该函数拓展了INSTR函数的功能,允许使用正则表达式匹配,返回值类型为INTEGER。 position表示查找起始位置。 occurrence表示查找pattern在source_char的第几次出现。 return_opt: 取值为0表示返回模式匹配的起始位置。 取值为1表示返回模式匹配的结束位置。 match_param表示正则表达式模式匹配控制参数,如区分大小写等。 subexpr表示正则表达式分组匹配的组号。 regexp_like(source_char, pattern[,match_param]) source_char为字符串表达式,pattern为正则表达式,match_param为正则表达式控制参数,返回字符串source_char是否可按照正则表达式pattern进行匹配。 regexp_substr(source_char, pattern[,position[,occurrence[,match_param[,subexpr]]]]) 按正则表达式在source_char字符串中匹配子字符串。 source_char为查找的输入字符串,支持所有字符串类型(如CHAR, VARCHAR2, NCHAR, NVARCHAR2等)或可隐式转换为字符串的类型(如integer等)。 pattern为子字符串匹配的正则表达式。 position为指定匹配的起始字符位置。 occurrence为pattern在source_char出现的次数。 match_parameter为正则表达式控制参数。 subexpr为pattern的第几个子表达式,范围为0~9。 raise_application_error(errnum, errmsg) 将错误码errnum与错误消息errmsg输出到客户端。 remainder(n2, n1) 返回n2/n1的余数,类似于mod,区别在于,mod取余时用了floor处理,而remainder使用round处理。返回值类型为NUMERIC或双精度浮点数(由入参类型决定)。 round(n,precision) 返回n的四舍五入值,precision为精度值。 scn_to_timestamp(number) 返回SCN号number产生的最近时间戳; sinh(n) 返回数字n的双曲正弦值,当n类型为BINARY_FLOAT,返回类型BINARY_DOUBLE,否则返回值类型为NUMERIC。 substr(char,position[,substring_length]) 返回char字符串中第position个字符开始,长度为substring_length的子字符串。若不指定substring_length,则截取到字符串结尾。 substrb(char, position[, substring_length]) 返回char字符串中第position个字节开始,长度为substring_length字节的子字符串。若不指定substring_length,则截取到字符串结尾。 sys_context(namespace, parameter) 返回指定参数parameter在命名空间namespace下的值,返回值类型为VARCHAR2。 sys_guid() 返回RAW类型的全局唯一标识。 sys_connect_by_path(column, char) 仅适用于CONNECT BY查询,返回column列的根节点; tanh(n) 返回参数n的双曲正切值; to_blob(char) 将char字符串转换为BLOB类型,char支持的类型为所有字符串类型(如CHAR, VARCHAR2, NCHAR, NVARCHAR2等)或可隐式转换为字符串的类型(如integer等)。 to_binary_float(expr) 将数字字符串expr转换为单精度float类型。 to_binary_double(expr) 将数字字符串expr转换为双精度float类型。 to_clob(char) 将char字符串转换为CLOB数据类型。 to_char(char) 增加char支持的类型:char、character、varchar。 to_date(char[,fmt]) 将char时间字符串按照fmt格式转换为date数据类型,char支持的类型有CHAR、VARCHAR2、NCHAR、 NVARCHAR2、TIMESTAMP。如果省略fmt,则char必须采用DATE数据类型的默认格式。 to_dsinterval('sql_format' | 'ds_iso_format') 将SQL标准(如'100 00:00:00')或ISO标准(如'P100DT05H')的时间字符串转换为数据类型INTERVAL DAY TO SECOND。 to_multi_byte(char) 将单字节字符char转换成对应的多字节字符。 to_number(expr) 将expr表达式值转换为number类型。 to_number(expr, fmt, 'nlsparam') 按照指定格式fmt转换expr字符串为数字,返回类型为NUMBER,其中nlsparam为国际化语言参数,支持的参数分别为:NLS_NUMERIC_CHARACTERS、NLS_CURRENCY、NLS_ISO_CURRENCY。 to_timestamp(char[,fmt]) 将char时间字符串按照fmt格式转换为timestamp数据类型,char支持的类型有CHAR、VARCHAR2、NCHAR、 NVARCHAR2、TIMESTAMP。如果省略fmt,则char必须采用TIMESTAMP数据类型的默认格式。 to_single_byte(char) 将多字节输入字符串转换为单字节字符串。 to_yminterval('sql_format' | 'ym_iso_format') 将SQL标准(如'01-02')或ISO标准(如'P1Y2M')的时间字符串转换为数据类型INTERVAL MONTH TO YEAR。 timestamp_to_scn(timestamp) 根据时间戳timestamp返回系统变更号SCN; trunc(date[, fmt]) 按照fmt指定的日期格式对date进行截断处理,返回值类型为DATE。如果省略fmt,则默认日期格式为'DDD'。 tz_offset({time_zone_name | '{+|-}hh:mi'}) 返回指定时区的偏移量,返回值类型VARCHAR2,参数可以是时区名time_zone_name或者'{+|-}hh:mi'格式字符串。 value(correlation_variable) 以对象表的方式返回correlation_variable所关联标的记录行,返回类型为correlation_variable所关联的对象表。 表2 高级函数包 高级函数包 说明 DBMS_OUTPUT.PUT(item) 将item字符串放入本地缓冲区;item为所有可以转换为字符串的类型。 DBMS_OUTPUT.PUT_LINE(item) 将item字符串放入本地缓冲区,然后将整个本地缓冲区的内容整体输出;item为所有可以转换为字符串的类型。 DBMS_RANDOM.SEED(val) val为生成随机数的种子,可为字符串和数字类型。 DBMS_RANDOM.VALUE([low,high]) 返回low和high之间长度为16位的随机数,如果不指定low和high的范围,则默认范围为0~1。 dbms_lob.getlength(lob_loc {clob|blob}) 返回lob_loc指定的LOB对象长度; dbms_lob.read(lob_loc, amount, offset, buffer) 从指定偏移offset读取LOB对象lob_loc指定长度amount的内容写入缓冲区buffer; dbms_lob.write(lob_loc, amount, offset, buffer) 将buffer缓冲器的内容写入大对象lob_loc缓冲区(并不影响所引用的大对象),从offset开始写入长度为amount。 utl_raw.cast_to_raw(char) 将VARCHAR2类型字符串char转换为RAW类型,返回值类型为RAW。 utl_raw.length(raw) 返回raw数据类型的字节长度,返回值类型为NUMBER。 utl_raw.cast_from_binary_integer(n, endianess) 按照endianess指定的内存对齐方式将整数n转换为RAW类型,其中endianess取值分别为: 1,大端对齐; 2,小端对齐; 3,按机器对齐方式; 父主题: RDS for PostgreSQL增强版
  • 排查及解决方法 排查主机业务压力大。 排查主机上是否存在大的业务写入或者更新。 在主机查看管理控制台的监控平台中事务日志生成速率监控项,观察目标时间段事务日志生成速率是否超过40MB/s(一般只读实例回放wal日志的速率大概为40MB/s)。 若长时间超过指标阈值,说明主机业务压力较大,此时建议优化业务量大小。 若存在主机业务压力大时,典型的现象还有pg_stat_replication中的sent_lsn和主机上select pg_current_wal_lsn();的查询结果差异较大,可通过如下SQL来查看: 确认只读实例节点信息,在主机上执行以下SQL,并重点关注sent_lsn列的值,记为lsn1。 select * from pg_stat_replication; 主机上查询当前位点信息,记为lsn2。 select pg_current_wal_lsn(); 计算主机当前位点和发送的位点的距离。 select pg_size_pretty(pg_wal_lsn_diff(lsn1,lsn2)); 若未超过指标阈值,可进行后续步骤排查。 排查只读副本回放延迟高。 只读实例上复制延迟出现原因是,当只读实例有长事务或者业务繁忙时,只读上的查询与日志回放出现冲突,只读副本没有将其查询信息反馈给主机,导致回放被延迟。此时可以下载只读实例的错误日志,查看错误日志中是否包含此类报错。 ERROR: canceling statement due to conflict with recovery Detail: User query might have needed to see row versions that must be removed 若日志中包含此类报错,建议业务按如下方式排查处理。 避免长事务,排查长事务请参考长事务问题定位及处理方法。 只读hot_standby_feedback设置为on,可以减少只读的查询冲突。 若无此类报错,可进行后续步骤排查。 排查主机和只读副本之间网络延迟。 主机和只读副本之间网络延迟高的表现一般为如下情况,若符合以下现象,可联系华为云客服进行问题具体原因定位。 在主机上查询sent_lsn和只读副本上pg_last_wal_receive_lsn接收位点的查询结果差异较大,可通过如下SQL来查看。 在主机上执行以下SQL,并重点关注sent_lsn列的值,记为lsn1。 select * from pg_stat_replication; 在只读上查询pg_last_wal_receive_lsn(),接收位点的值,记为lsn2。 select pg_last_wal_receive_lsn(); 计算主机当前发送位点和只读当前接收位点的距离。 select pg_size_pretty(pg_wal_lsn_diff(lsn1,lsn2));
  • 指标异常说明(影响) 最滞后副本滞后量:多个副本中最滞后副本(依据接收到的WAL数据)滞后量。可以通过如下SQL查看多个副本使用复制槽的滞后量情况。 select slot_name, temporary, active,restart_lsn, confirmed_flush_lsn, master_lsn, pg_size_pretty(pg_wal_lsn_diff(master_lsn, a.restart_lsn)) as latency from pg_replication_slots a, pg_current_wal_lsn() as master_lsn; 复制时延:副本滞后时延,即数据写入主数据库和复制到副本之间的时间延迟。 当数据库最滞后副本滞后量或复制时延高时,可能会产生以下影响: 数据库主服务器会保留所需要的wal日志,使得该部分wal日志无法被清理,从而导致wal日志积压,占用更多的磁盘空间,严重时会导致磁盘满。 复制时延高,说明回放速度落后主机,影响数据实时性。
  • 约束限制 仅支持停止存储类型为SSD云盘、极速型SSD的按需实例,专属云RDS(即在专属计算集群下创建的RDS实例)不支持停止实例。 已停止的实例被删除后不会进入回收站。 实例停止后,自动备份任务也会停止。实例开启后,会自动触发一次全量备份。 停止主实例时,如果存在只读实例,会同时停止只读实例。主实例和只读实例均默认停止十五天。不支持单独停止只读实例。 实例默认停止十五天,如果您在十五天后未手动开启实例,数据库实例将于十五天后的下一个可维护时间段内自动启动。可维护时间段的详细内容请参考设置可维护时间段,开启实例操作步骤请参考开启实例。 按需付费的数据库实例停止实例后,可能会由于底层E CS 资源不足引起开启失败。若实例开启失败,可稍后再次尝试开启,或利用最新备份文件恢复到新实例,需要协助请联系客服人员处理。 业务高峰期停止实例可能会导致实例停止失败,建议在业务低峰期停止实例。
  • 操作步骤 执行以下命令,进行跟踪标记。 EXEC msdb.dbo.rds_dbcc_trace @Trace_Flag, @Trace_Action; @ Trace_Flag:指定跟踪标记序号,当前仅支持 1117, 1118, 1204, 1211, 1222, 1224, 3604。 @ Trace_Action:指定跟踪标记操作,1为打开跟踪标记,0为关闭跟踪标记,-1为查看跟踪标记。 打开跟踪标记1117,示例如下: EXEC msdb.dbo.rds_dbcc_trace 1117, 1;
  • 约束限制 正在执行操作的实例不能手动删除,只有在实例操作完成后,才可删除实例。 支持批量删除按需计费的实例,最多可以删除50个。 “按需计费”类型的实例删除后将不再产生费用,实例生成的自动备份会被同步删除,保留的手动备份会继续收取费用。 删除主实例时,会同步删除其对应的备实例和只读实例,请您谨慎操作。 实例删除后,资源立即释放,请谨慎操作。如需保留数据,请务必确认完成数据备份后再删除实例。 通过保留的手动备份,可以恢复实例数据,具体请参见通过备份文件恢复全量数据。
  • 查看升级检查报告和升级报告 当升级检查失败或升级失败时,可通过升级检查报告或升级报告来分析失败的原因,步骤如下: 查看“pg_upgrade_internal.log”。 “pg_upgrade_internal.log”为升级检查报告或升级报告的主要日志文件,当升级失败时,首先查看该文件内容,查看相关报错。常见的报错如下: A list of problem libraries is in the file: loadable_libraries.txt 存在高版本不兼容的插件,插件列表记录在“loadable_libraries.txt”文件中。 A list of tables with the problem is in the file: tables_with_oids.txt 建表时声明了WITH OIDS,该声明在PostgreSQL 12或以上版本不支持,相关表被记录在“tables_with_oids.txt”文件中。 Consult the last few lines of "pg_upgrade_server.log" for the probable cause of failure. 升级检查时,高版本启动失败,具体原因在“pg_upgrade_server.log”报告项中查看。 Consult the last few lines of "pg_upgrade_dump_xxxx.log" for the probable cause of failure. 升级过程中,pg_dump失败,具体原因在“pg_upgrade_dump_xxxx.log”报告项中查看。 根据“pg_upgrade_internal.log”中的信息,在对应的报告项中分析原因。 loadable_libraries.txt 展示不兼容的library,通常对应了不兼容的插件。排查“loadable_libraries.txt”中列出的插件,根据实际需要进行评估是否删除,建议在不影响业务稳定的情况下删除后升级。 tables_with_oids.txt 展示声明了WITH OIDS的表清单。排查“tables_with_oids.txt”中列出的表,评估业务代码中是否对OID有依赖,确认不影响业务之后,执行以下SQL: ALTER TABLE {table_name} SET WITHOUT OIDS; pg_upgrade_server.log 查看“pg_upgrade_server.log”的最后几行信息,如果存在如下报错,则说明高版本中不存在xxx插件,根据实际业务,评估可删除xxx插件,并在shared_preload_libraries中删除xxx,建议在不影响业务稳定的情况下删除后升级。 FATLA: could not access file "xxx": No such file or directory. 示例: FATLA: could not access file "pg_pathman": No such file or directory. pg_upgrade_dump_xxxx.log 查看“pg_upgrade_dump_xxxx.log”最后几行信息,如果存在如下报错,则说明当前实例中表的数量过多,按照提示需适当增加max_logcks_per_transaction参数值,并重新升级。 pg_dump: error: query failed: ERROR: out of shared memory HINT: You might need to increase max_locks_per_transaction. pg_dump:error: query was: LOCK TABLE "xxx"."xxx" IN AC CES SSHARE MODE 查看“pg_upgrade_dump_xxxx.log”最后几行信息,如果存在如下报错,是因为当前实例中存在插件pgl_ddl_deploy,该插件高低版本不兼容,导致升级失败。请根据升级插件限制说明排查实例中是否存在其他不兼容的三方插件(部分三方插件的兼容性无法通过升级检查识别出来),根据实际需要进行评估是否删除,建议在不影响业务稳定的情况下删除后升级。 pg_restore: error: could not execute query: ERROR: could not find function "xxx" in file xxx Commond was: CREATE FUNCTION "pgl_ddl_deploy"."xxx"
  • 操作场景 RDS for PostgreSQL支持通过界面升级引擎大版本,目前支持以下两种升级方式: 不割接模式:用于新版本业务兼容性测试。大版本升级可能导致业务兼容性问题,强烈建议业务进行充分兼容性测试,测试通过后,再进行割接模式升级。使用不割接模式升级,不会影响原实例。 割接模式:割接升级过程中,原实例会设置为只读,并存在业务分钟级闪断。升级完成后,会自动交换实例VIP,业务无需更改,即可完成升级。
  • 注意事项 割接模式下,大版本升级完成后,若发现业务不兼容,需要回退。请联系客服为您解除原实例只读状态后,您可继续使用原实例。 升级完成后新增的数据,原实例不会进行自动同步。 大版本升级完成后,会新建一个实例,原有实例依然保留并计费,在业务稳定后您可以选择释放原有实例。 大版本升级后,原实例的审计日志、错误日志、慢日志仍保留在原实例,新实例只能查看该实例后续生成的日志记录。 只读实例无法进行大版本升级。若当前实例存在只读实例,大版本升级完成后,只读实例不会同步升级,需要重新创建,请参见创建只读实例。 若当前实例存在灾备实例,大版本升级完成后,灾备实例不会同步升级,灾备关系会断开,需要使用同版本实例重新搭建灾备关系。 大版本升级会有以下影响: 使用割接方式升级,升级过程中,原实例会设置为只读,并造成业务分钟级闪断,请在业务低峰期进行升级。使用不割接方式升级时,没有任何影响。 只读设置通过参数“default_transaction_read_only”控制,请检查业务中是否存在修改参数“default_transaction_read_only”的情况,如果存在,则会导致在割接期间实例插入的数据在升级完成后丢失。 大版本升级完成后,参数有以下变化: 原实例中修改的参数,自动同步修改到新版本;没有修改的参数将使用新版本默认参数值。 如果原实例使用了新版本不支持的参数,新版本会自动删除。 如果原实例中参数取值不在新版本对应参数的合法区间,新版本中使用参数模板默认值。 大版本升级不会升级插件版本,参考支持的插件列表,若新版本支持更高版本的插件,您可使用命令ALTER EXTENSION extension_name UPDATE TO 'new_version';更新插件,或者卸载并重新安装最新版本插件。 当数据库进行大版本升级时,部分已安装的插件会导致升级任务失败,请先卸载相关插件后再进行大版本升级。 不支持大版本升级的插件包括:postgis
  • 功能约束限制 如需使用大版本升级功能,请联系客服申请。 以下版本的实例支持进行大版本升级: 对于PostgreSQL 9.5版本,小版本为9.5.25及以上。 对于PostgreSQL 9.6版本,小版本为9.6.24及以上。 对于PostgreSQL 10版本,小版本为10.21及以上。 对于PostgreSQL 12版本,小版本为12.7及以上。 对于PostgreSQL 13版本,小版本为13.3及以上。 对于PostgreSQL 14版本,小版本为14.4及以上。 对于PostgreSQL 15版本,小版本为15.4及以上。 对于PostgreSQL 11版本和增强版,不支持大版本升级。 由于操作系统限制,部分实例暂不支持进行大版本升级,具体可升级版本查看界面可升级列表。 灾备实例不支持大版本升级。 大版本升级前,需要先进行升级检查,如果在有效期内没有检查成功的报告,则不允许进行大版本升级。
共100000条