
# 扫描残留文件函数
扫描残留文件函数仅8.3.0及以上集群版本支持，本章节所有函数仅限sysadmin角色调用。
#### pg_scan_residualfiles()
描述：用于扫描当前节点所连接数据库的所有残留文件记录。该函数为库级函数，与当前所在的数据库相关，可以在任意实例上运行。
- 连接到CN执行时，扫描当前CN节点所在数据库的本地残留文件和OBS全部残留文件。
- 连接到DN执行时，扫描当前DN节点所在数据库的本地残留文件。
返回类型：record
返回信息如下：
表1返回字段 
| 名称     | 类型   | 描述                |
|:---|:---|:---|
| pgscrf | text | 记录残留文件信息的元文件本地路径。 |
   
示例：
```
SELECT * FROM pg_scan_residualfiles();
                               pgscrf                               
--------------------------------------------------------------------
 pg_residualfiles/pgscrf_meta_1663_16323_20231027143716005244
 pg_residualfiles/pgscrf_meta_2147484281_16323_20231027143716005713
(2 rows)
```
![](https://support.huaweicloud.com/sqlreference-911-dws/public_sys-resources/note_3.0-zh-cn.png)
该函数的使用约束如下：
- 只能扫描当前登录的数据库中是否存在残留文件，当前只扫描默认表空间，自定义表空间和OBS表空间。
- 该函数为重载操作，不支持单节点并发使用，也不建议在业务繁忙和资源负载较高时使用。
- 只支持冷热表热分区，不支持冷分区。
- 禁止在升级观察期内使用。
- 无法对已删除数据库的残留文件进行扫描。
- 如果集群元数据信息存在不一致情况，该函数可能会错误扫描到有效的数据文件。
 
#### pgxc_scan_residualfiles(query_flag)
描述：pg_scan_residualfiles()的CN统一执行函数。该函数为集群级函数，与当前所在的数据库相关，在CN实例上运行。
参数说明：query_flag。参数类型int，表示执行范围。1表示CN，2表示主DN，4表示备DN，通过或运算可以得到查询并集，如1\|2=3表示CN+主DN，1\|2\|4=7表示CN+主DN+备DN，默认值是7。
返回类型：record
返回信息如下：
表2返回字段 
| 名称          | 类型   | 描述                |
|:---|:---|:---|
| nodename    | name | 节点名称。             |
| instance_id | text | 实例名称。             |
| pgscrf      | text | 记录残留文件信息的元文件本地路径。 |
   
示例：
```
SELECT * FROM pgxc_scan_residualfiles();
  node_name   | instance_id |                               pgscrf                               
--------------+-------------+--------------------------------------------------------------------
 dn_6001_6002 | dn_6001     | pg_residualfiles/pgscrf_meta_1663_16323_20231027144103839354
 dn_6001_6002 | dn_6001     | pg_residualfiles/pgscrf_meta_2147484281_16323_20231027144103839826
 cn_5001      | cn_5001     | pg_residualfiles/pgscrf_meta_1663_16323_20231027144103946217
 dn_6007_6008 | dn_6008     | pg_residualfiles/pgscrf_meta_1663_16323_20231027144104171311
(4 rows)
SELECT * FROM pgxc_scan_residualfiles(1);
 node_name | instance_id |                            pgscrf                            
-----------+-------------+--------------------------------------------------------------
 cn_5001   | cn_5001     | pg_residualfiles/pgscrf_meta_1663_16323_20231027144421861628
(1 row)
SELECT * FROM pgxc_scan_residualfiles(2);
  node_name   | instance_id |                               pgscrf                               
--------------+-------------+--------------------------------------------------------------------
 dn_6001_6002 | dn_6001     | pg_residualfiles/pgscrf_meta_1663_16323_20231027144424210395
 dn_6001_6002 | dn_6001     | pg_residualfiles/pgscrf_meta_2147484281_16323_20231027144424210855
(2 rows)
SELECT * FROM pgxc_scan_residualfiles(4);
  node_name   | instance_id |                            pgscrf                            
--------------+-------------+--------------------------------------------------------------
 dn_6007_6008 | dn_6008     | pg_residualfiles/pgscrf_meta_1663_16323_20231027144427492060
(1 row)
```
![](https://support.huaweicloud.com/sqlreference-911-dws/public_sys-resources/note_3.0-zh-cn.png)
该函数的使用约束如下：
- 只能扫描当前登录的数据库中是否存在残留文件，当前只扫描默认表空间，自定义表空间和OBS表空间。
- 该函数为重载操作，不支持单节点并发使用，也不建议在业务繁忙和资源负载较高时使用。
- 只支持冷热表热分区，不支持冷分区。
- 禁止在升级观察期内使用。
- 无法对已删除数据库的残留文件进行扫描。
- 如果集群元数据信息存在不一致情况，该函数可能会错误扫描到有效的数据文件。
 
#### pg_get_scan_residualfiles()
描述：用于获取当前节点所有扫描到的残留文件记录。该函数为实例级函数，与当前所在的数据库无关，可以在任意实例上运行。
返回类型：record
返回信息如下：
表3返回字段 
| 名称           | 类型          | 描述                                      |
|:---|:---|:---|
| handled      | bool        | 残留文件是否已经被处理，被移动或者被更改。                   |
| dbname       | text        | 数据库名称。                                  |
| residualfile | text        | 残留文件路径。                                 |
| size         | bigint      | 文件大小，单位为byte。OBS路径的残留文件该项为0。            |
| inode        | bigint      | 残留文件stat信息中的Inode。OBS路径的残留文件该项为0。       |
| atime        | timestamptz | 残留文件stat信息中的Access time。OBS路径的残留文件该项为空。 |
| mtime        | timestamptz | 残留文件stat信息中的Modify time。OBS路径的残留文件该项为空。 |
| ctime        | timestamptz | 残留文件stat信息中的Change time。OBS路径的残留文件该项为空。 |
| filepath     | text        | 记录残留文件信息的元文件本地路径，对应pgscrf_meta文件。       |
| notes        | text        | 注释。                                     |
   
#### pgxc_get_scan_residualfiles(query_flag)
描述：pg_get_scan_residualfiles()的CN统一执行函数。该函数为集群级函数，与当前所在的数据库无关，在CN实例上运行。
参数query_flag，参数类型int，用于表示执行范围。1表示CN，2表示主DN，4表示备DN，通过或运算可以得到查询并集，如1\|2=3表示CN+主DN，1\|2\|4=7表示CN+主DN+备DN。默认值是7。
返回类型：record
返回信息如下：
表4返回字段 
| 名称           | 类型          | 描述                                      |
|:---|:---|:---|
| nodename     | name        | 节点名称。                                   |
| instance_id  | text        | 实例名称。                                   |
| handled      | bool        | 残留文件是否已经被处理，被移动或者被更改。                   |
| dbname       | text        | 数据库名称。                                  |
| residualfile | text        | 残留文件路径。                                 |
| size         | bigint      | 文件大小，单位为byte。OBS路径的残留文件该项为0。            |
| inode        | bigint      | 残留文件stat信息中的Inode。OBS路径的残留文件该项为0。       |
| atime        | timestamptz | 残留文件stat信息中的Access time。OBS路径的残留文件该项为空。 |
| mtime        | timestamptz | 残留文件stat信息中的Modify time。OBS路径的残留文件该项为空。 |
| ctime        | timestamptz | 残留文件stat信息中的Change time。OBS路径的残留文件该项为空。 |
| filepath     | text        | 记录残留文件信息的元文件本地路径，对应pgscrf_meta文件。       |
| notes        | text        | 注释。                                     |
   
#### pg_archive_scan_residualfiles()
描述：用于归档当前节点所连接数据库上所有扫描到的残留文件记录。该函数为实例级函数，与当前所在的数据库相关，可以在任意实例上运行。
返回类型：record
返回信息如下：
表5返回字段 
| 名称      | 类型     | 描述                                    |
|:---|:---|:---|
| archive | text   | 归档后的本地文件夹路径。OBS路径的残留文件归档在对应OBS数据库目录下。 |
| count   | bigint | 归档的残留文件数量。                            |
| size    | bigint | 归档的残留文件总大小，单位为byte。                   |
   
示例：
```
SELECT * FROM pg_archive_scan_residualfiles();
                           archive                            | count | size  
--------------------------------------------------------------+-------+-------
 pg_residualfiles/archive/pgscrf_archive_20231027144613791801 |     4 | 81920
(1 row)
```
![](https://support.huaweicloud.com/sqlreference-911-dws/public_sys-resources/note_3.0-zh-cn.png)
- 此函数只能归档当前登录的数据库中记录过的残留文件，归档时会记录中的残留文件进行相应的校验，校验结果分为以下三种情况：
  - 校验通过：校验通过后会对残留文件进行归档，并标记为已处理。
  
  - 校验失败：校验失败会跳过归档，并标记为已处理。
  
  - 延迟校验：延迟校验会跳过归档，通常表示当前未满足校验时机，延迟校验的情况通常和事务完成情况及备机REDO进度有关。
   
- 实际归档目录与对应表空间在同一个文件系统下，删除表空间也会删除对应的残留文件归档。
- 延迟DDL开启后，此函数无法使用。
- 此函数为重载操作，不支持单节点并发使用，也不建议在业务繁忙和资源负载较高时使用。
 
#### pgxc_archive_scan_residualfiles(query_flag)
描述：pg_archive_scan_residualfiles()的CN统一执行函数。该函数为集群级函数，与当前所在的数据库相关，在CN实例上运行。
参数query_flag，参数类型int，用于表示执行范围。1表示CN，2表示主DN，4表示备DN，通过或运算可以得到查询并集，如1\|2=3表示CN+主DN，1\|2\|4=7表示CN+主DN+备DN。默认值是7。
返回类型：record
返回信息如下：
表6返回字段 
| 名称          | 类型     | 描述                                    |
|:---|:---|:---|
| nodename    | name   | 节点名称。                                 |
| instance_id | text   | 实例名称。                                 |
| archive     | text   | 归档后的本地文件夹路径。OBS路径的残留文件归档在对应OBS数据库目录下。 |
| count       | bigint | 归档的残留文件数量。                            |
| size        | bigint | 归档的残留文件总大小，单位为byte。                   |
   
示例：
```
SELECT * FROM pgxc_archive_scan_residualfiles();
  node_name   | instance_id |                           archive                            | count | size  
--------------+-------------+--------------------------------------------------------------+-------+-------
 cn_5001      | cn_5001     | pg_residualfiles/archive/pgscrf_archive_20231027145050896440 |     1 | 40960
 dn_6007_6008 | dn_6008     | pg_residualfiles/archive/pgscrf_archive_20231027145051018138 |     1 | 24576
(2 rows)
```
![](https://support.huaweicloud.com/sqlreference-911-dws/public_sys-resources/note_3.0-zh-cn.png)
- 此函数只能归档当前登录的数据库中记录过的残留文件，归档时会记录中的残留文件进行相应的校验，校验结果分为以下三种情况：
  - 校验通过：校验通过后会对残留文件进行归档，并标记为已处理。
  
  - 校验失败：校验失败会跳过归档，并标记为已处理。
  
  - 延迟校验：延迟校验会跳过归档，通常表示当前未满足校验时机，延迟校验的情况通常和事务完成情况及备机REDO进度有关。
   
- 实际归档目录与对应表空间在同一个文件系统下，删除表空间也会删除对应的残留文件归档。
- 延迟DDL开启后，此函数无法使用。
- 此函数为重载操作，不支持单节点并发使用，也不建议在业务繁忙和资源负载较高时使用。
 
#### pg_rm_scan_residualfiles_archive()
描述：用于删除当前节点所有归档的残留文件记录。该函数为实例级函数，与当前所在的数据库无关，可以在任意实例上运行。
返回类型：record
返回信息如下：
表7返回字段 
| 名称    | 类型     | 描述                                                      |
|:---|:---|:---|
| count | bigint | 归档中已删除的残留文件数量。本地路径的残留文件统计所删除的文件数，OBS路径的残留文件统计所删除的表目录数量。 |
| size  | bigint | 归档中已删除的残留文件总大小，单位为byte。OBS路径的残留文件该项均为0。                 |
   
示例：
```
SELECT * FROM pg_rm_scan_residualfiles_archive();
 count | size  
-------+-------
     4 | 81920
(1 row)
```
#### pgxc_rm_scan_residualfiles_archive(query_flag)
描述：pg_rm_scan_residualfiles_archive()的CN统一执行函数。该函数为集群级函数，与当前所在的数据库无关，在CN实例上运行。
参数query_flag，参数类型int，用于表示执行范围。1表示CN，2表示主DN，4表示备DN，通过或运算可以得到查询并集，如1\|2=3表示CN+主DN，1\|2\|4=7表示CN+主DN+备DN。默认值是7。
返回类型：record
返回信息如下：
表8返回字段 
| 名称          | 类型     | 描述                                                      |
|:---|:---|:---|
| nodename    | name   | 节点名称。                                                   |
| instance_id | text   | 实例名称。                                                   |
| count       | bigint | 归档中已删除的残留文件数量。本地路径的残留文件统计所删除的文件数，OBS路径的残留文件统计所删除的表目录数量。 |
| size        | bigint | 归档中已删除的残留文件总大小，单位为byte。OBS路径的残留文件该项均为0。                 |
   
示例：
```
SELECT * FROM pgxc_rm_scan_residualfiles_archive();
  node_name   | instance_id | count | size  
--------------+-------------+-------+-------
 dn_6001_6002 | dn_6001     |     4 | 81920
 cn_5001      | cn_5001     |     1 | 40960
 dn_6007_6008 | dn_6008     |     1 | 24576
 coordinator1 | coordinator1|     1 |    0 
(4 rows)
```
