删除历史数据
法规约束
数据删除是高敏感操作, 多数行业法规 (GMP / FDA / ISO) 要求"永不删除"或"删除必须留审计". 服务端实现可能加额外保护.
delete_history_range
删除时间区间内全部数据点.
def delete_history_range(self,
node_id: str,
start_utc: datetime,
end_utc: datetime,
delete_modified_too: bool = False) -> StatusCode: ...
| 参数 | 说明 |
|---|---|
node_id | 目标历史节点 NodeId |
start_utc | 起始时间 (UTC, 包含) |
end_utc | 结束时间 (UTC, 包含) |
delete_modified_too | True = 同时删修改记录; False = 只删原始, 保留修改记录 |
import datetime as dt
now = dt.datetime.now(dt.timezone.utc)
st = ua.delete_history_range(
"ns=2;s=Temperature",
start_utc=now - dt.timedelta(days=30),
end_utc=now - dt.timedelta(days=7))
print(st.name)
删除特定时间点 (走 update_history)
OPC UA 把"按时间点删除"作为 HistoryUpdate 的一种 (HistoryUpdateType.REMOVE):
from darra_opcua import HistoryUpdateType
# REMOVE 模式: values 列表里每个 DataValue 的 source_timestamp 决定删除哪些点
results = ua.update_history("ns=2;s=Temperature", HistoryUpdateType.REMOVE, dv_list)
详见 update_history.
删除事件 (待后续版本暴露)
OPC UA 还有 delete_history_events(node_id, event_ids) 服务, 按 EventId 列表删事件历史. 当前 SDK 待后续版本提供.
法规约束
- 永不删除 (只允许标记 obsolete)
- 删除必须留审计 (谁删的, 何时, 原因)
服务端实现可能加额外保护. 客户端可能拿到 BadUserAccessDenied.
性能
- 大区间 delete 服务端可能阻塞数秒到数分钟 (重建索引)
- 长时间操作建议放后台线程, 避免 UI 卡死
import threading
def do_delete():
ua.delete_history_range("ns=2;s=Temperature", start, end)
threading.Thread(target=do_delete, daemon=True).start()