SequoiaDB 巨杉数据库提供回收站机制,可以有效防止因误删集合空间或集合而导致的数据丢失,加强对数据的保护。
回收站机制默认为启用状态,并且仅对以下操作有效:
启用回收站机制后,SequoiaDB 将对已删除的集合空间或集合数据进行回收,并生成对应的回收站项目。用户可通过回收站项目,快速恢复集合空间或集合的数据。
下述以集合 sample.employee 为例,介绍操作步骤。
连接协调节点
> db = new Sdb("localhost", 11810)确认回收站机制已启用
> db.getRecycleBin().getDetail()
输出结果如下,字段 Enable 显示为 true 表示回收站机制已启用:
{
  "Enable": true,
  "ExpireTime": 4320,
  "MaxItemNum": 100,
  "MaxVersionNum": 2,
  "AutoDrop": false
}
Note:
- getRecycleBin() 用于获取回收站的引用。
- 如果字段 Enable 显示为 false,用户可通过 enable() 启用回收站机制。
- 其他结果字段说明可参考 getDetail()。
删除集合 sample.employee
> db.sample.dropCL("employee")查看是否已生成对应的回收站项目
> db.getRecycleBin().list({OriginName: "sample.employee"})
{
  "RecycleName": "SYSRECYCLE_5_12884901889",
  "RecycleID": 5,
  "OriginName": "sample.employee",
  "OriginID": 12884901889,
  "Type": "Collection",
  "OpType": "Drop",
  "RecycleTime": {
    "$timestamp": "2022-02-11-16.52.59.000000"
  }
}
Note:
下述以从回收站中恢复集合 sample.employee 为例,介绍操作步骤。
连接协调节点
> db = new Sdb("localhost", 11810)查看已生成的回收站项目
> db.getRecycleBin().list()
输出结果中显示集合空间 sample 和集合 sample.employee 分别在不同时间被删除
{
  "OpType": "Drop",
  "OriginID": 12884901889,
  "OriginName": "sample.employee",
  "RecycleID": 5,
  "RecycleName": "SYSRECYCLE_5_12884901889",
  "RecycleTime": {
    "$timestamp": "2022-02-11-16.52.59.000000"
  },
  "Type": "Collection"
}
{
  "RecycleName": "SYSRECYCLE_6_3",
  "RecycleID": 6,
  "OriginName": "sample",
  "OriginID": 3,
  "Type": "CollectionSpace",
  "OpType": "Drop",
  "RecycleTime": {
    "$timestamp": "2022-02-11-16.54.06.000000"
  }
}恢复集合空间 sample
> db.getRecycleBin().returnItem("SYSRECYCLE_6_3")
Note:
returnItem() 用于恢复指定的回收站项目。在恢复集合时,如果集合对应的集合空间已被删除,需要先恢复该集合空间。
查看集合空间是否已恢复
> db.listCollectionSpaces()
{
  "Name": "sample"
}恢复集合 sample.employee
> db.getRecycleBin().returnItem("SYSRECYCLE_5_12884901889")查看集合是否已恢复
> db.listCollections()
{
  "Name": "sample.employee"
}用户可通过 getDetail() 查看当前回收站的配置。如果配置不符合预期,可以使用 alter() 或 setAttributes() 进行修改。
更多操作可参考
| 操作 | 说明 | 
|---|---|
| SdbRecycleBin.disable() | 禁用回收站机制 | 
| SdbRecycleBin.returnItemToName() | 以特定的名称恢复指定的回收站项目 | 
| SdbRecycleBin.snapshot() | 查看回收站项目的快照 | 
| SdbRecycleBin.count() | 查看回收站项目的个数 | 
| SdbRecycleBin.dropItem() | 删除指定的回收站项目 | 
| SdbRecycleBin.dropAll() | 删除所有的回收站项目 | 
| Sdb.dropCS()/SdbCS.dropCL()/SdbCollection.truncate() | 删除集合空间/删除集合/删除集合的所有数据 函数中增加参数 SkipRecycleBin,当一些临时表的操作不希望被回收时,可以设置 SkipRecycleBin 为 true | 
