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 |