
# 残留文件管理函数应用
#### 使用步骤
1. 调用pgxc_get_residualfiles()函数，获取存在残留文件的数据库名称。
2. 分别进入确认有残留文件的数据库，调用pgxc_verify_residualfiles()函数，对当前数据库中记录的残留文件进行验证。
3. 调用pgxc_rm_residualfiles()函数，删除所有已经验证过的残留文件。
![](https://support.huaweicloud.com/sqlreference-911-dws/public_sys-resources/note_3.0-zh-cn.png)
pgxc类残留文件管理函数只对CN和当前主DN进行操作，不会验证和清理备DN上的残留文件。所以主DN完成清理后，应在备DN上及时执行残留文件清理操作或对备机进行build，防止主备切换后由于增量build导致备机残留文件被重新复制回主DN，导致未成功清理的假象。
#### 使用示例
以当前两个用户自建的数据库db1、db2为例：
![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002202094285.png "点击放大")
1. 在CN上获取集群的所有残留文件记录：
   ```
   SELECT * FROM pgxc_get_residualfiles() order by 4, 6; -- order by不是必须的
   ```
   ![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002202094321.png "点击放大")
   当前集群中：
   - dn_6001_6002 节点（当前的主节点实例）的db1和db2数据库中都存在残留文件记录。
   
   - 残留文件在residualfile列展示。
   
   - filepath列为记录残留文件的记录文件，保存在实例数据目录下pg_residualfiles目录中。
    
2. 调用pgxc_verify_residualfiles()函数对db1库进行验证：
   ```
   SELECT * FROM pgxc_verify_residualfiles();
   ```
   ![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002202139873.png "点击放大")
   因为**verify类函数都是database级别**，所以当前在db1库中调用verify函数时，只对属于db1的残留文件进行验证。
   可以再次调用get函数查看是否验证完成：
   ```
   SELECT * FROM pgxc_get_residualfiles() order by 4, 6;
   ```
   ![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002166613624.png "点击放大")
   如上图所示，已确认db1数据库中的残留文件都已经验证，db2数据库中的残留文件都未进行验证。
   
3. 调用 pgxc_rm_residualfiles()函数删除残留文件。
   ```
   SELECT * FROM pgxc_rm_residualfiles();
   ```
   ![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002166613596.png "点击放大")
   
4. 再次调用pgxc_get_residualfiles()函数检查删除后的结果。
   ```
   SELECT * FROM pgxc_get_residualfiles() order by 4, 6;
   ```
   ![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002166773238.png "点击放大")
   结果显示db1数据库中的残留文件已经被删除（isdeleted标记为t），db2中的残留文件都未被删除。
   同时可以看到查询出9条结果，与之前查询出的结果相比，缺少一条以9438结尾的残留文件记录文件。这是因为以9438结尾的残留文件记录文件中只有一条残留文件记录，这条记录在步骤3中被删除，当记录文件中的所有残留文件都被删除后，记录文件本身也会被删除，并备份到pg_residualfiles/backup目录中：
   ![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002202094349.png "点击放大")
   
5. 如果需要删除db2数据库中的文件，需要在db2中调用verify函数后再调用rm函数。
   1. 进入db2数据库，并调用验证函数：
      ```
      SELECT * FROM pgxc_verify_residualfiles();
      ```
      ![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002166613576.png "点击放大")
      此时可以查询验证的结果：
      ```
      SELECT * FROM pgxc_get_residualfiles() order by 4, 6;
      ```
      ![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002166773254.png "点击放大")
      
   
   2. 调用删除函数：
      ```
      SELECT * FROM pgxc_rm_residualfiles();
      ```
      ![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002166773282.png "点击放大")
      
   
   3. 再查询删除的结果：
      ```
      SELECT * FROM pgxc_get_residualfiles() order by 4, 6;
      ```
      ![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002166613560.png "点击放大")
      此时因为 8342 结尾的记录文件中残留文件已经全部删除，所以整个记录文件也被删除并备份到backup目录下，所以查询到0条记录。
      ![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002202139901.png "点击放大")
      
    
 
