InterSystems IRIS for Health™ 是全球第一个也是唯一一个专门为医疗应用程序的快速开发而设计的数据平台,用于管理全世界最重要的数据。它包括强大的开箱即用的功能:事务处理和分析、可扩展的医疗保健数据模型、基于 FHIR 的解决方案开发、对医疗保健互操作性标准的支持等等。所有这些将使开发者能够快速实现价值并构建具有突破性的应用程序。了解更多信息。
本文档将帮助您使用 InterSystems IRIS®数据平台集成产品转换数据。
要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些, 请参见 InterSystems First Looks(《InterSystems 技术概要》)。
数据转换和互操作性
数据转换是 InterSystems IRIS 互操作性的核心。您可以改变从一个系统传入的数据的格式和内容,以满足下游系统的要求,从而允许系统之间进行通信。简单地说,从一个系统发送的信息可以转换为另一个应用程序可以理解的信息。使用 InterSystems IRIS,可以很容易地进行数据转换的创建、测试和维护。
假设您有两个包含产品价格的零售系统。当系统 A 向其他系统发送数据时,包含了不加税的产品基准价格。但是,系统 B 需要在价格中包含地区税。InterSystems IRIS 互操作性产品中的数据转换可以在将数据发送到系统 B 之前将从系统 A 收到的价格转换为加税价格。一旦定义,数据转换将自动处理修改。
常见的转换包括:
- 将值(value)从源信息复制到目标信息。
- 根据源信息的(value)执行计算,并将结果复制到目标信息。
- 为目标信息分配新的值(literal value)。
- 重新排列数据的顺序。
技术概要(First Look)有助于您了解在InterSystems IRIS ®数据平台中如何使用SQL:标准的SQL功能、特有功能以及如何快速上手使用。
要体验技术概要(First Look)的所有内容 ,您可以在InterSystems IRIS的免费评估实例上执行相关操作 ,请参阅InterSystems First Looks(《InterSystems 技术概要》)。
1. InterSystems SQL: 特性和性能
InterSystems IRIS 提供高性能、功能完善的 SQL。在 InterSystems IRIS 中使用SQL,包括在单个CPU内核上运行查询,到使用数十个内核的CPU上并行执行查询,已至在InterSystems IRIS服务器集群上运行分布式查询。
在InterSystems IRIS中,可以使用 SQL 的范围包括:
- 联接(Joins)
- 灵活、高性能索引
- 聚合函数和分组
- 以SQL或InterSystems ObjectScript (以下简称“ObjectScript” )编写的存储过程
- JDBC和ODBC连接
- 自动并行查询
- 透明分布式查询
InterSystems SQL提供了强大的工具来实现最佳的SQL查询性能。
技术概要:ObjectScript
技术概要:ObjectScript
本文档将向您介绍 ObjectScript 编程语言,并提供了几个示例,说明如何使用它来存储和检索来自 InterSystems IRIS®数据平台的数据。本技术概要(First Look)并不试图提供对该语言或其功能的全面概述。您可以使用本文件末尾列出的参考资料,继续您的探索。
要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。
什么是 ObjectScript?
ObjectScript 是一种编程语言,用于在 InterSystems IRIS 数据平台上快速开发复杂的业务应用。ObjectScript 源代码被编译成 object 代码,该代码可针对业务应用程序中的典型操作(包括字符串操作和数据库访问)进行高度优化。
ObjectScript 的独特之处之一是它的底层存储结构,即所谓的 globals。Globals 可以被认为是持久的多维稀疏数组。ObjectScript 允许您直接从 globals 访问数据,但也允许您通过其本机 object 和 SQL 支持来访问这些数据。
1 安装基础知识:目的
本指南可帮助您成功在桌面或虚拟机上运行一个经授权许可的 InterSystems IRIS®。适用于我们在技术概要
(First Look)操作指南里所提及的技术。
我们提供的说明包括64位 Windows 10, Red Hat 企业版Linux7,以及Apple macOS10.13.
注: InterSystems 云管理器(ICM)提供了一种简单、直观的方法来配置云或虚拟基础架构,用户可在该基 础架构上部署所需的 InterSystems IRIS架构以及其他服务。
请勿使用本指南安装生产实例或任何自定义安装配置;如需帮助,请参阅InterSystems Cloud Manager Guide(《InterSystems 云管理器指南》)或Installation Guide(《安装指南》)。
2 用前须知
在开始安装 InterSystems IRIS之前,请确保:
• 计算机上的完整管理员权限或sudo权限。
• 访问InterSystems IRIS的单文件的可执行安装文件(Windows)或工具包(Linux和macOS)。 • 在IRIS可访问的文件夹下存放有效的许可证密钥文件,通常命名为iris.key。
您正在使用的技术概要(First Look)中对安装有特定要求;例如,可能需要“正常”安全性。
2021年9月13日,中国 北京—— 致力于帮助客户解决最关键的可扩展性、互操作性和速度问题的创新数据技术提供商InterSystems今日宣布在中国推出InterSystems IRIS医疗版互联互通套件,以满足医院信息化建设的标准化要求,促进业务协同,助力公立医院高效建设互联互通平台。
Object Script(三)
面向脚本
-
Routine
可将routine看做全局可调用的函数,一个函数是一个执行程序(Roution),它执行一个操作(例如,将一个字符串转换为其对应的ASCII码值)并且可以返回一个值。
语法结构:
Routine可以有一个标签,ObjectScript代码,以及结尾的注释,所有这些元素都是可选的。可以使用";"或"//"来表示注释。对于多行注释,用"/*"标记注释的开头,用 "*/"标记注释的结尾。
结构示例:
标签
ObjectScript代码
end
-
创建Routine示例
Studio创建:
打开Studio,点击左上角新建文件。选择General->ObjectScript Routine
将下段代码填写入建好的Routine。
hello ; hello world routine write !, "hello world" write !, "bye" end quit ; end
Terminal调用:
打开Terminal,执行下段代码,即可检查结果。
do ^hello热烈祝贺中国参赛者John Pan 获得IRIS Analytics 开发者大赛第二名!!!
针对新近面向中国推出的InterSystems IRIS医疗版互联互通套件,InterSystems将在9月17日(本周五)举办“InterSystems IRIS医疗版互联互通套件”线上发布会,会议详情如下,欢迎点击“此处”或扫描下方二维码报名。此次会议为邀请参会制,收到您的报名信息后,我们会及时与您确认参会资格并发送会议链接。
InterSystems IRIS/Caché的CDC
InterSystems IRIS/Caché未提供开箱即用的变更数据捕获(CDC)工具,而且由于其多模型建模能力和底层的多维存储模型,相对于关系型数据库的单一模型,针对于SQL的CDC在InterSystems IRIS/Caché上会更复杂一些。例如通过Journal日志记录的是底层持久化多维数组的数据变更,而不是SQL table的变更。
通常,在应用层面实现变更数据捕获是更灵活和简单的方式,例如通过设置触发器、类的DSTIME参数。但如果无法在应用层做CDC,可以考虑使用InterSystems IRIS/Caché的Journal和强大的开发能力获取数据变更。
这里介绍使用InterSystems IRIS/Caché的Reporting类型的异步镜像成员获取数据变更。
挑战一:缺乏一个统一的技术体系?
InterSystems IRIS 医疗版通过统一的数据库、互操作性/中间件、机器学习和FHIR等医疗行业特有的功能来简化开发,开箱即用。
挑战二:需要高性能的解决方案,可以定制适合医疗行业使用的案例
InterSystems IRIS for Health医疗版由医疗行业开发人员创建并为医疗服务服务,具有所需的性能、可扩展性和灵活性,大量的全球、全国大型顶级医院案例。全美排名前20医院,全国客户数百家,百强医院30余家;
挑战三:开源和专有软件缺乏灵活性,无法为医疗行业应用提供高可靠性。
InterSystems IRIS医疗版实现一套平台兼容专有和开源模块,同时开发人员可以选择自己喜欢的开发语言和灵活性,支持多种开发语言(ObjectScript,.net, Java, Sql, 等等)
挑战四:缺乏具有医疗卫生领域专业知识的供应商,也没有为开发人员提供持续的支持。
InterSystems IRIS 医疗版的产品开发能力、屡获殊荣的支持和长期深耕医疗的企业文化,确保开发人员持续成功。
这是一个我开发的名为NiPaRobotica Pharmacy的小应用。 从附件可以看到一个界面,能够接收药房配药请求,并将订单上的行项目转换为发送给机器人的配药对话 。我在3家医院的药房部署了这个接口,其中两家药房有6个机器人被安排来将药物从分配槽配送到药剂师的窗口,每天能服务1200个病人。这些机器人能够将病人平均等待时间从2小时减少一半到1小时.接下来我把这个接口部署到专门为慢病病人建的6个配送点,例如如结核病、艾滋病毒、糖尿病、癫痫、高血压和哮喘等等。这个项目的目标是“把药物带给病人”。 这些点有六个6 ATM形式的药房配药设备 (Pharmacy Dispense Units ,PDU),可以让病人直接与呼叫中心的药剂师沟通。在每个PDU 背后是一个存放上千种药物的大型的机器人。我的应用可以发送指令给机器人,机器人将药物分配到传送带上,送到一个打印机下面。这个打印机已经收到药房标签的内容,包括病人姓名、剂量说明和其他信息等。然后打印机把标签放下并贴在药品包装上。这包药再往前走一点就有一块海绵压住标签,使其更牢固地贴在包装上。然后,传送带将物品传送到PDU中的一个盒子里,一旦所有药物都被分发出去,病人就能打开PDU上的一个盖子,取出他的药品。这个项目最重要的意义是让病人少跑腿,不需要请假,还要长途跋涉到他们平时看病的医院,再取药回家。
在医院信息化领域,中日联谊医院最近一次站在行业瞩目的聚光灯下,是在2021年7月。在国家卫生健康委统计信息中心发布的《关于2020年度国家医疗健康信息互联互通标准化成熟度测评结果公示的通知》中,9家医院获评五级乙等,中日联谊医院名列其中。这也是目前为数不多的“通关”互联互通五乙的医院之一。
利用Intersystems IRIS医疗版数据平台内置多模型整合
医院信息查询业务解决方案
概述:
随着医院信息化建设的逐步完善,医院子系统越来越多,系统间接口越来越多,同时接口费用不断增加,管理工作变得越来越复杂。其中,查询类业务接口根据业务类型分化,数量也是逐步递增,带来接口量大、开发工作繁重、代码冗余、维护困难等等问题。针对这一困境,我们利用Intersystems IRIS数据平台内置多模型整合医院信息查询业务解决方案。该应用程序可通过内置模型应用完成查询业务,大大缩小开发、维护、实施等项目关键运转周期。
应用链接:HealthInfoQueryLayer
关键应用:IRIS for Health、REST API、ObjectScript、Globals 、SQL、DATA LOOKUP TABLES
应用程序采用模型及应用介绍:
1.采用模型
1.1. Globals (key-value)
Globals是可以在IRIS数据库中存储和管理的稀疏多维数组。您可以使用ObjectScript和本机API处理Globals。
工具:
https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GGBL_MANAGING
应用:
应用程序根据Globals的键值对、访问速度快的特性。
投票三部曲:
3. 投票
参赛作品:AlertDashboard
Use DeepSee to create a dashboard to show abnormal conditions of Production operation.
.png)
2021 年 8 月的学习资料现在可以在learning.intersystems.com上独家获取!您可以:
- 先睹为快:2021 年虚拟峰会体验实验室
- 使用自适应分析(Adaptive Analytics)解决方案来组建你的第一个数据模型
- 免费试用 InterSystems IRIS 社区版
- 查看 InterSystems 文档中的分析
- 申请即将举行的线上技术课程
注意:老是错过最新消息?别担心,我们会在9月恢复正常的邮件发送。
这是一个IRIS 2020.2上的代码示例,并非InterSystems 官方支持!
本demo基于原始类描述 is based on the raw class descriptions.
使用的数据类是Address, Person, Employee, Company
如果要做更有吸引力的 demo, 可以添加 JSONtoString by ID的方法
用ZPM安装后从终端启动:After installation with ZPM just run from Terminal
USER>do ##class(rcc.ONAPI.demo).Run()
Adjust Parameters
host[127.0.0.1]:
port[51773]:
namespace[USER]:
user[_SYSTEM]:
pwd[SYS]:
timeout[5]:
****** connected ********
下一步, 你会得到一系列可能的Demo动作。you get a list of possible demo actions.
没有输入就意味着没有动作No input means no action.
菜单会一直循环直到退出The menu loops until you exit.
这些API虽然在IRIS 2020.1中已经实现了,但没有被放在官方文档里。
这都是直接从Class Reference中提取的,我只是收集了它来创建第一个概述。
ObjectScript的本地API遵循其他语言平台上使用的API。它从一个静态API开始,允许用户使用Iris Connection连接到IRIS命名空间,无论是本地还是远程。连接接口允许用户实例化IRIS本地API类(%Net.DB.Iris)。然后,该实例可用于访问IRIS全局数组,管理事务,调用例程或类中实现的函数和方法,以及实例化远程迭代器。
%Net.DB.DataSource
该类实现了IRIS Native API for Object Script DataSource接口。
目前,该接口仅包含 CreateConnection 方法
CreateConnection 方法接受 url, port, namespace, user, 和 pwd 等参数. 这些参数的信息请参考 %Net.DB.Connection 。CreateConnection() 返回 %Net.DB.Connection的实例
| host | input | The host name or address, defaults to 127.0.0. |
可以使用%SYS.Journal.File类中的ByTimeReverseOrder查询,以及%SYS.Journal.Record类中的List查询来实现。
下面是这两个查询的具体作用:
A) %SYS.Journal.File类中的ByTimeReverseOrder查询
这个查询会获取journal日志文件名并按降序排列
USER>set rs=##class(%ResultSet).%New("%SYS.Journal.File:ByTimeReverseOrder")
USER>do rs.Execute()
USER>while rs.Next() { write rs.Name,! }
c:\intersystems\cache\mgr\journal\20190620.003
c:\intersystems\cache\mgr\journal\20190620.002
c:\intersystems\cache\mgr\journal\20190620.001
c:\intersystems\cache\mgr\journal\20190610.001B) %SYS.Journal.Record类中的List查询
这个查询可以从指定journal日志文件中获取日志记录
USER>set rs2=##class(%ResultSet).
以下步骤展示如何显示 /api/monitor 服务提供的指标列表示例。
在上个帖子中,我概述了以 Prometheus 格式显示 IRIS 指标的服务。 该贴介绍了如何在容器中设置和运行 IRIS 预览版 2019.4,然后列出了指标。
本帖假定您已安装 Docker。 如果未安装,现在就为您的平台安装吧 :)
步骤 1. 下载并运行 docker 形式的 IRIS 预览版
按照预览发行版的下载说明下载预览版许可证密钥和 IRIS Docker 映像。 例如,我选择了 InterSystems IRIS for Health 2019.4。
按照 Docker 容器中的 InterSystems 产品初见中的说明操作。 如果您熟悉容器,请跳转到标题为“下载 InterSystems IRIS Docker 映像”的部分。
以下终端输出说明了我用来加载 docker 映像的过程。 docker load 命令可能需要几分钟的时间才能运行;
$ pwd
/Users/myhome/Downloads/iris_2019.4
$ ls
InterSystems IRIS for Health (Container)_2019.4.0_Docker(Ubuntu)_12-31-2019.ISCkey irishealth-2019.4.0.379.0-docker.供应商或内部团队要求说明如何为 VMware vSphere 上运行的_大型生产数据库_进行 CPU 容量规划。
总的来说,在调整大型生产数据库的 CPU 规模时,有几个简单的最佳做法可以遵循:
- 为每个物理 CPU 核心规划一个 vCPU。
- 考虑 NUMA 并按理想情况调整虚拟机规模,以使 CPU 和内存对于 NUMA 节点是本地的。
- 合理调整虚拟机规模。 仅在需要时才添加 vCPU。
通常,这会引出几个常见问题:
- 由于使用超线程技术,VMware 创建的虚拟机的 CPU 数量可以是物理 CPU 数量的两倍。 那不就是双倍容量吗? 创建的虚拟机不应该有尽可能多的 CPU 吗?
- 什么是 NUMA 节点? 我应该在意 NUMA 吗?
- 虚拟机应该合理调整规模,但我如何知道什么时候合理?
我以下面的示例回答这些问题。 但也要记住,最佳做法并不是一成不变的。 有时需要做出妥协。 例如,大型生产数据库虚拟机很可能不适合 NUMA 节点,但我们会看到,其实是没问题的。 最佳做法是指必须针对应用程序和环境进行评估和验证的准则。
(ECP) Caché 出色的可用性和扩展特性之一是企业缓存协议 (ECP)。 在应用程序开发过程中,如对使用 ECP 的分布式处理加以考虑,可以横向扩展 Caché 应用程序的架构。 应用程序处理可以调整为非常高的速率,处理能力从单个应用程序服务器扩展到最多 255 个应用程序服务器,并且不需要任何应用程序更改。
在我参与的 TrakCare 部署中,ECP 已广泛使用多年。 十年前,主要供应商之一的一台“大型”x86 服务器可能总共只有八个核心。 对于大型部署来说,ECP 是横向扩展商业服务器处理能力的方式,不适合单台昂贵的大型企业服务器。 即使是高核心数的企业服务器也有限制,因此 ECP 也用于扩展这些服务器上的部署。
如今,大多数的新 TrakCare 部署或升级到当前硬件_不需要 ECP_ 即可扩展。 目前的双插槽 x86 生产服务器可以拥有数十个核心和巨大容量的内存。 我们看到,在最近的 Caché 版本中,TrakCare 以及许多其他 Caché 应用程序具有可预测的线性扩展能力,能够随着单台服务器中 CPU 核心数量和内存的增加而支持逐渐增多的用户和事务。 在现场,我看到大多数的新部署都是虚拟化的,即使如此,虚拟机也可以根据需要扩展到主机服务器的规模。 如果资源需求超过单个物理主机可以提供的资源,则使用 ECP 进行横向扩展。
注(2019 年 6 月):许多内容发生了变化,最新的详细信息请参见此处 注(2018 年 9 月):自本帖首次发布以来,内容已经有了很大改动,我建议使用 Docker 容器版本,以容器形式运行的项目以及详细信息仍然在 GitHub 的同一个地址发布,您可以下载、运行并根据需要进行修改。
与客户合作进行性能评估、容量规划和故障排除时,我经常解包和查看来自 pButtons 的 Caché 和操作系统指标。 我不久前发布了一个帖子,介绍了一个用来解包 pButtons 指标的实用工具(该实用工具使用 unix shell、perl 和 awk 脚本编写),而不是费力地浏览 html 文件,再将需要绘制的部分剪切并粘贴到 excel 中。 虽然这是一个有用的省时工具,但还不够完善... 我还使用脚本自动绘制指标图表,以便快速查看并包含在报告中。 但是,这些绘图脚本不容易维护,并且当需要站点特定的配置(例如 iostat 或 Windows perfmon 的磁盘列表)时会变得特别混乱,所以我从未公开发布过绘图实用工具。 不过我现在可以很高兴地说,已经有了简单得多的解决方案。
当我与 Fabian 一起在客户站点查看系统性能时,有了意外发现,他向我展示了使用实用的 Python 绘图模块所做的工作
一个实例中可创建的最大命名空间数量为2048个。这个上限不可修改。
一个实例中可创建的最大数据库数量(包括远程数据库)为15998个。这个上限也不可修改。
一个实例中可创建数据库的总数量还有其他因素制约:
1. 数据库路径信息总量最大为256KB,也就是所有数据库的路径字符加起来不能多于256KB。设置的路径越长,可创建的数据库数量越少。
计算公式:最大数据库数量=258048/(平均数据库路径长度+3)
2. 镜像的数据库一个按两个算。也就是创建一个镜像的数据库,相当于创建了2个非镜像数据库。
更多细节请参考在线文档:
https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=G…
IRISHealth-2019.1.0.510.4 能在 CentOS 7.5上部署吗?
InterSystems非常高兴地宣布,InterSystems IRIS数据平台、InterSystems IRIS for Health和HealthShare Health Connect的2021.1版本现已向我们的客户和合作伙伴全面开放。
这个版本的为开发者提供了更大的自由度,使他们可以用自己选择的编程语言在服务器端和客户端建立快速和强大的应用程序。这个版本还使用户能够通过新的和更快的分析能力更有效地消费大量的信息。
第七章 Caché JSON %JSON快速参考
%JSON快速参考
本节提供本章中讨论的%JSON方法、属性和参数的快速参考。
%JSON.Adaptor方法
这些方法提供了从JSON序列化和序列化到JSON的能力。
%JSONExport()
%JSON.Adaptor.%JSONExport()将启用JSON的类序列化为JSON文档,并将其写入当前设备。
method %JSONExport(%mappingName As %String = "") as %Status
%mappingName(可选)-要用于导出的映射的名称。基本映射由"" 表示,并且是默认映射。
%JSONExportToStream()
%JSON.Adaptor.%JSONExportToStream()将启用`JSON的类序列化为JSON文档并将其写入流。
method %JSONExportToStream(ByRef export As %Stream.Object,
%mappingName As %String = "") as %Status
export- 包含序列化的JSON文档的导出流。%mappingName(可选)-要用于导出的映射的名称。基本映射由""表示,并且是默认映射。
%JSONExportToString()
%JSON.Adaptor.
第十五章 Caché WebSocket
使用WebSockets (RFC 6455)
web是围绕请求/响应范例构建的:客户机向服务器发送请求,服务器通过向客户机发送响应进行响应。此范式和HTTP本身不允许此通信协议的反向形式,即服务器与客户机启动请求/响应周期。已经开发了许多技术来解决了这个问题,即服务器可以启动与客户机的对话。这些技术通常被称为基于推送或 comet-based的技术,它们都存在不适合在web基础设施上进行全面部署的问题。目前使用的三种主要技术如下所述。
Short Polling 短轮询
使用这种技术,客户端定期发送HTTP请求来检测服务器状态的变化,服务器被编程为立即响应。空响应表示没有变化。
问题:
- 轮询频率(和响应能力)受到客户机可以容忍的刷新延迟的限制。
- 每个请求都是一个完整的
HTTP请求/响应往返过程,这会导致大量的HTTP流量,而这又会给服务器和网络基础设施带来无法接受的负担 - 每个消息交换都承载着
HTTP协议的开销,如果消息大小超过了最大传输单元(MTU)(通常是以太网的1500字节),则会特别繁重。
Long Polling 长轮询
使用这种技术,客户端发送HTTP请求,但服务器只在需要通知客户端更改时才响应。客户端通常在服务器发送响应消息时发送另一个“长轮询”请求。
第十四章 其他InterSystems %Net工具
下面是%Net中其他一些有用类的简短列表:
%Net.URLParser
InterSystems IRIS提供了一个实用程序类%Net.URLParser,可以使用它将URL字符串解析为其组成部分。例如,当您重定向HTTP请求时,这很有用。
该类包含一个类方法Parse(),它接受一个包含URL值的字符串,并通过引用返回一个包含URL各部分的数组。例如:
/// w ##class(PHA.TEST.HTTP).URLParser()
ClassMethod URLParser()
{
Set url = "https://www.google.com/search?q=Java+site%3Adocs.intersystems.com&oq=Java+site%3Adocs.intersystems.com"
Do ##class(%Net.URLParser).Parse(url,.components)
zw components
}
DHC-APP>w ##class(PHA.TEST.HTTP).URLParser()
components("fragment")=""
components("host")="www.google.com"
components("netloc")="www.google.InterSystems产品有四种备份方法:
(1) 外部备份
(2) 在线备份
(3) 冷备份
(4) 传统的并行外部备份
有关这些方法的细节请参考在线文档 https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.U…
以下是对每种备份方法的简要描述:
(1) 外部备份
外部备份是InterSystems推荐的最佳备份方式。
外部备份一般是对数据库文件所在的存储创建快照的方式来实现。
创建快照可以在多个层面进行,例如存储层面,操作系统层面,等等,因此这些相关技术和工具一般由第三方来提供。
在做快照前,一定要先停止对数据库文件的写入(InterSystems IRIS的IRIS.DAT,Caché/Ensemble的CACHE.DAT)。但是用户进程可以继续对内存进行更新,而不需要中断。
InterSystems提供了停止对数据库文件写入的方法,用户可以把这个加入到快照工具的脚本里。
外部备份一般包括以下几步:
1. 使用Backup.General.ExternalFreeze()方法来停止对数据库文件的写入。
2. 使用第三方快照工具来对文件系统创建快照。
3. 使用Backup.General.ExternalThaw()方法来恢复对数据库文件的写入。
4.
.png)
