CN110222035A - 一种基于异或校验与日志恢复的数据库页面高效容错方法 - Google Patents
一种基于异或校验与日志恢复的数据库页面高效容错方法 Download PDFInfo
- Publication number
- CN110222035A CN110222035A CN201910495162.XA CN201910495162A CN110222035A CN 110222035 A CN110222035 A CN 110222035A CN 201910495162 A CN201910495162 A CN 201910495162A CN 110222035 A CN110222035 A CN 110222035A
- Authority
- CN
- China
- Prior art keywords
- page
- data
- database
- damage
- check
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1448—Management of the data involved in backup or backup restore
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/217—Database tuning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于异或校验与日志恢复的数据库页面高效容错方法,包括以下步骤:计算数据页面对应的校验码并保存在数据页面的头部中;从存储介质中读取数据页面到内存中时,通过校验码判断数据页面是否损坏;在启动数据库进行实例恢复的过程中,则将数据损坏页面跳过以使数据库正常启动,启动后提醒用户在哪个数据库对象中出现了数据页面损坏;启动数据库成功之后,确定哪个表出现了页面损坏问题,用户通过专门的SQL来对该表的损坏页面进行处理。本发明设计合理,其在数据页面内存储数据页面的异或运算校验码用于实时检测页面是否出现损坏,可成功恢复已损坏的数据,减少用户的数据损失。
Description
技术领域
本发明属于数据存储与查询技术领域,尤其是一种基于异或校验与日志恢复的数据库页面高效容错方法。
背景技术
通常来说,大型通用关系型数据库的数据都存储在非易失存储介质中(常见的如磁盘、磁盘阵列、网络存储或者固态硬盘),这些存储介质为降低IO开销,通常以数据页面(512的整数倍)为单位进行读写,也就是说,即使是访问1个字节的数据,也必须读写整个页面,在神通数据库存储数据页面大小为8K大小。
随着信息技术产生的数据***,导致现代数据库中存储的数据量越来越大,数据的频繁访问导致存储介质中出现坏块频率越来越高,部分坏块不能被存储介质自身的管理***发现(成本和性能因素)。一旦数据库数据文件中出现坏块,轻则导致部分数据库对象无法访问,重则导致数据库***无法启动。
目前,解决上述问题的通常方法是由操作***的文件***对数据坏块进行实时检测,提前发现坏块,但这种方法不能百分百避免坏块被访问,特别是那类数据能够正常读写,但实现返回的数据内容出现翻转的坏块,基本不能被发现。
发明内容
本发明的目的在于克服现有技术的不足,提出一种设计合理、保证数据安全访问并减少用户数据损失的基于异或校验与日志恢复的数据库页面高效容错方法。
本发明解决其技术问题是采取以下技术方案实现的:
一种基于异或校验与日志恢复的数据库页面高效容错方法,包括以下步骤:
步骤1:在将内存中的数据页面写入存储介质之前,计算数据页面对应的校验码,并将该检验码保存在数据页面的头部中;
步骤2:从存储介质中读取数据页面到内存中时,计算出读取出来的数据页面的校验码,与保存在页面头部的校验码进行数值对比:如果数值相等,那么本页面没有错误,标记为正常页面;如果数值不等,那么本页面发生了错误,标记为损坏页面,进入步骤3;
步骤3:在启动数据库进行实例恢复的过程中,则将数据损坏页面跳过以使数据库正常启动,启动后提醒用户在哪个数据库对象中出现了数据页面损坏。
步骤4:启动数据库成功之后,确定哪个表出现了页面损坏问题,用户通过专门的SQL来对该表的损坏页面进行处理。
所述步骤1校验码是对数据页面中的数据进行64位异或运算生成的,并将校验码记入页面头部中。
所述校验码为8字节长度,校验码保存在数据页面的头部。
所述步骤1的具体实现方法为:
⑴准备将内存中的数据页面写入存储介质;
⑵数据页面大小为8192字节,在内存中可以将数据页面当作一个包含1024个64位整数的数组;
⑶将64位整数数组中的第1个元素赋值为0;
⑷将64位整数数组中的第1个元素与数组中剩余的1023个元素依次进行异或运算,每次的结果写入第1个元素;
⑸将数据页面写入存储介质。
所述步骤2的实现方法包括以下步骤:
⑴将数据页面从存储介质读入内存;
⑵如果存储介质在读取数据页面时报错,则将内存中的数据页面标记为已损坏;
⑶数据页面大小为8192字节,在内存中可以将数据页面当作一个包含1024个64位整数的数组;
⑷使用初始值为0的局部变量x与数组中除第一个元素外的1023个元素依次进行异或运算,每次的结果写入局部变量x;
⑸判断局部变量x是否与64位整数数组的第一个元素相等?如果相等,则将内存中的数据页面标记为有效;如果不相等,则将内存中的数据页面标记为损坏。
所述步骤3的处理方法包括以下步骤:
⑴数据库启动开始进行实例恢复;
⑵初始化损坏数据页面记录链表;
⑶从重做日志文件中读取日志;
⑷解析日志记录,得到数据页面号;
⑸如果数据页面号在损坏数据页面记录链表中,则跳过该日志;
⑹从存储介质读取数据页面;
⑺如果数据页面损坏,将数据页面及其所属数据库对象加入损坏数据页面记录链表中,并跳过该日志,不进行重做,否则,重做该日志;
⑻继续读取下一条日志,重复上述过程,直到所有日志重做完成;
⑼实例恢复完成后,检查损坏数据页面记录链表中是否存在记录,如果存在,给用户发出警告,告诉用户哪些数据库对象的数据页面发生了损坏;
⑽数据库启动。
所述步骤4通过SQL来对该表的损坏页面进行处理包括以下步骤:
⑴对表加排它锁,以阻止其它会话访问该表;
⑵从段管理模块依次获取未标记损坏的数据页面:识别该数据页面是否损坏,如果数据页面发生损坏,在表空间管理结构中进行标记,以后不再使用该数据页面,并在段管理模块也进行标记,以后进行段的页面搜索时,需要跳过该页;
⑶继续获取数据页面,直到处理完段的所有数据页面;
⑷释放表的排它锁,返回执行成功。
本发明的优点和积极效果是:
本发明设计合理,在数据库页面头部分配8个字节,对本页面内存储数据页面的异或运算校验码,可用于实时检测页面是否出现损坏。在检测到数据页面损坏的情况下,通过跳过访问损坏页面的方式,使数据库能够正常启动成功,并且不加载已经出现损坏的数据。在数据库启动后,可由数据库管理员用户利用数据备份、日志、镜像等手段,恢复已损坏的数据,并写到未损坏的数据页面中,使数据恢复。对未配置这些手段从而导致无不恢复数据的情况,用户仍可以通过SQL命令处理包含损坏数据页面的数据库对象,使数据库对象中未损坏的数据页面中的数据可以正常访问,减少用户的数据损失。
附图说明
图1是本发明的数据页面写入流程图;
图2是本发明的数据页面读取流程图;
图3是本发明的容错损坏页面工作流程图;
图4是本发明的处理损坏页面流程图。
具体实施方式
以下结合附图对本发明实施例做进一步详述。
一种基于异或校验与日志恢复的数据库页面高效容错方法,包括以下步骤:
步骤1:在将内存中的数据页面写入存储介质之前,先计算数据页面对应的8字节校验码,并将检验码保存在数据页面的头部8字节中。采用这种方式的目的是能够识别与处理损坏的页面。
本发明为了识别损坏页面,在数据页面写入存储介质之前,对数据页面中的数据进行64位异或运算,将运算结果记入页面头部的8字节中。在将数据页面从存储介质读入内存时,同样进行64位异或运算,将结果和页面头部8字节进行比对。
如图1所示,数据页面写入过程包括以下步骤:
⑴准备将内存中的数据页面写入存储介质
⑵数据页面大小为8192字节,在内存中可以将数据页面当作一个包含1024个64位整数的数组
⑶将64位整数数组中的第1个元素赋值为0
⑷将64位整数数组中的第1个元素与数组中剩余的1023个元素依次进行异或运算,每次的结果写入第1个元素
⑸将数据页面写入存储介质。
步骤2:从存储介质中读取数据页面到内存中时,按照和步骤1完全相同的计算方式,计算出读取出来的数据页面的8字节校验码,与步骤1保存在页面头部的8字节进行数值对比:如果数值相等,那么本页面没有错误,标记为正常页面;如果数值不等,那么本页面发生了错误,标记为损坏页面,在步骤3和步骤4里都需要特殊处理本页面。
如图2所示,数据页面读取过程包括以下步骤:
⑴将数据页面从存储介质读入内存;
⑵如果存储介质在读取数据页面时报错,则将内存中的数据页面标记为已损坏;
⑶数据页面大小为8192字节,在内存中可以将数据页面当作一个包含1024个64位整数的数组;
⑷使用初始值为0的局部变量x与数组中除第一个元素外的1023个元素依次进行异或运算,每次的结果写入局部变量x;
⑸判断局部变量x是否与64位整数数组的第一个元素相等?如果相等,则将内存中的数据页面标记为有效;如果不相等,则将内存中的数据页面标记为损坏。
步骤3:启动数据库过程中,需要重做日志,在读取日志相关的数据页面的内容时,如果在步骤2标记了页面损坏,需要进行容错处理:所有损坏的页面需要保存到专门的链表中;由于页面已损坏,与该页面相关的日志重做必须要跳过;向用户进行告警,提示出现损坏的页面所在的表。
在启动数据库进行实例恢复的过程中发现数据页面损坏,则将该页面跳过,保证数据库能够正常启动,启动后提醒用户在哪个数据库对象中出现了数据页面损坏。
如图3所示,容错损坏页面处理方法包括以下步骤:
⑴数据库启动开始进行实例恢复
⑵初始化损坏数据页面记录链表
⑶从重做日志文件中读取日志
⑷解析日志记录,得到数据页面号
⑸如果数据页面号在损坏数据页面记录链表中,则跳过该日志,不进行重做
⑹从存储介质读取数据页面
⑺如果数据页面损坏,将数据页面及其所属数据库对象加入损坏数据页面记录链表中,并跳过该日志,不进行重做。否则,重做该日志
⑻继续读取下一条日志,重复上述过程,直到所有日志重做完成。
⑼实例恢复完成后,检查损坏数据页面记录链表中是否存在记录,如果存在,给用户发出警告,告诉用户哪些数据库对象的数据页面发生了损坏。
⑽数据库启动成功。
步骤4:启动数据库成功之后,通过步骤3告警信息可以明确哪个表出现了页面损坏问题,用户可以通过专门的SQL来对该表的损坏页面进行处理,主要包括以下内容:
从表的段管理信息里,遍历段的所有数据页面并进行步骤2的页面检查,如果页面损坏,需要将该页面进行标识,以后对表的访问都需要忽略该页面;
同时在段遍历的过程中发现的损坏页面,在表空间管理结构里也需要进行标识损坏,以后该页面不应该再进行分配。
本发明还提供了一种机制,允许用户通过SQL命令“ALTER TABLE表名REPAIR”处理包含损坏数据页面的数据库对象,使数据库对象中未损坏的数据页面中的数据可以正常访问,减少用户的数据损失。在处理过程中会将损坏的数据页面从数据库对象中摘除,并在表空间管理结构中为每个页面增加标记位进行标记,以后不再使用该数据页面。
在神通数据库中,表的数据页面是由段管理模块进行管理的:每个表有唯一对应的一个数据段;每个数据段有唯一的段号;每个数据页面最多属于一个段,并会在页面头部记录所属数据段;段管理模块也需要为本段的每个数据页面增加标记位,标记是否损坏。
如图4所示,本步骤中的处理损坏页面的方法包括以下步骤:
⑴对表加排它锁,以阻止其它会话访问该表
⑵从段管理模块依次获取未标记损坏的数据页面:识别该数据页面是否损坏,如果数据页面发生损坏,在表空间管理结构中进行标记,以后不再使用该数据页面,并在段管理模块也进行标记,以后进行段的页面搜索时,需要跳过该页
⑶继续获取数据页面,直到处理完段的所有数据页面
⑷释放表的排它锁,返回执行成功。
要强调的是,本发明所述的实施例是说明性的,而不是限定性的,因此本发明包括并不限于具体实施方式中所述的实施例,凡是由本领域技术人员根据本发明的技术方案得出的其他实施方式,同样属于本发明保护的范围。
Claims (7)
1.一种基于异或校验与日志恢复的数据库页面高效容错方法,其特征在于包括以下步骤:
步骤1:在将内存中的数据页面写入存储介质之前,计算数据页面对应的校验码,并将该检验码保存在数据页面的头部中;
步骤2:从存储介质中读取数据页面到内存中时,计算出读取出来的数据页面的校验码,与保存在页面头部的校验码进行数值对比:如果数值相等,那么本页面没有错误,标记为正常页面;如果数值不等,那么本页面发生了错误,标记为损坏页面,进入步骤3;
步骤3:在启动数据库进行实例恢复的过程中,则将数据损坏页面跳过以使数据库正常启动,启动后提醒用户在哪个数据库对象中出现了数据页面损坏。
步骤4:启动数据库成功之后,确定哪个表出现了页面损坏问题,用户通过专门的SQL来对该表的损坏页面进行处理。
2.根据权利要求1所述的一种基于异或校验与日志恢复的数据库页面高效容错方法,其特征在于:所述步骤1校验码是对数据页面中的数据进行64位异或运算生成的,并将校验码记入页面头部中。
3.根据权利要求1或2所述的一种基于异或校验与日志恢复的数据库页面高效容错方法,其特征在于:所述校验码为8字节长度,校验码保存在数据页面的头部。
4.根据权利要求1或2所述的一种基于异或校验与日志恢复的数据库页面高效容错方法,其特征在于:所述步骤1的具体实现方法为:
⑴准备将内存中的数据页面写入存储介质;
⑵数据页面大小为8192字节,在内存中可以将数据页面当作一个包含1024个64位整数的数组;
⑶将64位整数数组中的第1个元素赋值为0;
⑷将64位整数数组中的第1个元素与数组中剩余的1023个元素依次进行异或运算,每次的结果写入第1个元素;
⑸将数据页面写入存储介质。
5.根据权利要求1所述的一种基于异或校验与日志恢复的数据库页面高效容错方法,其特征在于:所述步骤2的实现方法包括以下步骤:
⑴将数据页面从存储介质读入内存;
⑵如果存储介质在读取数据页面时报错,则将内存中的数据页面标记为已损坏;
⑶数据页面大小为8192字节,在内存中可以将数据页面当作一个包含1024个64位整数的数组;
⑷使用初始值为0的局部变量x与数组中除第一个元素外的1023个元素依次进行异或运算,每次的结果写入局部变量x;
⑸判断局部变量x是否与64位整数数组的第一个元素相等?如果相等,则将内存中的数据页面标记为有效;如果不相等,则将内存中的数据页面标记为损坏。
6.根据权利要求1所述的一种基于异或校验与日志恢复的数据库页面高效容错方法,其特征在于:所述步骤3的处理方法包括以下步骤:
⑴数据库启动开始进行实例恢复;
⑵初始化损坏数据页面记录链表;
⑶从重做日志文件中读取日志;
⑷解析日志记录,得到数据页面号;
⑸如果数据页面号在损坏数据页面记录链表中,则跳过该日志;
⑹从存储介质读取数据页面;
⑺如果数据页面损坏,将数据页面及其所属数据库对象加入损坏数据页面记录链表中,并跳过该日志,不进行重做,否则,重做该日志;
⑻继续读取下一条日志,重复上述过程,直到所有日志重做完成;
⑼实例恢复完成后,检查损坏数据页面记录链表中是否存在记录,如果存在,给用户发出警告,告诉用户哪些数据库对象的数据页面发生了损坏;
⑽数据库启动。
7.根据权利要求1所述的一种基于异或校验与日志恢复的数据库页面高效容错方法,其特征在于:所述步骤4通过SQL来对该表的损坏页面进行处理包括以下步骤:
⑴对表加排它锁,以阻止其它会话访问该表;
⑵从段管理模块依次获取未标记损坏的数据页面:识别该数据页面是否损坏,如果数据页面发生损坏,在表空间管理结构中进行标记,以后不再使用该数据页面,并在段管理模块也进行标记,以后进行段的页面搜索时,需要跳过该页;
⑶继续获取数据页面,直到处理完段的所有数据页面;
⑷释放表的排它锁,返回执行成功。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910495162.XA CN110222035A (zh) | 2019-06-10 | 2019-06-10 | 一种基于异或校验与日志恢复的数据库页面高效容错方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910495162.XA CN110222035A (zh) | 2019-06-10 | 2019-06-10 | 一种基于异或校验与日志恢复的数据库页面高效容错方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110222035A true CN110222035A (zh) | 2019-09-10 |
Family
ID=67816054
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910495162.XA Pending CN110222035A (zh) | 2019-06-10 | 2019-06-10 | 一种基于异或校验与日志恢复的数据库页面高效容错方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110222035A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110764943A (zh) * | 2019-10-21 | 2020-02-07 | 中国民航信息网络股份有限公司 | 一种Oracle数据库的数据处理方法及装置 |
CN112540799A (zh) * | 2020-12-02 | 2021-03-23 | 深圳市硅格半导体有限公司 | 启动数据的管理方法、***、终端设备及存储介质 |
CN112905570A (zh) * | 2021-04-08 | 2021-06-04 | 平安科技(深圳)有限公司 | 数据库页面容错方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1784682A (zh) * | 2004-05-03 | 2006-06-07 | 微软公司 | 用于自动数据库或文件***维护和修复的***和方法 |
CN102760161A (zh) * | 2012-06-12 | 2012-10-31 | 天津神舟通用数据技术有限公司 | 一种基于事务聚集的日志组织结构及实现其相应的恢复协议的方法 |
CN108280097A (zh) * | 2017-01-06 | 2018-07-13 | 阿里巴巴集团控股有限公司 | 一种数据库***的故障处理方法和装置 |
CN108874588A (zh) * | 2018-06-08 | 2018-11-23 | 郑州云海信息技术有限公司 | 一种数据库实例恢复方法和装置 |
-
2019
- 2019-06-10 CN CN201910495162.XA patent/CN110222035A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1784682A (zh) * | 2004-05-03 | 2006-06-07 | 微软公司 | 用于自动数据库或文件***维护和修复的***和方法 |
CN102760161A (zh) * | 2012-06-12 | 2012-10-31 | 天津神舟通用数据技术有限公司 | 一种基于事务聚集的日志组织结构及实现其相应的恢复协议的方法 |
CN108280097A (zh) * | 2017-01-06 | 2018-07-13 | 阿里巴巴集团控股有限公司 | 一种数据库***的故障处理方法和装置 |
CN108874588A (zh) * | 2018-06-08 | 2018-11-23 | 郑州云海信息技术有限公司 | 一种数据库实例恢复方法和装置 |
Non-Patent Citations (1)
Title |
---|
PDSERVICE: ""MySQL InnoDB存储引擎表损坏恢复指南"", 《HTTPS://WWW.PARNASSUSDATA.COM/EN/NODE/329?LANGUAGE=EN》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110764943A (zh) * | 2019-10-21 | 2020-02-07 | 中国民航信息网络股份有限公司 | 一种Oracle数据库的数据处理方法及装置 |
CN110764943B (zh) * | 2019-10-21 | 2023-05-05 | 中国民航信息网络股份有限公司 | 一种Oracle数据库的数据处理方法及装置 |
CN112540799A (zh) * | 2020-12-02 | 2021-03-23 | 深圳市硅格半导体有限公司 | 启动数据的管理方法、***、终端设备及存储介质 |
CN112905570A (zh) * | 2021-04-08 | 2021-06-04 | 平安科技(深圳)有限公司 | 数据库页面容错方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7103811B2 (en) | Mechanisms for detecting silent errors in streaming media devices | |
US6535994B1 (en) | Method and apparatus for identifying and repairing mismatched data | |
US8418030B2 (en) | Storage system with data recovery function and method thereof | |
US6233696B1 (en) | Data verification and repair in redundant storage systems | |
US7546515B2 (en) | Method of storing downloadable firmware on bulk media | |
US5860090A (en) | Append-only storage in a disk array using striping and parity caching | |
CN101916173B (zh) | 一种基于raid的数据读写方法及其*** | |
US7908512B2 (en) | Method and system for cache-based dropped write protection in data storage systems | |
US11531590B2 (en) | Method and system for host-assisted data recovery assurance for data center storage device architectures | |
KR100226614B1 (ko) | 직접 액세스 저장장치상의 압축된 데이터에 대한 내장디렉토리 레코드 및 압축데이터에 대한 디렉토리 정보 유지방법 | |
US7020805B2 (en) | Efficient mechanisms for detecting phantom write errors | |
CN110222035A (zh) | 一种基于异或校验与日志恢复的数据库页面高效容错方法 | |
JPH05505264A (ja) | データ記憶装置における書込みオペレーション識別子の不揮発性メモリ記憶 | |
US6389511B1 (en) | On-line data verification and repair in redundant storage system | |
CN115292266B (zh) | 一种基于存储器的高可靠日志存储方法 | |
CN108141229A (zh) | 损坏数据的高效检测 | |
US10642508B2 (en) | Method to limit impact of partial media failure of disk drive and detect/report the loss of data for objects due to partial failure of media | |
CN110555055A (zh) | 针对Oracle数据库重做日志文件的数据挖掘方法 | |
US20140025910A1 (en) | Storage device, control device, and control method | |
US7577804B2 (en) | Detecting data integrity | |
CN111428280B (zh) | SoC安全芯片密钥信息完整性存储及错误自修复方法 | |
CN115509466B (zh) | 一种数据管理方法、装置及电子设备和存储介质 | |
CN104205097A (zh) | 一种去重方法装置与*** | |
KR100501414B1 (ko) | 파일 시스템의 메타 데이터 회복을 위한 로깅과 회복 방법및 장치 | |
CN115470040A (zh) | 基于快照的重删指纹阈值的测试方法、装置、设备、介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20190910 |