删除历史数据 (C)
法规约束
数据删除是高敏感操作, 多数行业法规 (GMP / FDA / ISO) 要求"永不删除"或"删除必须留审计". 服务端实现可能加额外保护.
DeleteRange
按时间区间删除全部数据点.
DARRA_OPCUA_API DarraUa_Status DARRA_OPCUA_CALL DarraUa_Session_HistoryDeleteRange(
DarraUa_SessionHandle h,
const char* node_id_str,
DarraUa_DateTime start_time,
DarraUa_DateTime end_time,
DarraUa_Boolean is_delete_modified);
| 参数 | 说明 |
|---|---|
is_delete_modified | 1 = 同时删修改记录; 0 = 只删原始, 保留修改记录 |
#include <darra_opcua/darra_opcua_history.h>
DarraUa_DateTime end = utc_now_ft() - 7LL * 864000000000LL; /* 7 天前 */
DarraUa_DateTime start = utc_now_ft() - 30LL * 864000000000LL; /* 30 天前 */
DarraUa_Status st = DarraUa_Session_HistoryDeleteRange(
h, "ns=2;s=Temperature",
start, end,
/*is_delete_modified*/ 0);
if (!DARRA_UA_STATUS_IS_GOOD(st))
fprintf(stderr, "DeleteRange failed: %s\n", DarraUa_StatusName(st));
DeleteAtTime / DeleteEvents
OPC UA 还有 DeleteAtTimeDetails (按精确时间点删除) 和 DeleteEventDetails (按 EventId 删事件), C ABI 当前未在专用函数暴露; 业务可通过 HistoryUpdateData(update_type=4 /*Remove*/) 用 SourceTimestamp 字段实现"按时间点删除".
后续 SDK 版本将增加 DarraUa_Session_HistoryDeleteAtTime / _HistoryDeleteEvents 直接 API.
法规约束
- 永不删除 (只允许标记 obsolete)
- 删除必须留审计 (谁删的, 何时, 原因)
服务端实现可能加额外保护, 客户端可能拿到 BadUserAccessDenied.
性能
- 大区间 Delete 服务端可能阻塞数秒到数分钟 (重建索引)
- 长时间操作建议放后台线程, 避免主线程卡死