搜索​​​​

清除过滤器
文章
姚 鑫 · 二月 25, 2021

第四十七章 Caché 变量大全 ^$JOB 变量

# 第四十七章 Caché 变量大全 ^$JOB 变量 提供系统间IRIS进程(`JOB`)信息。 # 大纲 ```java ^$JOB(job_number) ^$J(job_number) ``` # 参数 - `job_number` 输入ObjectScript命令时创建的系统特定OBJ编号。每个活动的InterSystems IRIS进程都有一个唯一的作业号。登录到系统会启动一个作业。在UNIX®系统上,作业号是调用InterSystems IRIS时启动的子进程的`PID`。`JOB_NUMBER`必须指定为整数;不支持十六进制值。 # 描述 可以将`^$JO`B结构化系统变量用作`$DATA`、`$ORDER`和`$QUERY`函数的参数,以获取有关本地InterSystems IRIS系统上是否存在InterSystems IRIS作业的信息。 # 示例 以下示例显示如何将`^$JOB`用作`$DATA`、`$ORDER`和`$QUERY`函数的参数。 ## 作为$DATA的参数 `$DATA(^$JOB(job_number))` `^$JOB`作为`$DATA`的参数返回一个整数值,该值指示指定的作业是否作为节点存在于`^$JOB`中。下表显示了`$DATA`可以返回的整数值。 Value | Meaning ---|--- 0 | `JOB`不存在 1 | `JOB`存在 以下示例测试系统间IRIS进程是否存在。 ```java DHC-APP>SET x=$JOB DHC-APP>WRITE !,$DATA(^$JOB(x)) 1 ``` 变量`x`设置为当前进程的作业号(例如:4294219937)。写入操作返回布尔值1,表示此进程存在。 ## 作为$ORDER的参数 `$ORDER(^$JOB(job_number),direction)` `^$JOB`作为`$ORDER`的参数,按排序顺序将下一个或上一个`^$JOB`编号返回到指定的作业编号。如果不存在作为`^$JOB`节点的此类`JOB`编号,`$ORDER`将返回空字符串。 Direction参数指定是否返回下一个或上一个`job`编号。如果不提供方向参数,InterSystems IRIS会将排序顺序中的下一个`job`编号返回给指定的`job`编号。 以下子例程搜索InterSystems IRIS作业表,并将`job`号存储在名为`job`的本地数组中。 ```java /// d ##class(PHA.TEST.SpecialVariables).JOB() ClassMethod JOB() { JOB SET pid="" FOR i=1:1 { SET pid=$ORDER(^$JOB(pid)) QUIT:pid="" SET JOB(i)=pid } zw JOB WRITE "总共job有: ",i QUIT } ``` ```java DHC-APP>d ##class(PHA.TEST.SpecialVariables).JOB() JOB(1)=612 JOB(2)=1424 JOB(3)=1972 JOB(4)=5624 JOB(5)=7244 JOB(6)=7864 JOB(7)=7872 JOB(8)=7892 JOB(9)=7920 JOB(10)=8332 JOB(11)=9048 JOB(12)=9084 JOB(13)=9340 JOB(14)=10084 JOB(15)=10112 JOB(16)=10156 JOB(17)=10200 JOB(18)=10212 JOB(19)=10828 JOB(20)=22432 总共job有: 21 ``` ## 作为$QUERY的参数 `$QUERY(^$JOB(job_number))` `^$JOB`作为`$QUERY`的参数,按排序顺序将下一个`^$JOB`编号返回到指定的`JOB`编号。如果`^$JOB`中没有这样的`JOB`编号作为节点,则`$QUERY`将返回空字符串。 以下示例返回InterSystems IRISJOB表中的前两个`JOB`。请注意间接运算符`(@)`的用法: ```java DHC-APP>SET x=$QUERY(^$JOB("")) DHC-APP> WRITE !,x ^$JOB("612") DHC-APP>WRITE !,$QUERY(@x) ^$JOB("1424") ```
公告
Claire Zheng · 十月 23, 2022

Happy 1024!欢迎参加“首届技术征文大赛线上分享会”

开发者社区的同学们,1024快乐! 今晚19:30,我们将通过“InterSystems首届技术征文大赛线上分享会”发布获奖名单、进行征文作品分享&点评、探讨热门话题,同期还将举办多轮抽奖!欢迎参会,锁定#腾讯会议 会议主题:InterSystems首届技术征文大赛线上分享会会议时间:2022/10/24 19:30-21:00 (GMT+08:00) 中国标准时间 - 北京 点击链接入会,或添加至会议列表:https://meeting.tencent.com/dm/nVHWgZcY5NfZ #腾讯会议:372-615-324
文章
姚 鑫 · 一月 27, 2023

第五十八章 使用 ^BLKCOL 监视块冲突

# 第五十八章 使用 `^BLKCOL` 监视块冲突 当一个进程被迫等待访问一个块时,就会发生块冲突。过多的块冲突会降低应用程序性能。 # `Using ^BLKCOL` 在 `IRIS®` 数据平台中,`^BLKCOL` 实用程序对指定时间段(默认为 `10` 秒)内的块碰撞进行采样,记录这段时间内指定时间间隔(默认为 `10` 毫秒)内的最新块碰撞。对于每个记录的冲突,`^BLKCOL` 不仅标识块,还标识涉及的全局及其在块中的第一个和最后一个引用,以及创建试图访问块的进程的例程和行。 注意:`irisstat -D` 选项,如本指南附录“使用 `irisstat` 实用程序监视 `IRIS`”中的使用选项运行 `irisstat` 中所述,也对块冲突进行采样,但仅识别涉及的块。 `irisstat -D` 的输出包含在 `^SystemPerformance` 实用程序生成的报告中,如本指南的使用 `^SystemPerformance` 监控性能一章所述。 运行 `^BLKCOL` 时,可以指定以下内容: - 采样周期的长度(以秒为单位) - 采样之间的间隔(以毫秒为单位) - 是否收集例程详细信息(默认为是) - 是否将输出格式化为: - 具有最高冲突计数的块列表(默认) - 涉及的所有块的列表`in collisions` - 来自检测到的所有块碰撞的逗号分隔值,按块编号和例程排序和计数 - 来自所有检测到的块碰撞的逗号分隔值,未排序(`RAW`) - 例程中的碰撞热点列表 - 要显示的块数(如果适用) - 是否将输出发送到文件 # `^BLKCOL Ouputend` 输出到文件 `^BLKCOL` 实用程序的使用显示在以下示例终端会话中: ```java %SYS>do ^BLKCOL Block Collision Analysis How many seconds should we sample: How long to wait (ms) between each sample: Collect routine details? Format for 'T'op counts, 'D'isplay all, 'S'orted CSV, 'H'ot spot, or 'R'aw CSV: Number of blocks to display: Output to file: Sampling ... (any key to interrupt) 625 block collisions in 735 samples. Block # (count) - Global refs (first - last in block) - Routine refs (SFN) 767 (395) in c:\InterSystems\iris\mgr\user\ ^acctest - ^acctest(10220," 167") (T/BPtr) 325 at ^AccessTest+156(4) 25 at ^AccessTest+121(4) 24 at ^AccessTest+92(4) 8 at ^AccessTest+109(4) 8 at ^AccessTest+127(4) 4 at ^AccessTest+170(4) 1 at ^AccessTest+163(4) 3890 (11) in c:\InterSystems\iris\mgr\user\ ^acctest(2552," 371") - ^acctest(2552," 38") (Data) 6 at ^AccessTest+164(4) 3 at ^AccessTest+163(4) 1 at ^AccessTest+134(4) 1 at ^AccessTest+156(4) 15572 (9) in c:\InterSystems\iris\mgr\user\ ^acctest(6980," 4795") - ^acctest(6988," 3259") (Data) 7 at ^AccessTest+134(4) 1 at ^AccessTest+164(4) 1 at ^AccessTest+170(4) 15818 (8) in c:\InterSystems\iris\mgr\user\ ^acctest(9124," 173") - ^acctest(9124," 1743") (Data) 5 at ^AccessTest+164(4) 3 at ^AccessTest+170(4) 971 (7) in c:\InterSystems\iris\mgr\user\ ^acctest(484," 3927") - ^acctest(484," 3938") (Data) 5 at ^AccessTest+170(4) 2 at ^AccessTest+164(4) 1137 (7) in c:\InterSystems\iris\mgr\user\ ^acctest(756," 4063") - ^acctest(756," 4073") (Data) 3 at ^AccessTest+109(4) 2 at ^AccessTest+134(4) 1 at ^AccessTest+156(4) 1 at ^AccessTest+163(4) 2999 (7) in c:\InterSystems\iris\mgr\user\ ^acctest(2092," 666") - ^acctest(2092," 674") (Data) 3 at ^AccessTest+170(4) 1 at ^AccessTest+109(4) 1 at ^AccessTest+121(4) 1 at ^AccessTest+134(4) 1 at ^AccessTest+164(4) 6173 (7) in c:\InterSystems\iris\mgr\user\ ^acctest(3684," 528") - ^acctest(3684," 536") (Data) 3 at ^AccessTest+163(4) 1 at ^AccessTest+109(4) 1 at ^AccessTest+156(4) 1 at ^AccessTest+164(4) 1 at ^AccessTest+170(4) 14617 (7) in c:\InterSystems\iris\mgr\user\ ^acctest(9688," 18") - ^acctest(9688," 26") (Data) 4 at ^AccessTest+170(4) 2 at ^AccessTest+164(4) 1 at ^AccessTest+134(4) 15282 (7) in c:\InterSystems\iris\mgr\user\ ^acctest(8700," 4889") - ^acctest(8760," 1402") (Data) 4 at ^AccessTest+170(4) 3 at ^AccessTest+164(4) %SYS>d ^BLKCOL Block Collision Analysis How many seconds should we sample: How long to wait (ms) between each sample: Collect routine details? Format for 'T'op counts, 'D'isplay all, 'S'orted CSV, 'H'ot spot, or 'R'aw CSV: H Number of blocks to display: Output to file: Sampling ... (any key to interrupt) 571 block collisions in 768 samples. Sorted by routine/line that waits for block ownership _____________________________________________________ (571) AccessTest (324) +156^AccessTest : s @G@($J,node)=$$getdata($E(Str,1,$r(1000))) ;SMLXXX+, AFH (54) +164^AccessTest : k @G@($J,node) (43) +134^AccessTest : . k @G@($J,node) (31) +92^AccessTest : . . k @G@($j) (28) +109^AccessTest : . s x=$O(@G@($J,x)) Sorted by routine that owns the block _____________________________________ (472) AccessTest (472) +AccessTest ```
公告
Michael Lei · 二月 28, 2023

医疗数据去标识化工具 抢先体验计划

我们很高兴地宣布我们的抢先体验计划的最新成员 - Health Data De-ID工具。 该工具将根据 *HIPAA 安全港* 对结构化临床数据进行去标识化处理,并允许在需要时进行重新标识。它使用 InterSystems 的 *SDA* 规范格式,该格式用于我们从一种格式到另一种格式的所有标准转换,例如 *HL7* 到 *CDA*、*HL7* 到 *FHIR* 等。虽然该工具使用 XSLT 转换来提高性能原因,它提供了辅助方法,您不需要成为 XSLT 专家的情况下更轻松地调整开箱即用的去标识化规则。 Health Data De-ID 适用于任何 InterSystems 产品,从 InterSystems IRIS for Health 到 Health Connect 再到 Unified Care Record。 您可以在此处加入抢先体验计划 - [如何注册抢先体验计划 (EAP)]?我们需要您的反馈,因此请在您完成整个过程或遇到任何问题时与我们联系。
文章
Louis Lu · 十一月 2, 2021

IRIS 2021 技术文档 First Look 35 -- 使用 Production 进行大文件传输(Managed File Transfer, MFT)

本文介绍了 InterSystems IRIS®数据平台中的大文件传输(Managed File Transfer,MFT)集成选项,它使您能够轻松地将第三方文件传输服务直接集成到 InterSystems IRIS 产品中。本文还包括在新产品中使用 MFT 的逐步指导。 要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。 在 InterSystems IRIS 中使用 MFT 的好处 许多拥有 InterSystems IRIS 产品的网站也使用文件传输服务,如 Box、Dropbox 或 Accellion kiteworks,以实现安全、符合 HIPAA 的文件共享。然而,这种服务的使用取决于终端用户是否愿意使用它。在没有强制执行的情况下,他们可能很容易忘记这样做,或者有时干脆选择将文件作为附件发送。通过将 MFT 服务集成到您的产品中,您可以确保文件总是被安全地发送。另一个好处是,由于产品可以根据需要自动地将敏感文件路由到正确的位置,并遵循适当的工作流程,因此,错位或错误指向文件的风险更小。 考虑以下用例:一家职业介绍所将潜在员工的常规体检或药物测试外包给门诊医疗测试机构。测试机构和职业介绍所都有责任确保私人信息的安全数据传输,并在彼此之间进行传输。然而,虽然医疗机构可能已经有了符合 HIPAA 的程序,并可能已经使用了安全文件传输服务,但职业介绍所可能没有适当的基础设施来处理所需的安全级别。在任何一端设置启用 MFT 的 InterSystems IRIS 产品,均可简化所有此类通信的标准化文件传输服务的使用。 对于需要向内部和外部位置(location)提交相同文件的企业来说,或者当单个部门接收到需要根据发件人进行不同处理的文件时,MFT 也非常有用。例如,假设一家汽车经销商需要将签署的客户财务文件传送到他们的总部以及金融机构。另外,假设销售部门与租赁部门有不同的流程(即使这两个部门必须向同一家银行提交相同类型的信息)。这些差异可能会导致混乱和错位或发送错误的文书工作。此外,经销商不能也不应该将客户签署的财务或其他个人数据作为常规电子邮件的附件发送。使用集成了 MFT 的 InterSystems IRIS 产品简化了提交和路由过程,以便将正确的文档送到正确的部门进行适当的处理,从而减少了文档丢失的机会。 它是如何工作的? InterSystems IRIS 提供了业务主机,您可以将其添加到产品和配置中,而不需要编程。这些业务主机支持 Box、DropBox 和 Accellion kiteworks 服务。一旦您添加了这些业务主机并配置了它们,产品就可以轻松地从终端用户帐户检索文件,或将文件放入这些帐户,或两者都是。 InterSystems IRIS 使用开放授权框架(Open Authorization Framework)2.0 版本(称为 OAuth 2.0)授权对第三方传输服务的访问。当您配置 InterSystems IRIS 产品来使用传输服务时,您将该产品设置为传输服务帐户的授权用户。这允许产品从该帐户下的任何目录(例如分配给单个终端用户的目录)中提取文件并将文件放入其中。这些个人 终端用户的访问完全不受任何影响,他们可以继续像以前一样放置和检索文件。 尝试 MFT:创建启用 MFT 的产品 将 MFT 集成到 InterSystems IRIS 产品中只需要几个步骤:首先,创建并初始化与传输服务的连接,然后包括适当的业务主机,使产品能够直接与传输服务对话。您可以按照本节中的步骤创建一个在您的 Accellion kiteworks 帐户和您的本地桌面系统之间复制文件的产品,就可以看到它是多么简单。如果您更习惯或已经可以访问 Box 或 DropBox,只需在使用 kiteworks 的地方为您的服务替换这些项目。 重要提示: 为了简单起见,使用这些说明创建的产品使用默认设置。在创建实时产品时,InterSystems 强烈建议您根据您的环境来调整设置,特别是那些与安全和您自己特定的 InterSystems IRIS 实例有关的设置。例如,下面提到的 Redirect URL(重定向 URL) 使用 http 而不是 https,这在产品中不是一个好的做法。 想试试 InterSystems IRIS 互操作性功能的在线视频演示吗?请查看 Interoperability QuickStart(互操作性快速入门)! 用前须知 要使用这个程序,您需要一个正在运行的 InterSystems IRIS 实例。您对 InterSystems IRIS 的选择包括多种类型的已授权的和免费的评估实例;该实例不需要在您工作的系统中(尽管它们必须相互具有网络访问权限)。有关如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。 您还需要对 Accellion kiteworks 上的帐户进行管理访问;您可以在 https://www.accellion.com/kiteworks/ 上创建一个免费试用帐户。 创建 TLS 配置 使用以下程序创建一个 TLS 配置: 使用 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中为您的实例描述的 URL,在浏览器中打开您的实例的管理门户(Management Portal)。 导航到 TLS 配置页面(System Administration(系统管理) > Security(安全) > SSL/TLS Configurations(SSL/TLS 配置))。 点击 Create New Configuration(创建新的配置) ,并为 Configuration Name(配置名称) 字段输入 MFTTLSConfig。让所有其他字段保持原样,并点击Save(保存)来保存这个新的配置。 在传输服务中注册您的 InterSystems IRIS 实例 接下来,您需要在传输服务本身上为这个 MFT 产品创建一个应用程序(条目)。在一个单独的浏览器窗口或标签中,进入您的 Accellion kiteworks 帐户的管理页面并执行这些步骤。 在管理门户(Management Portal)中,进入 Customs Applications(自定义应用程序)页面,该页面在 Application(应用程序) > Client Management(客户端管理)(适用于 kw2017.02.04 版本)下。 添加一个新条目,并为应用程序指定一个名称,如 ISCFileTransferApp。 请确保 Authorization Code(授权代码)和 Enable Refresh Token(启用刷新令牌)被选中。 在 Redirect URI(重定向 URI) 字段中,输入 URL http://server:port/csp/sys/oauth2/OAuth2.Response.cls,其中服务(server) 和端口(port) 是您的实例的主机标识符和 web 服务器端口。例如,对于一个云实例,URL可能是 http://35.192.42.98:52773/csp/sys/oauth2/OAuth2.Response.cls 本地安装的实例可以在服务(server) 字段中使用 localhost。 这是 kiteworks 用来联系 InterSystems IRIS 实例的 URL。 点击 Add Application(添加应用程序)并记录显示的安全令牌(Client Application ID(客户端应用程序 ID) 和 Client Secret Key(客户端密钥))。稍后在 InterSystems IRIS 上创建 TLS 连接时将使用此信息。 重要提示: 此信息只有在这个时候对您可用,所以您必须立即记录它。如果您在 InterSystems IRIS 产品上创建 TLS 连接时没有此信息,那么您必须再次生成此信息并使用新的值来创建 TLS 连接。 在传输服务中添加目录 现在导航到主 kiteworks(非管理)Folders(文件夹)页面,其中显示您的文件和目录,并创建两个新的顶级目录,一个名为 FilesReceived,用于接收文件,另一个名为 FilesToSend,用于发送文件。 添加可访问 InterSystems IRIS 的目录 现在您应该在实例的主机上创建两个目录,InterSystems IRIS 将在其中访问文件。执行此操作的方法取决于您所使用的实例类型 ,如下所示: 对于由 ICM 部署的实例,可以使用带有 -machine 和 -interactive 选项的 icm exec 命令,在运行实例的容器内打开 bash shell,例如: icm exec -command bash -machine MYIRIS-AM-TEST-0004 -interactive 然后您可以在容器文件系统上创建目录。 对于任何容器化的实例, 无论是授权版还是社区版(Community Edition),使用命令 docker exec -it container_name bash 在容器中打开 bash shell (社区版[Community Edition]容器的名称是 try-iris)。然后在容器文件系统上创建目录。 对于 InterSystems 学习实验室(Learning Labs),使用集成 IDE 中的命令行终端,在 Shared 文件夹中创建新文件夹;您可以在 /home/project/shared 下的管理门户(Management Portal)中浏览到这些。 对于已安装的实例,在本地文件系统上创建目录。 这个文本假设在 Windows 系统上安装的实例有以下目录路径;替换您创建的实际目录的路径。 C:\InterSystems\ToRemote C:\InterSystems\FromRemote 创建 MFT 连接 接下来,您需要通过创建 MFT 连接对象在 Intersystems IRIS 上注册传输服务。要做到这一点,请返回管理门户(Management Portal),进入 Managed File Transfer Connections(托管文件传输连接)页面(System Administration[系统管理] > Security(安全)> Managed File Transfer Connections[托管文件传输连接])。点击 Create Connection(创建连接)。请以以下方式指定字段的值,然后点击 Save(保存): Field Name(字段名称) Value(值) Connection Name(连接名称) KiteSecured File management service(文件管理服务) Kiteworks SSL/TLS configuration(SSL/TLS 配置) MFTTLSConfig Email address(电子邮件地址) 您的 Kiteworks 管理员的电子邮件地址,例如 MFTadmin@yourcompany.com Base URL(基准 URL) 您企业的 kiteworks 的根 URL,例如 https://yourcompany.kiteworks.com/ OAuth 2.0 application name(OAuth 2.0 应用程序名称) ISCFileTransferApp OAuth 2.0 client id(OAuth 2.0 客户端 id) 之前从 kiteworks 检索到的 Client Application ID(客户端应用程序 ID) OAuth 2.0 client secret(OAuth 2.0 客户端机密) 之前从 kiteworks 检索到的 Client Secret Key(客户端密钥) OAuth 2.0 redirect URL(OAuth 2.0 重定向 URL) 留空。一旦您填写了 Host name(主机名) 和 Port(端口),该字段将自动使用前面提供的 Redirect URI(重定向 URI) 的值填充。 Use TLS/SSL(使用 TLS/SSL) (清除复选框) Host name(主机名) 您的实例的主机标识符。 Port(端口) 您的实例的 web 服务器端口。 Prefix(前缀) (留空) 获取访问令牌 Managed File Transfer Connections(托管文件传输连接)页面会再次显示所有可用的连接,包括您刚刚创建的新连接。如果该连接的状态是 Not Authorized,那么: 点击 Get Access Token(获取访问令牌) 以显示来自 kiteworks 的 Oauth 同意页面,该页面识别了您之前注册的应用程序的名称(ISCFileTransferApp)。 点击 Grant Access(授予访问权限)来授权访问。这将重新显示 Connections(连接) 列表,新的 MFT 连接的状态现在被列为 Authorized。 创建命名空间 为了创建产品,您必须有一个启用互操作性的命名空间。如果您已经创建了一个启用互操作性的命名空间,您可以把它用于此产品。要创建一个新的启用互操作性的命名空间,请使用以下程序。(您首次安装 InterSystems IRIS 时创建的命名空间没有启用互操作性。) 在管理门户(Management Portal)主页上,选择 System Administration(系统管理) > Configuration(配置) > System Configuration(系统配置) >Namespaces(命名空间),进入 Namespaces(命名空间)页面。 在 Namespaces(命名空间)页面,选择 Create New Namespace(创建新的命名空间)。这将显示 New Namespace(新的命名空间)页面;按照 System Administration Guide(《系统管理指南》)的“Configuring InterSystems IRIS(《配置 InterSystems IRIS》)”章节中 Create/Modify a Namespace(创建/修改命名空间)中的使用说明,确保选中了 Enable namespace for interoperability productions(启用互操作性产品的命名空间)复选框。 选择靠近页面顶部的 Save(保存),然后在生成的日志末尾选择 Close(关闭)。 创建产品 接下来,您需要切换到新的命名空间来创建新的产品本身。 进入 InterSystems IRIS 管理门户(Management Portal)主页,在顶部横幅的中间部分找到命名空间标识符。点击 Switch(切换)链接以调出 Namespace Chooser(命名空间选择器)。 选择您刚刚创建的命名空间(例如,ForMFT),然后点击 OK(确定)。 现在导航到 Production(产品) 页面(Interoperability(互操作性) > Configure(配置) > Production(产品))。 点击 New(新建)以调出 Production Wizard(产品向导)。 对于 Package(包),从下拉菜单中选择 INFORMATION(信息)。 输入 Production Name(产品名称),如 NewMFTProduction。 将 Production Type(产品类型)保留为 Generic(通用型),然后点击 OK(確定)来创建产品。 有关产品的更多信息,请参见 Introducing Interoperability Productions guide(《介绍互操作性产品指南》)的 "Introduction to InterSystems IRIS Interoperability(《InterSystems IRIS 互操作性介绍》)"一章中的 "Introduction to Productions(产品介绍)"。 创建业务操作和业务服务 留在新创建的产品中,并添加文件传输所需的四种业务操作和服务(每个方向一个业务操作和一个业务服务): 业务主机名 主机类型 用于 SecureToRemoteOffice 业务操作 发送文件到传输服务 GatherLocalFiles 业务服务 发送文件到传输服务 StoreFilesLocally 业务操作 从传输服务中接收文件 ReceiveFromRemoteOffice 业务服务 从传输服务中接收文件 创建和配置:SecureToRemoteOffice SecureToRemoteOffice 是将文件发送到传输服务的业务操作(Operation)。为了将它添加到产品中: 点击 Operations(操作)旁边的加号。 选择 Operation Class(操作类) EnsLib.MFT.Operation.Passthrough。 输入 Operation Name(操作名称) SecureToRemoteOffice。 请确保未选中 Enable Now(立即启用),并保留其他字段。 点击 OK(确定)来添加该操作。 选择该操作,然后从右侧的面板进入 Settings(设置)标签。 在 Basic Settings(基础设置)部分,仅配置以下内容: Field Name(字段名称) Value(值) 说明 Enable(启用) (在方框内打勾) 启用该业务主机 MFT Connection Name(MFT 连接名称) KiteSecured 之前创建的 TLS 配置的名称 Default MFT Folder(默认的 MFT 文件夹) /FilesReceived/ 传输服务的顶级接收目录的名称 Default Filename Specification(默认的文件名规范) %f 用于创建接收文件名称的模板 将所有其他字段保留为默认设置,并点击 Apply(应用)来保存您的更改。 创建和配置:GatherLocalFiles GatherLocalFiles 是用于收集从 InterSystems IRIS 发送的文件的业务服务(Service)。为了将它添加到产品中: 点击 Services(服务)旁边的加号。 选择 Service Class(服务类) EnsLib.File.PassthroughService。 输入 Service Name(服务名称) GatherLocalFiles。 请确保未选中 Enable Now(立即启用),并保留其他字段。 点击 OK(确定) 来添加该服务, 选择该服务,然后从右侧的面板进入 Settings(设置)标签。 在 Basic Settings(基础设置)部分,仅配置以下内容: Field Name(字段名称) Value(值) 说明 Enable(启用) (在方框内打勾) 启用该业务主机 File Path(文件路径) C:\InterSystems\ToRemote\ 您的本地系统中包含要发送的文件的目录(如果不同,请用正确的路径代替)。 File Spec(文件规范) * 要发送的文件名的正则表达式 Target Config Names(目标配置名称) SecureToRemoteOffice 从此业务服务接受输入的业务主机 将所有其他字段保留为默认设置,并点击 Apply(应用)来保存您的更改。 创建和配置:StoreFilesLocally StoreFilesLocally 是在 InterSystems IRIS 中存储接收到的文件的业务操作(Operation)。为了将它添加到产品中: 点击 Operations(操作)旁边的加号。 选择 Operation Class(操作类) EnsLib.File.PassthroughOperation。 输入 Operation Name(操作名称) StoreFilesLocally。 请确保未选中 Enable Now(立即启用),并保留其他字段。 点击 OK(确定)来添加该操作。 选择该操作,然后从右侧的面板进入 Settings(设置)标签。 在 Basic Settings(基础设置)部分,仅配置以下内容: Field Name(字段名称) Value(值) 说明 Enable(启用) (在方框内打勾) 启用该业务主机 File Path(文件路径) C:\InterSystems\FromRemote\ 您的本地系统中存储所接收的文件的目录(如果不同,请用正确的路径代替)。 File Name(文件名称) %f_%Q%!+(_a) 要发送的文件名的语法。为了保证唯一性,InterSystems 建议在文件名中加入日期和时间戳。 将所有其他字段保留为默认设置,并点击 Apply(应用)来保存您的更改。 创建和配置:ReceiveFromRemoteOffice ReceiveFromRemoteOffice 是用于从您的传输服务接收文件的业务服务(Service)。为了将它添加到产品中: 点击 Services(服务)旁边的加号。 选择 Service Class(服务类)EnsLib.MFT.Service.Passthrough。 输入 Service Name(服务名称) ReceiveFromRemoteOffice。 请确保未选中 Enable Now(立即启用),并保留其他字段。 点击 OK(确定)来添加该服务。 选择该服务,然后从右侧的面板进入 Settings(设置)标签。 在 Basic Settings(基础设置)部分,仅配置以下内容: Field Name(字段名称) Value(值) 说明 Enable(启用) (在方框内打勾) 启用该业务主机 MFT Connection Name(MFT 连接名称) KiteSecured 之前创建的 TLS 配置的名称 MFT Source Folders(MFT 源文件夹) /FilesToSend 传输服务的顶级发送目录的名称 Files to Retrieve(检索的文件) (留空) 从远程位置收集的文件名称(类型)的模板 Target Config Names(目标配置名称) StoreFilesLocally 从此业务服务接受输入的业务主机 将所有其他字段保留为默认设置,并点击 Apply(应用)来保存您的更改。 测试产品 现在,您已经创建了产品,是时候尝试一下了!只需将文件拖放到您的本地目录和第三方传输服务的指定文件夹中,就可以看到它们出现在另一个位置。 通过点击顶部的 Start(启动) 按钮来启动产品,然后在 Start Production(启动产品)对话框中点击 OK(确定)。 要验证发送到 kiteworks 的文件: 使用操作系统的目录资源管理器,导航到添加 GatherLocalFiles 业务服务时,您在 FilePath(文件路径)字段中指定的目录(C:\InterSystems\ToRemote\ 或您创建的其他目录)。 在该位置放置一个文件。 进入 kiteworks 并导航到 /FilesToRemote/ 文件夹,(添加 SecureToRemoteOffice 业务操作时,您在 Default MFT Folder(默认的 MFT 文件夹)字段中指定的目录)。 刷新文件夹视图,直到新文件出现。这通常是在几秒钟内,甚至更早。 要验证从 kiteworks 接收的文件: 进入 kiteworks 并导航到 /FilesToCentral 文件夹(添加 ReceiveFromRemoteOffice 业务服务时,您在 DefaultMFTFolder(默认的 MFT 文件夹)字段中指定的目录)。 在该位置放置一个文件。 使用您的 OS 目录资源管理器,导航到添加 StoreFilesLocally 业务操作时,您在 FilePath(文件路径) 字段中指定的目录 (C:\InterSystems\FromRemote\ 或您创建的其他目录)。 刷新目录视图,直到新文件出现。这通常是在几秒钟内,甚至更早。 祝贺您,您刚刚成功地使用 MFT 创建了一个工作的production! 了解有关 MFT 的更多信息 更多信息,请参见: Video Introduction to Managed File Transfer(《托管文件传输视频简介》) Enabling Productions to Use Managed File Transfer Services(《启用Production使用大文件传输》)
文章
姚 鑫 · 七月 13, 2022

第四章 使用嵌入式 Python(一)

# 第四章 使用嵌入式 Python (一) 嵌入式 `Python` 允许使用 `Python` 作为编程 `IRIS` 应用程序的本机选项。 # 预备知识 使用嵌入式 `Python` 所需的 `Python` 版本取决于运行的平台。 在 M`icrosoft Windows` 上,`IRIS` 安装工具包安装正确版本的 `Python`(当前为 `3.9.5`),仅用于嵌入式 `Python`。如果在开发机器上并希望将 `Python` 用于一般用途,建议从 `https://www.python.org/downloads/` 下载并安装相同的版本。 许多基于 UNIX 的操作系统都安装了 `Python`。如果需要安装,请使用包管理器为操作系统推荐的版本,例如: - `macOS`:使用 `Homebrew` 安装 `Python 3.9` `(https://formulae.brew.sh/formula/python@3.9)` - `Ubuntu`: `apt-get install python3` - `Red Hat Enterprise Linux or Oracle Linux: yum install python3` - `SUSE`: `zypper install python3` 如果收到“无法加载 `python`”的错误,这意味着没有安装 `Python`,或者系统上安装了意外版本的 `Python`。使用上述方法之一安装或重新安装。 在基于 `UNIX` 的系统上,可能希望使用 `pip3` 命令安装 `Python` 包。如果尚未安装 `pip3`,请使用系统的包管理器安装包 `python3-pip`。 要防止在运行 `Embedded Python` 时出现 `IRIS_ACCESSDENIED` 错误,请启用 `%Service_Callin`。在管理门户中,` System Administration > Security > Services`,选择 `%Service_CallIn`,然后选中启用服务框。 # 运行嵌入式 Python 本节详细介绍了运行 `Embedded Python` 的几种方法: ## 从Python Shell 可以从终端会话或命令行启动 `Python shell`。 ### 从终端启动 Python Shell 通过调用 `%SYS.Python` 类的 `Shell()` 方法,从 终端会话启动 `Python shell`。这将以交互模式启动 `Python` 解释器。终端会话中的用户和命名空间被传递给 `Python shell`。 通过键入命令 `quit()` 退出 `Python shell`。 以下示例在终端会话中从 `USER` 命名空间启动 `Python shell`。它打印斐波那契数列中的前几个数字,然后使用 `IRIS SYSTEM.OBJ.ShowClasses()` 方法打印当前命名空间中的类列表。 ```java USER>do ##class(%SYS.Python).Shell() Python 3.9.5 (default, Jul 6 2021, 13:03:56) [MSC v.1927 64 bit (AMD64)] on win32 Type quit() or Ctrl-D to exit this shell. >>> a, b = 0, 1 >>> while a < 10: ... print(a, end=' ') ... a, b = b, a+b ... 0 1 1 2 3 5 8 >>> >>> status = iris.cls('%SYSTEM.OBJ').ShowClasses() User.Company User.Person >>> print(status) 1 >>> quit() USER> ``` 方法 `%SYSTEM.OBJ.ShowClasses()` 返回一个 `IRIS %Status` 值。在这种情况下,`1` 表示未检测到错误。 注意:使用 `%SYS.Python` 类的 `Shell()` 方法运行 `Python shell` 时,不需要显式导入 `iris` 模块。继续使用该模块。 ### 从命令行启动 `Python Shell` 使用 `irispython` 命令从命令行启动 `Python shell`。这与从终端启动 `shell` 的工作方式大致相同,但必须传入 `IRIS` 用户名、密码和命名空间。 以下示例从 `Windows` 命令行启动 `Python shell`: ```java C:\InterSystems\IRIS\bin>set IRISUSERNAME = C:\InterSystems\IRIS\bin>set IRISPASSWORD = C:\InterSystems\IRIS\bin>set IRISNAMESPACE = USER C:\InterSystems\IRIS\bin>irispython Python 3.9.5 (default, Jul 6 2021, 13:03:56) [MSC v.1927 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> ``` 在基于 `UNIX` 的系统上,使用 `export` 而不是 `set`。 ```java /InterSystems/IRIS/bin$ export IRISUSERNAME= /InterSystems/IRIS/bin$ export IRISPASSWORD= /InterSystems/IRIS/bin$ export IRISNAMESPACE=USER /InterSystems/IRIS/bin$ ./irispython Python 3.9.5 (default, Jul 22 2021, 23:12:58) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> ``` 注意:如果尝试运行 `import iris` 并看到一条消息说 `IRIS_ACCESSDENIED,请启用 %Service_Callin`。在管理门户中,转至 `System Administration > Security > Services`,选择 `%Service_CallIn`,然后选中启用服务框。
问题
ruihua ruihua · 二月 21, 2022

关于产品原型的设计软件有哪些推荐?如何快速和高效地提升设计能力?

关于产品原型的设计软件有哪些推荐?如何快速和高效地提升设计能力? InterSystems 没有提供产品原型工具,请百度。 vs code 算吗?
公告
Hao Ma · 五月 7, 2021

开发者社区改版, April 2021

Hi Developers! 看看2021年4月的开发者社区新版本有些什么改善, 主要的新特性包括: This is a release of how did we improve the Developer Community in April 2021. The key features: 代码块里的‘拷贝到剪贴板’按钮 帖子翻译页 私信帖子作者 InterSystems官方版本和安全警示 以下是详细介绍。 代码块里的‘拷贝到剪贴板’按钮Copy-to-clipboard button to code blocks 现在你可以轻松的从任何帖子或者回复里拷贝代码 - 把鼠标放在代码块,然后按这个按钮: 帖子翻译页面 在DC网站你可以请求任意帖子的专业翻译,或者您自己翻译,到5中语言中的一种。为了做起来方便,我们改善了翻译页的界面。 1. 从下拉菜单选择您想要的目标语言: 2. 做出您的选择: 生成翻译 - 如果您希望翻译并发帖,按"Translate" 请求翻译 - 如果您希望我们提供专业翻译,按"Request" 私信帖子作者 现在你可以轻松的发送私信给帖子的作者。点击"Direct Message"按钮,私信会自动添加标题。 InterSystems官方版本和安全警示 InterSystems Official tag 会及时向您更新InterSystems官方声明。现在您可以过滤想要收到的声明,从 releases 和 alerts. 希望您喜欢我们的改版 欢迎提交new requests for improvements and bug reports. 请大家保持关注
问题
洪玉 刘 · 二月 8, 2023

pool

运行池的机制和组件运行池的建议配置大小 请参考我们的社区文章:运行池大小配置的解读 | InterSystems Developer Community | FTP|REST API|SOAP|DevOps
公告
Claire Zheng · 七月 4, 2022

2022年全球峰会主题演讲线上观看!

大家好! 一周前,在西雅图举办的InterSystems 2022年全球峰会刚刚结束,但对于那些错过会议现场的人,或者由于种种原因无法亲自参加会议的人(或者只是希望重新回忆并再次聆听会议的人)来说,线上主题演讲刚刚开始! 话不多说,请查收全球峰会上来自社区的问候: 欢迎通过YouTube播放列表观看2022年全球峰会三天所有主题演讲: ➡️ Global Summit 2022 on InterSystems Developers YouTube 明年,来佛罗里达州好莱坞加入我们吧!🤩 详情在这里.
文章
Claire Zheng · 三月 16, 2022

【极客聊吧】如何为用户提供更好的开发体验(上)

谈到开发体验,什么最重要?如何为客户提供更好的开发体验?InterSystems IRIS的最新版本有哪些新特性极大优化了用户的开发体验?这是本月“极客聊吧”聚焦的话题,我们将通过上、下两期视频进行探讨。在本期视频中,InterSystems中国销售工程师吕正之、马浩和WRC产品支持专家杨乐乐针对以下两点进行了分享:(1)开发语言的多样性与对FHIR的支持;(2)探讨开发平台的前瞻性:对Smart Data Fabric架构的支持。
公告
Michael Lei · 三月 25, 2022

新的在线 Kubernetes 练习!

大家好! 对于那些参加了2021年虚拟峰会的体验实验室的人来说,你可能还记得其中一个实验室会议是围绕Kubernetes进行的。我们现在已经将该实验室转换为完全线上按需使用。你可以启动一个小型的虚拟机集群,并按照练习来管理你的Kubernetes集群,将InterSystems IRIS容器部署到其中,并观察它在摧毁一个吊舱时的自我修复性质。 如果你有兴趣,这是一个很好的Kubernetes介绍。请看这里: 用InterSystems IRIS 和 Kubernetes实现高可用
文章
姚 鑫 · 二月 23, 2021

第四十五章 Caché 变量大全 $ZVERSION 变量

# 第四十五章 Caché 变量大全 $ZVERSION 变量 包含一个字符串,描述`do`命令后面的InterSystems IRIS.line的当前版本。 # 大纲 ```java $ZVERSION $ZV ``` # 描述 `$ZVERSION`包含一个字符串,该字符串显示当前运行的InterSystems IRIS®Data Platform实例的版本。 以下示例返回`$ZVERSION`字符串: ```java DHC-APP>WRITE $ZVERSION Cache for Windows (x86-64) 2016.2 (Build 736U) Fri Sep 30 2016 11:46:02 EDT ``` 此字符串包括InterSystems IRIS安装的类型(产品和平台,包括CPU类型)、版本号(2018.1)、该版本中的内部版本号(内部版本号中的`“U”`表示UNICODE以及创建此版本的InterSystems IRIS的日期和时间。`“EST”`是东部标准时间(美国东部的时区),`“EDT”`是东部夏令时 通过调用`GetVersion()`类方法可以返回相同的信息,如下所示: ```java DHC-APP>WRITE $SYSTEM.Version.GetVersion() Cache for Windows (x86-64) 2016.2 (Build 736U) Fri Sep 30 2016 11:46:02 EDT ``` 以通过调用其他`%SYSTEM.Version`方法来获取此版本字符串的组成部分,可以通过调用以下命令列出这些方法: ```java DHC-APP> DO $SYSTEM.Version.Help() 'Do $system.Version.Help(method)' 将显示单个方法的完整描述. 类的方法:%SYSTEM.Version FeatureBits(bit) Return all the feature codes stored in $zversion(0) Format(Format,zv) Formats the version info according to the following format types: GetBuildDate(zv) Returns the date the product was built in $HOROLOG format. GetBuildNumber(zv) Returns the build number for the product. GetBuildOS(zv) Returns the operating system for which the product was built. GetBuildTime(zv) Returns the time of day the product was built in $HOROLOG format. GetCompBuild(component) Returns the build number for the specified component. (Deprecated) ... ``` 通过转到InterSystems IRIS启动器并选择关于...,可以查看版本和内部版本号信息。 不能使用`SET`命令修改`$ZVERSION`特殊变量。尝试这样做会导致``错误。 # 示例 以下示例从版本字符串中提取创建日期,以计算InterSystems IRIS的当前版本有多早(以天为单位)。请注意,此示例特定于Windows平台: ```java /// d ##class(PHA.TEST.SpecialVariables).ZVERSION() ClassMethod ZVERSION() { SET createdate=$PIECE($ZVERSION," ",9,11) WRITE !,"Creation date: ",createdate WRITE !,"Current date: ",$ZDATE($HOROLOG,6) SET nowcount=$PIECE($HOROLOG,",") SET thencount=$ZDATEH(createdate,6) WRITE !,"This version is ",(nowcount-thencount)," days old" } ``` ``` DHC-APP>d ##class(PHA.TEST.SpecialVariables).ZVERSION() Creation date: Sep 30 2016 Current date: Feb 10 2021 This version is 1594 days old ``` 下面的示例通过调用类方法执行相同的操作: ```java /// d ##class(PHA.TEST.SpecialVariables).ZVERSION1() ClassMethod ZVERSION1() { SET createdate=$SYSTEM.Version.GetBuildDate() WRITE !,"Creation date: ",$ZDATE(createdate,6) WRITE !,"Current date: ",$ZDATE($HOROLOG,6) SET nowcount=$PIECE($HOROLOG,",") WRITE !,"This version is ",(nowcount-createdate)," days old" } ``` ```java DHC-APP>d ##class(PHA.TEST.SpecialVariables).ZVERSION1() Creation date: Sep 30 2016 Current date: Feb 10 2021 This version is 1594 days old ```
文章
Lele Yang · 三月 31, 2023

Web Gateway系列(5)配置Web Gateway使用SSL/TLS连接到IRIS

《WebGateway系列(4): 配置HTTPS访问IRIS的Web服务》中介绍了在Web服务器中配置SSL/TLS以实现从客户端浏览器到Web服务器之间的安全连接,从Web服务器到IRIS之间是否也可以通过配置SSL/TLS建立起安全连接呢?尤其是在Web服务器与IRIS没有安装在同一台Server上的情况下,这段连接的安全性也是需要考虑的。答案是肯定的,接下来我们就来介绍下配置Web Gateway使用SSL/TLS连接到IRIS的基本步骤。 1.首先,我们先准备一下所需要的证书。通讯的双方为Web Gateway 和 IRIS Super Server, 双方都需要准备好各自的证书和key。IRIS自带的Public Key Infrastructure(PKI)功能内置了OpenSSL,可以用来生成服务器端及客户端的证书和key。在使用此功能时,IRIS可以同时作为CA Server和CA Client,作为CA Server时可以生成自签名的证书,可以批准CA Client的证书申请并将证书下发给CA Client。 1)配置本地证书颁发机构服务器,生成sever端的证书和key。 2)配置本地证书颁发机构客户端,如下 3)将证书签名请求提交到证书颁发机构服务器 4)进程未决证书签名请求 发放证书。 至此,Client以及Server端证书和key都已准备完成。 以下证书和key将用于Web Gateway, /intersystems/irishealth/mgr/cac.cer /intersystems/irishealth/mgr/cac.key 以下证书和key将用于IRIS Super Server /intersystems/irishealth/dev/CAcerts/cas.cer /intersystems/irishealth/dev/CAcerts/cas.key 当然也可以去申请商用的证书,也可以不使用PKI直接使用OpenSSL自己去生成。 2. 配置SSL/TLS, 名为%SuperServer 3. Enable Superserver SSL/TLS Support, 4. 在Web Server中配置Web Gateway。 本示例中所使用的Web Server为Apache2.4.6,操作系统为Redhat7.9。注意以下Web Gateway管理页面打开端口为默认的80。另外,上面生成好的证书拷贝至了/tmp/下。 对应的CSP.ini中内容如下, [IRISHEALTH] Ip_Address=localhost TCP_Port=1972 Username=CSPSystem Password=]]]c3lz Minimum_Server_Connections=3 Maximum_Session_Connections=6 Connection_Security_Level=10 Product=2 SSLCC_Protocol=8@ SSLCC_Key_Type=2 SSLCC_Cipher_Suites=ALL:!aNULL:!eNULL:!EXP:!SSLv2 Env_Parameters=EV6 SSLCC_Certificate_File=/tmp/cac.cer SSLCC_Certificate_Key_File=/tmp/cac.key SSLCC_CA_Certificate_File=/tmp/cas.cer SSLCC_Private_Key_Password=]]]MTIz SSLCC_Verify_Peer=1 5. Web Gateway中Test Connection, 报错Server Unavailable。 CSP.log报错如下, >>> Time: Wed Mar 29 12:00:36 2023; RT Build: 2101.1776 (linux/apapi:srv=2.4.6/apr=1.4.8/apu=1.5.2/mpm=prefork); Log-Level: -1; Gateway-PID: 4315; Gateway-TID: 139634317305600; Connection-No: 0; Server: IRISHEALTH; InterSystems IRIS-PID: 0; Request-ID: 249b IRISCONNECT : Error Connecting to InterSystems IRIS : Unable to read SSL configuration Cannot read SSL certificate file: /tmp/cac.cer >>> Time: Wed Mar 29 12:00:36 2023; RT Build: 2101.1776 (linux/apapi:srv=2.4.6/apr=1.4.8/apu=1.5.2/mpm=prefork); Log-Level: 0; Gateway-PID: 4315; Gateway-TID: 139634317305600 Information: Terminate Connection Connection closed by Gateway: Connection-No=0:0; Server=IRISHEALTH; InterSystems IRIS PID=0; Context=205; >>> Time: Wed Mar 29 12:00:36 2023; RT Build: 2101.1776 (linux/apapi:srv=2.4.6/apr=1.4.8/apu=1.5.2/mpm=prefork); Log-Level: 0; Gateway-PID: 4315; Gateway-TID: 139634317305600; Connection-No: ; Request-ID: 249b; Session-ID: uoyakptQAD; Remote-Addr: ; Page: GET /csp/bin/RunTime/Module.cxw Diagnostic Failed to connect to 'IRISHEALTH' - Reason: -201 (SSL Configuration error) (No Retry) 解决办法, 将证书和key文件放置在Web Gateway安装路径下之后问题解决。 SSLCC_Certificate_File=/opt/webgateway/cac.cer SSLCC_Certificate_Key_File=/opt/webgateway/cac.key SSLCC_CA_Certificate_File=/opt/webgateway/cas.cer [root@BJSRHELSUP webgateway]# ll total 16 drwxr-xr-x. 2 root root 23 Sep 17 2021 apache drwxr-xr-x. 2 root root 4096 Sep 17 2021 bin -rwxr-xr-x 1 root root 1233 Mar 29 14:48 cac.cer -rwxr-xr-x 1 root root 1834 Mar 29 14:49 cac.key -rwxr-xr-x 1 root root 1164 Mar 29 14:49 cas.cer drwxrwxr-x. 2 apache root 56 Aug 30 2022 conf drwxrwxr-x. 2 apache root 57 Nov 4 2021 logs drwx------. 2 apache root 6 Mar 29 14:41 temp drwxr-xr-x. 2 root root 20 Sep 17 2021 util 6. Web Gateway中再次Test Connection,成功。 参考文档, InterSystems Public Key Infrastructure Configuring the Web Gateway to Connect to InterSystems IRIS Using TLS
文章
姚 鑫 · 九月 1, 2022

第十九章 维护本地数据库(四)

# 第十九章 维护本地数据库(四) # 压缩数据库中的全局变量 管理数据库空间的另一种方法是使用 `^DATABASE` 例程压缩数据库中的全局变量。压缩全局变量将全局数据合并到更少的块中,从而增加数据库中的可用空间量。 在创建和更新全局变量时 `IRIS` 通常以将全局块填充到大约 `70%` 容量的方式分配数据。 (完全按整理顺序增长的全局可能会分配到接近 `90%`。)通常,允许 `IRIS` 自动管理全局块密度就足够了。然而,一些不连续的数据删除模式可能会显着降低平均全局块密度。 **注意:要逐个全局地查看数据库中全局块的当前密度,可以运行完整性检查、并检查每个全局的数据级别输出。** 压缩全局变量时,指定所需的全局块密度(默认为 `90%`),操作会尝试通过合并数据来尽可能接近此值——例如,将分布在三个块中的全局数据重新排列为两个。通常(但并非总是),压缩全局变量会显着增加数据库中可用的可用空间。 (如果指定的目标密度低于数据库当前的全局块密度,则数据库的大小不会增加。) 要压缩数据库中的全局变量,请使用以下过程: 1. 打开终端并更改为 `%SYS` 命名空间。 2. 输入 `do ^DATABASE`,然后从菜单中选择 7) `Compact globals in a database`。 ```java %SYS>do ^DATABASE 1) Create a database 2) Edit a database 3) List databases 4) Delete a database 5) Mount a database 6) Dismount a database 7) Compact globals in a database 8) Show free space for a database 9) Show details for a database 10) Recreate a database 11) Manage database encryption 12) Return unused space for a database 13) Compact free space in a database 14) Defragment a database 15) Show background database tasks ``` 3. 指定要在其上运行操作的数据库的目录。可以通过输入来指定多个数据库?在数据库目录压缩`?`提示,然后输入数字列表。 ```java Database directories to compact? ? 1) c:\intersystems\irishealth\mgr\ 2) c:\intersystems\irishealth\mgr\hscustom\ 3) c:\intersystems\irishealth\mgr\hslib\ 4) c:\intersystems\irishealth\mgr\hssys\ 5) c:\intersystems\irishealth\mgr\irisaudit\ 6) c:\intersystems\irishealth\mgr\irislocaldata\ 7) c:\intersystems\irishealth\mgr\iristemp\ 8) c:\intersystems\irishealth\mgr\user\ (Multiple selections allowed: * for all, or list such as 1,4,7-10) ``` 4. 指示您要压缩所有全局变量,或者输入要压缩的单个全局变量列表。 ```java Database directories to compact? 8 c:\intersystems\irishealth\mgr\user\ Databases Selected ------------------ c:\intersystems\irishealth\mgr\user\ ``` 5. 指定目标平均全局块密度,响应其余提示,并确认。 ```java All Globals? Yes => yes 34 items selected from 34 available globals How full do you want the database blocks? 90 => 50 Display compacted globals? No => n Device: "" Right margin: 80 => 50 Confirm compaction of databases? Yes => yes Database Compaction Aug 20 2022 5:49 PM Database c:\intersystems\irishealth\mgr\user\ Global MB Processed MB Compres sed To Completed ------ ------------ ---------- ------ --------- ^IRIS.Msg 0 0 5:49 PM ^IRIS.MsgNames 0 0 5:49 PM ^IRIS.SASchema 0.008 0.008 5:49 PM ^ISC.Src.Jrn 0.008 0.008 5:49 PM ^ISCMethodWhitelist 0.008 0.008 5:49 PM ^ROUTINE 0.008 0.008 5:49 PM ^oddBIND 0 0 5:49 PM ^oddCOM 0.016 0.016 5:49 PM ^oddDEF 0.016 0.016 5:49 PM ^oddDEP 0.008 0.008 5:49 PM ^oddEXT 0.008 0.008 5:49 PM ^oddEXTR 0 0 5:49 PM ^oddMAP 0 0 5:49 PM ^oddMETA 0 0 5:49 PM ^oddPKG 0 0 5:49 PM ^oddPROC 0 0 5:49 PM ^oddPROJECT 0.008 0.008 5:49 PM ^oddSQL 0 0 5:49 PM ^oddStudioDocument 0 0 5:49 PM ^oddStudioMenu 0 0 5:49 PM ^oddTSQL 0 0 5:49 PM ^oddXML 0 0 5:49 PM ^rBACKUP 0 0 5:49 PM ^rINC 0 0 5:49 PM ^rINCSAVE 0 0 5:49 PM ^rINDEX 0.008 0.008 5:49 PM ^rINDEXCLASS 0.008 0.008 5:49 PM ^rINDEXEXT 0.10 0.10 5:49 PM ^rINDEXSQL 0.008 0.008 5:49 PM ^rMAC 0 0 5:49 PM ^rMACSAVE 0 0 5:49 PM ^rMAP 0.008 0.008 5:49 PM ^rOBJ 0.008 0.008 5:49 PM ^rPYC 0.008 0.008 5:49 PM ``` **注意:紧凑的全局操作旨在与正常的数据库活动同时运行。但是,该操作确实会消耗一些系统资源,并且如果系统处于极高负载下,则可能无法完成。出于这些原因, 建议在非高峰时间运行此和其他数据库重组操作(包括压缩数据库和对全局进行碎片整理),并且一次只在系统上运行一个此类操作**。 **全局压缩可能涉及临时增加正在压缩的数据库大小。如果这导致数据库达到其配置的最大大小,或者由于存储卷上的可用空间不足而无法进行扩展,则取消操作。**