搜索​​​​

清除过滤器
问题
Liang Jianhui · 六月 13, 2022

HealthShare Patient Index

在找 HealthShare Patient Index 的相关视频和资料,求分享,谢谢 https://learning.intersystems.com/course/view.php?id=632, 更多视频欢迎在learning.intersystems.com 上搜索即可。谢谢! Hi @Liang.Jianhui , 可以参考这个页面的内容:https://www.intersystems.cn/interoperability-platform/patient-index 社区里也有很多:https://community.intersystems.com/smartsearch?search=patient+index,需要哪片文章可以告诉我们,我们可以帮忙翻译。 Only members of audience '1.0 HealthShare Content Access' can self-enrol. 这种情况是我没有权限吗?需要怎么做才能有权限? 你好!您是在点击这个链接:https://learning.intersystems.com/course/view.php?id=632时出现的问题吗?你需要先试着注册一下才能获取权限。如果还是不行,可以告诉我需要查看的资料,我看怎么分享您。谢谢! 你好,我是点击链接之后进入的,也进行了注册登录。 注册登录之后,仍然没有权限。Only members of audience '1.0 HealthShare Content Access' can self-enrol. 还是出现这个提示。我想了解HSPI 在interSystems系统中是如何应用的,以及worklist是怎么生成链接的。谢谢。 您提到的这个部分是需要WRC权限才可以观看的,WRC是我们的全球响应中心服务账户,您可以参考如下信息获取WRC支持: InterSystems全球响应中心(WRC)联络信息 电话: +86 400-601-9890 邮件: support@intersystems.com 网站: https://wrc.intersystems.cn/ https://wrc.intersystems.com
公告
Michael Lei · 二月 21, 2022

欢迎大家为中国参赛者Wu Fatian 踊跃投票!

投票三部曲: 1. 注册用户或登陆; 2. 成为社区活跃者获取投票资格 3. 投票 good! 欢迎大家把对我们的需求发表在讨论区: intersystems-产品学习使用问题经验分享讨论区--https://cn.community.intersystems.com/post/intersystems-%E4%BA%A7%E5%93%81%E5%AD%A6%E4%B9%A0%E4%BD%BF%E7%94%A8%E9%97%AE%E9%A2%98%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB%E8%AE%A8%E8%AE%BA%E5%8C%BA 这个绿色的 vote的 button 并不工作,试试这个链接 https://openexchange.intersystems.com/contest/21 it is a screenshot.... 点击查看 最新投票规则,在英文原帖的评论区我们的工作人员会每天更新排名,欢迎关注:D 暂时群众投票排名第一,@Fatian Wu加油! Expert Nomination, Top 3 appmsw-sql2xlsx by @Sergey Mikhailenko iris-python-dashboards by @Evgeniy Potapov DIMSE Iris Dicom Fhir Service by @Ron Sweeney ➡️ Voting is here. Community Nomination, Top 3 IRIS-Database-and-Machine-Learning-Based-Approaches-for-Prediction-of-Spontaneous-Intracerebral-Hemo by @Fatian Wu iris-python-dashboards by @Evgeniy Potapov appmsw-sql2xlsx by @Sergey Mikhailenko ➡️ Voting is here. Experts, we are waiting for your votes! 🔥 Participants, improve & promote your solutions! 武同学仍然排名第三,加油! Expert Nomination, Top 3 django-iris by @Dmitry Maslennikov appmsw-sql2xlsx by @Sergey Mikhailenko iris-python-dashboards by @evgeniy Potapov ➡️ Voting is here. Community Nomination, Top 3 django-iris by @Dmitry Maslenniko appmsw-sql2xlsx by @Sergey Mikhailenko IRIS-Database-and-Machine-Learning-Based-Approaches-for-Prediction-of-Spontaneous-Intracerebral-Hemo by @Fatian Wu
问题
Liang Jianhui · 八月 24, 2022

log文件内容存储到DB中

现在有一个需求。想将intersystems系统产生的alerts.log文件的内容保存到一个表中。有什么工具或者API 能自动格式化log文件到DB吗,还是需要手动解析log文件然后在存储到DB中。 这是两件事:1. 把log里的记录结构化。 2. 保存到DB。 关于1,如果你用的是最新的iris版本, 可以直接拿到结构化的log, 看这个链接: https://docs.intersystems.com/iris20221/csp/docbook/Doc.View.cls?KEY=ALOG 如果是老版本没有结构化,您得自己去做文本处理。好在这个log非常简单。比如下面两行: 08/30/22-11:03:57:775 (6964) 2 [Utility.Event] Previous system shutdown was abnormal, system forced down or crashed. Fast shutdown complete.08/30/22-11:03:59:541 (7716) 2 [Utility.Event] Preserving journal files c:\intersystems\hcdemo\mgr\journal\20220824.002 and later for journal recovery and transaction rollback如果您要只是把日期时间,警告类型,级别,内容分开,它基本就是分开的,用的是空格。 如果您想把内容页结构化,这就花功夫了, 我上面的链接里的工具也不做这个事。 2. 存入DB您得自己解决,IRIS提供文本,API, 没有SQL查询,好在有一大堆监控工具都干这事,就是监控文本文件写入数据库。
问题
jingwei lu · 三月 16, 2022

如何获得WRC网站登录权限

因为最近再研究Cache,发现Cache安装程序官方上找不到了,又从一个帖子上看到Cache安装程序在WRC上面有,话说这个WRC账号是不是类似于Oracle的MOS账号? 我从官网机器人那得到指示给support@intersystems.com发邮件,可能是因为塑料英语,石沉大海了。另外我想问问这个账号是不是只对那些买了产品或服务的客户单位公开? 请哪位大神为我指点迷津,谢谢 是的,WRC主要面向我们在服务有效期内的客户,请把您的单位名称写在邮件里,邮件也可以支持中文的,没有问题。谢谢! 既然是再研究,何不试试我们最新的InterSystems IRIS。如果以前研究过Caché 会发现,IRIS 还是同样的架构、同样的开发语言、同样的global存储,只是人机交互更流畅、性能更快,增加更多扩展,机器学习、python、丰富的外部BI工具适配、容器化部署、API管理等等等等,都等着你探索。 要想体验就在社区主页左边,选择下载InterSystems IRIS。 WRC可以说是我们对客户的支持中心,所以只面对我们的客户开放注册。
文章
Yubo Mao · 二月 3, 2023

队列监控组件

Intersystems IRIS平台 队列监控组件 概述 随着医院信息化建设的逐步完善,医院业务接口越来越多,业务接口数据处理可能会由于多种因素(网络、消费方系统等)影响下,出现消息堆积过多甚至造成接口卡顿的情况,影响院内正常业务开展,因此对于业务接口组件队列的的监控愈发重要。 当前Intersystems IRIS平台内置的队列监控界面仅展示接口组件实时队列信息,对于对于医院实际应用场景所需要的队列数据信息提供较为局限。队列监控组件程序是基于Intersystems IRIS平台开发,可以对所有接口组件进行统一监控,并展示组件24h内组件队列信息,也可通过设置时间段查询组件历史队列数据,更好满足当前的院内应用需求。 关键应用:IRIS、Analytics 应用介绍 功能简介 通过配置该程序组件,对Intersystems IRIS平台中production运行组件的消息队列实现实时统一监控功能,并展示当前业务接口组件24h队列趋势情况,也可以通过指定时间范围展示历史队列趋势情况,可通过组件历史队列数据分析当前业务接口组件配置是否合理、是否需优化;通过历史队列数据趋势分析,对队列数量产生频次;对于由队列问题引起的事故可通过趋势图快速定位队列起始时间及业务事件ID,减少事故排查时间,极大地提高排查效率。 未来应用场景 智能优化组件运行池配置 队列监控告警 队列top5突出展示 组件队列问题频次统计 程序部署 在安装好的实例上新建命名空间和production,并导入此应用程序代码 为命名空间新建抽取队列信息的定时任务 访问路径查看队列信息 ****为命名空间默认应用程序名称 http://ip:port/****/Demo.QueueMonitoringPage.cls 应用使用 前提条件:由于程序是用来监控队列的,命名空间需要有已启用的production。如果没有,可以打开程序代码内置的production(Demo.Test.Production.TestProduction)并启用它。 将应用程序代码导入已有的命名空间内,通过Demo.QueueMonitor.Task.QueryQueue类新建定时任务,并设置每10分钟运行一次抽取队列信息。 访问url(http://ip:port/****/Demo.QueueMonitoringPage.cls )就可以看到队列趋势的统计情况 如果当前prodution没有队列信息,可通过运行代码 set ^QueueData=1,查看演示数据。不要忘了查看后执行set ^QueueData=0。使程序监控实时数据。
文章
姚 鑫 · 九月 28, 2022

第四十六章 功能跟踪器收集使用统计信息

[toc] # 第四十六章 功能跟踪器收集使用统计信息 作为 不断努力改进其产品以满足客户需求的一部分, 在 `IRIS®` 数据平台中包含一个名为 `Feature Tracker` 的软件实用程序,该软件实用程序收集软件模块使用情况的统计数据。本主题介绍特征跟踪器。 # 为什么 InterSystems 收集统计数据 `Feature Tracker` 收集的统计数据记录软件模块是否存在并在给定的 `IRIS` 实例中使用。 `Feature Tracker` 每周通过 `https` 将此信息发送给 `InterSystems`。这些统计数据有助于 `InterSystems` 规划开发和支持。 收集的信息不包括任何应用程序数据。 # 日志在哪里 如果 `IRIS` 成功发送数据,它会更新 `\mgr` 目录中的 `FeatureTracker.log` 文件。此文件包含已发送数据的 `JSON` 格式副本。每个条目具有以下形式: ``` "FT.":, ``` 如果 `IRIS` 无法发送数据,它会再尝试几次。如果仍然不成功,它将停止尝试并在下一个定期安排的时间再次尝试。 `IRIS` 使用成功和不成功的尝试更新消息日志文件 `(messages.log)`。显示成功发送的条目具有以下形式: ```java mm/dd/yy-hh:mm:ss 0 %SYS.Task.FeatureTracker transferred data to ats.intersystems.com ``` 显示尝试发送失败的条目具有以下形式: ```java mm/dd/yy-hh:mm:ss 1 %SYS.Task.FeatureTracker failed to transfer data ``` 传输的数据包括编码的许可证密钥和主机名,以及实例 `GUID`。 # 收集了哪些统计数据 `Feature Tracker` 记录是否启用了以下软件功能: - BitTrakCare - BI User (Runtime) and BI Development - C-Type License - ExtremeNoUserLimit - Healthshare, Healthshare Foundation - IPNeutral - Web License `Feature Tracker` 还记录以下信息: - 数据库(`DB`)加密:是否启用,以及快照时可用的已挂载加密数据库的数量 - 镜像:此实例是否连接到镜像,故障转移成员的数量,异步成员的数量和类型,以及每个异步成员所属的镜像集的数量 - 系统:授权、 `IRIS` 版本、操作系统、主机名、实例名称、实例 `ID` 和订单 `ID` # 如何停用功能跟踪器 默认情况下启用功能跟踪器。可以停用它以防止它向 `InterSystems` 发送数据(尽管它仍会收集数据)。要停用功能跟踪器,请使用任务管理器,如下所示: 1. 在管理门户中,选择系统操作 > 任务管理器 > 任务计划。 2. 找到 `Feature Tracker` 行并选择 `Feature Tracker`。 3. 在显示的任务详细信息页面上,选择暂停。 4. 回答问题想在任务应该运行时重新安排任务吗?作为适当的。 5. 选择立即执行此操作以暂停任务。 如果升级 `IRIS`,升级会保留 `Feature Tracker` 的状态。如果任务是在升级之前安排的,它会保持预定状态,如果任务被挂起,它会保持挂起状态。
文章
Jingwei Wang · 八月 25, 2021

Object Script 基础知识(二)

Object Script(二) 特殊符号 ObjectScript没有定义任何保留字:你可以自由地使用任何字作为标识符(如变量名)。为了达到这个目的,ObjectScript使用了一组内置的命令以及特殊的字符(比如函数名的"$"前缀),以便将标识符与其他语言元素区分开来。 示例 含义 abc^def 调用routine中的一个标签: def是一个routine,abc是该routine中的一个标签。 i%abcdef i%<PropertyName> 用于从实例变量自身的Get或Set访问器方法中引用该变量,或者绕过其Get或Set方法 abc->def 这种语法只在InterSystems的SQL语句中可以使用。它指定了一个隐含的左外连接。abc是你正在查询的类中的一个对象值字段,def是子类中的一个字段。 abc?def 一个问号是模式匹配操作符,测试变量abc中的值是否与def中指定的模式相匹配 abc[def 左括号([)是二进制包含运算符。这个表达式检测字符串"abc "是否包含字符串 "def" abc]def 右括号(])是二进制跟随运算符。这个表达式检测字符串"abc "是否在字符串 "def "之后,以ASCII的顺序排列。 abc]]def 两个右括号(]])是二进制排序运算符。这个表达式检测字符串 "abc "是否排在字符串 "def "之后,以数字下标排序。 .. 相对点语法,两个句号组成,是一个类成员内部对另一个类成员的引用的开始。或者用于访问当前对象的一个属性或调用一个方法 ##Class() 用于调用一个类的方法,将一个对象引用转换为另一个类来调用一个方法,或者用于访问一个类参数的值。 ##super 用于从子类方法中调用父类方法 $abc 系统变量或自定义变量 $abc() 系统函数或者自定义函数,括号中可用逗号分隔参数 $abc.def.ghi(xxx) $abc是$SYSTEM,def是%SYSTEM包中的类的名称,ghi是该类中一个方法的名称,xxx是该方法的一个可选的逗号分隔的参数列表 $SYSTEM是%SYSTEM包的别名,用来提供对该包中类的方法的访问 $$abc abc是一个宏,美元符号不是其名称的一部分 $$abc() 是一个定义在包含此引用的routine或函数中的子程序。这种语法调用子程序abc并获得其返回值 %abc InterSystems IRIS系统类中的大多数包、类和方法都以百分号开头。也有可能是InterSystems IRIS设置的一个局部变量,Routine或者嵌入SQL变量 %%abc 有关于InterSystems SQL,是伪字段的关键字 ^abc 一个函数或者一个执行程序(Roution),也可表示为全局参数 ^$abc 结构化的系统变量 ^||abc 进程私有的全局参数,是一个用于临时存储大数据值的机制 ^[XXX]%abc 对另一个名字空间中的全局或例程的引用 常用系统变量及函数: 变量/函数/类 含义 $SYSTEM 提供系统信息 $HOROLOG 当前进程的日期和时间 $zv 系统版本信息 $ZDH() 用于检验日期格式,并将可读的日期格式转换成InterSystems IRIS 数据库可读格式 $zd() 用于检验日期格式,并将InterSystems IRIS数据库日期格式转换成可读的日期格式。 示例: 字符串类型与日期类型相互转换:$ZDH/$ZD w $ZDH("2017-03-13",3) w $zd(0) $Random(range) 返回符合范围内的随机正整数 $zlog() Log指数计算 $zsqr() 平方根计算 $Case 根据第一个参数,可以返回相关的值,类似于Switch case。或者返回一个procedure或者一个routine 示例: s x =2 w $CASE(x,1:"single",2:"double",3:"triple",:"input error") 数组 本地数组:生命周期在当前进程 SET a(1) = "A local variable array" SET a(1,1,1) = "Another local variable array" 全局数组:持久化数组,直接存于磁盘 SET ^||a(1) = "A process-private global array" SET ^a(1) = "A global array"
文章
Michael Lei · 一月 25, 2022

翻译文章-数据迁移工具 - 第一部分: 从 Postgres 到 IRIS

有时需要将数据和数据模型Schema从Postgres转移或迁移到IRIS。目前有几个选择可以做到这一点,但最流行的两个选项是使用DBeaver(https://openexchange.intersystems.com/package/DBeaver)或SQLGateway。第一种方法将在本文中演示,第二种方法在Robert Cemper的一篇优秀文章中介绍,使用 SQLgateway 迁移数据库(https://community.intersystems.com/post/db-migration-using-sqlgateway),请看本文中如何使用DBeaver执行这种迁移。 为迁移过程获取样本数据 在Github上可以下载一个docker compose项目来构建和运行两个数据库。: 源数据库: 带有样本数据库的PostgreSQL 数据库 Docker 实例 . 目标数据库: 带有Schema就绪接受源数据库的InterSystems IRIS 数据平台Docker 实例. 要获得样本并运行它,请遵循以下步骤: 到 https://openexchange.intersystems.com/package/migration-pg-iris-dataset 下载并到 git repository. 克隆项目: git clone https://github.com/yurimarx/migration-pg-iris.git. 到项目目录 migration-pg-iris. 执行build: docker-compose build. 运行containers: docker-compose up -d. 实例ok后在你的Docker桌面看到: 关于要迁移的数据 要迁移的数据如下所示: 从 PostgreSQL 到 IRIS 的迁移过程将包括: 8 个表. 1,000,000 行销售数据. 250,000 行用户数据. 300 行产品. 500 行店铺. 100 行国家. 30 行城市. 5 行状态名status_name. 迁移目标为 InterSystems IRIS 中USER 命名空间namespace内的 dc_test schema . 从 PostgreSQL 到 IRIS 的开源迁移工具: DBeaver DBeaver是一个数据库工具,可以连接、创建、下拉、选择、更新和删除市场上主要数据库产品的数据对象。下载地址:https://openexchange.intersystems.com/package/DBeaver。现在按照安装说明,将这个神奇的产品安装在你的笔记本电脑或桌面。DBeaver可以用来在数据库连接之间迁移数据,即使它们来自不同的制造商和版本。 使用DBeaver连接源和目标数据库 现在我们将设置要迁移的数据库连接。在DBeaver里设置PostgreSQL连接: 1. DBeaver 到 文件 File >新建 New. 2. 选择数据库连接并点击下一步: 3. 选择SQL tab > PostgreSQL 点击下一步: 4. 如图填写PostgreSQL 连接项目 : Host: localhost Port: 5438 Database: postgres Username: postgres Password: postgres Click Finish. 在 DBeaver设置IRIS连接: 1. DBeaver 到 文件 File >新建 New.2. 选择数据库连接并点击下一步: 3. 选择 SQL tab > InterSystems IRIS 并点击下一步: 4. 如果 DBeaver 要求下载InterSystems IRIS 驱动, 点击 Yes 或 Ok.5. 如图填写InterSystems IRIS 连接项目: Host: localhost Database/Schema: user Username: _SYSTEM Password: SYS Click Text Connection and Finish. 6. postgres和用户的连接可以在数据库导航器中找到: 开始迁移 执行以下步骤:1. 打开 postgres connection > public 选择所有表。在选择的表上点击鼠标右键选择导出数据 Export Data, 如图: 2. 如图选择数据库并点击下一步 3. 点击选择按钮: 4. 选择 dc_test 并点击ok. 5. 现在有必要改变目标数据库的一些数据类型配置,因为IRIS和PostgreSQL对整数和小数值使用不同的数据类型。.6. 展开 public.country 表, 选择第一项 (country_id) 并点击 Columns… 7. 把目标类型从 int4 改成 integer 并点击Ok. 8. 对表重复以上过程 a. public.product.b. public.status_name.c. public.users.d. public.city (把city_id 和 country_id类型改成 integer ).e. public.store (把 store_id 和 city_id 类型改成 integer ).f. public.sale (把product_id, user_id 和 store_id类型改成integer,把amount改成 double ) g. public.order_status (把status_name_id 改成 integer). 9. 现在目标数据类型改好了, 点击下一步. 10. 设置获取 Fetch 大小为 1,000,000 并点击下一步. 11. 在Data load数据加载设置中接受默认值并点击下一步. 12. 在确认Confirm页面点击 Proceed. 13. 现在看到在数据库导航器看到在 InterSystems IRIS dc_test schema 下的所有 PostgreSQL表. 对于表来说,迁移过程非常简单,但对于视图、函数、触发器和存储过程,你需要使用ObjectScript或SQL重写SQL源代码。 迁移到 IRIS能得到什么? 总结一下: API 管理. 可视化报表Visual Reports (IRIS Reports). 自动化机器学习AutoML (IntegratedML). 多语言应用、数据开发环境(Python, Java, .NET, JavaScript). 服务总线ESB. BI/Analytics. 自然语言处理NLP. 微服务开发Microservices development. 多模型数据库(SQL, JSON, Analytical Cubes, Object Oriented). 数据分片Sharding. 总体来说, 迁移到 IRIS 你得到的是一个数据平台, 其他的你只有一个数据库。
文章
姚 鑫 · 三月 18, 2021

第十二章 使用嵌入式SQL(二)

# 第十二章 使用嵌入式SQL(二) # 嵌入式SQL代码 ## 简单的SQL语句 可以将简单的SQL语句(单个嵌入式SQL语句)用于各种操作,包括: - `INSERT`,`UPDATE`,`INSERT OR UPDATE`和`DELETE`语句。 - `DDL语句。 - `GRANT`和`REVOKE`语句。 - 只返回一行的`SELECT`语句(或者如果只对返回的第一行感兴趣)。 简单的SQL语句也被称为非基于游标的SQL语句。本章稍后将介绍基于游标的嵌入式SQL。 例如,以下语句查找ID为43的(唯一的)患者的姓名: ```sql &sql(SELECT Name INTO :name FROM Patient WHERE %ID = 43) ``` 如果对可以返回多行的查询使用简单语句,则只返回第一行: ```sql &sql(SELECT Name INTO :name FROM Patient WHERE Age = 43) ``` 根据查询的不同,不能保证哪一行将首先被返回。此外,如果一个查询包含一个`INTO`语句,并且该表不包含任何数据(`SQLCODE=100)`,执行该查询将导致未定义(空)的输出主机变量。因此,在访问输出主机变量之前,所有简单嵌入式SQL语句都应该测试`SQLCODE=0`。 ## 架构名称解析 表名,视图名或存储过程名是合格的(指定架构名称)或不合格的(不指定架构名称)。如果名称未指定架构名称,则InterSystems IRIS会按以下方式解析架构名称: - 数据定义:InterSystems IRIS使用系统范围内的默认架构来解析不合格的名称。如果默认模式不存在,则InterSystems IRIS将创建模式和相应的类包。所有数据定义语句都使用系统范围内的默认架构。数据定义语句忽略`#Import`和`#SQLCompile Path`宏预处理程序指令。 - 数据管理:InterSystems IRIS对包含嵌入式SQL语句的类或例程使用`#SQLCompile`路径和/或`#Import`宏预处理程序指令指定的架构搜索路径。 `#Import`和`#SQLCompile Path`指令是具有不同功能的可能模式名称的相互独立列表。二者之一或两者均可用于为不合格的表,视图或存储过程名称提供架构名称。如果未指定架构搜索路径,则InterSystems IRIS将使用系统范围的默认架构名称。 ## 文字值 嵌入式SQL查询可能包含文字值(字符串,数字或日期)。字符串应用单引号(`'`)引起来。 (在InterSystems SQL中,双引号指定分隔的标识符): ```java /// d ##class(PHA.TEST.SQL).EmbedSQL4() ClassMethod EmbedSQL4() { &sql(SELECT 'Employee (' || Name || ')' INTO :name FROM Sample.Employee) IF SQLCODEd ##class(PHA.TEST.SQL).EmbedSQL4() Employee (Adams,Susan E.) ``` 数值可以直接使用。在InterSystems IRIS将这些文字值与字段值进行比较之前,先对文字数字和时间戳值进行`“lightly normalized”`,如以下示例所示,其中`+0050.000`被格式化为`50`: ```java /// d ##class(PHA.TEST.SQL).EmbedSQL5() ClassMethod EmbedSQL5() { &sql(SELECT Name,Age INTO :name,:age FROM Sample.Person WHERE Age = +0050.000) IF SQLCODEd ##class(PHA.TEST.SQL).EmbedSQL5() Russell,Quentin V. age=50 ``` 可以指定算术、函数和特殊变量表达式: ```java /// d ##class(PHA.TEST.SQL).EmbedSQL6() ClassMethod EmbedSQL6() { &sql(DECLARE C3 CURSOR FOR SELECT Name, Age - 65, $HOROLOG INTO :name,:retire,:today FROM Sample.Person WHERE Age > 60 ORDER BY Age, Name) &sql(OPEN C3) QUIT:(SQLCODE'=0) &sql(FETCH C3) WHILE (SQLCODE = 0) { WRITE $ZDATE(today)," ",name," has ",retire," eligibility years",! &sql(FETCH C3) } &sql(CLOSE C3) } ``` ```java DHC-APP>d ##class(PHA.TEST.SQL).EmbedSQL6() 03/13/2021 Moon,Rhonda T. has -4 eligibility years 03/13/2021 Olsen,Ashley G. has -4 eligibility years 03/13/2021 Quixote,Terry J. has -4 eligibility years 03/13/2021 Yoders,Liza U. has -4 eligibility years 03/13/2021 Gore,Alfred M. has -3 eligibility years 03/13/2021 Houseman,Alice R. has -2 eligibility years 03/13/2021 Nichols,Heloisa M. has -2 eligibility years 03/13/2021 Houseman,Martin D. has 0 eligibility years 03/13/2021 LaRocca,David X. has 0 eligibility years 03/13/2021 Ng,Liza Z. has 0 eligibility years 03/13/2021 Smith,Elvis Y. has 0 eligibility years ``` 在嵌入式SQL中,字符串文字中不允许使用以`##`开头的一些字符序列,而必须使`##lit`指定。这些字符序列是`##;`, `##beginlit`, `##expression(`, `##function(`, `##quote(`, `##stripq(`, and `##unique(`。例如,以下示例失败: ```java ClassMethod EmbedSQL7() { WRITE "Embedded SQL test",! &sql(SELECT 'the sequence ##unique( is restricted' INTO :x) WRITE x } ``` 以下解决方法成功: ```java /// d ##class(PHA.TEST.SQL).EmbedSQL7() ClassMethod EmbedSQL7() { WRITE "Embedded SQL test",! &sql(SELECT 'the sequence ##lit(##unique() is restricted' INTO :x) WRITE x } ``` ```java DHC-APP>d ##class(PHA.TEST.SQL).EmbedSQL7() Embedded SQL test the sequence ##unique( is restricted ``` ## 数据格式 在嵌入式SQL中,数据值处于`“逻辑模式”`。也就是说,值采用SQL查询处理器使用的本机格式。对于未定义`LogicalToODBC`或`LogicalToDisplay`转换的字符串,整数和其他数据类型,这无效。数据格式会影响`%List`数据以及`%Date`和`%Time`数据类型。 `%List`数据类型在逻辑模式下显示为以非打印列表编码字符开头的元素值。 `WRITE`命令将这些值显示为连接的元素。例如,`Sample.Person`的`FavoriteColors`字段以`%List`数据类型存储数据,例如:`$LISTBUILD('Red','Black')`。在嵌入式SQL中,这在逻辑模式下显示为`RedBlack`,长度为12个字符。在“显示”模式下,它显示为`“Red,Black”`;在ODBC模式下,它显示为`Red,Black`。在下面的示例中显示: ```java /// d ##class(PHA.TEST.SQL).EmbedSQL8() ClassMethod EmbedSQL8() { &sql(DECLARE C4 CURSOR FOR SELECT TOP 10 FavoriteColors INTO :colors FROM Sample.Person WHERE FavoriteColors IS NOT NULL) &sql(OPEN C4) QUIT:(SQLCODE'=0) &sql(FETCH C4) WHILE (SQLCODE = 0) { WRITE $LENGTH(colors),": ",colors,! &sql(FETCH C4) } &sql(CLOSE C4) } ``` ```java DHC-APP>d ##class(PHA.TEST.SQL).EmbedSQL8() 21: ReOrangYellow 28: ReOrangYellowGreen 35: ReOrangYellowGreenGreen 36: ReOrangYellowGreeYellow 7: White 7: Black 14: GreenWhite 8:Purple 8:Yellow 10: RedRed ``` InterSystems IRIS提供的`%Date`和`%Time`数据类型使用InterSystems IRIS内部日期表示形式(`$HOROLOG`格式)作为其逻辑格式。 `%Date`数据类型在逻辑模式下返回INTEGER数据类型值;在“显示”模式下为`VARCHAR`数据类型值,在`“ODBC”`模式下为`DATE`数据类型值。 `%TimeStamp`数据类型的逻辑,显示和`ODBC`格式使用`ODBC日期-时间`格式(`YYYY-MM-DD HH:MM:SS`)。 例如,考虑以下类定义: ```java Class MyApp.Patient Extends %Persistent { /// Patient name Property Name As %String(MAXLEN = 50); /// Date of birth Property DOB As %Date; /// Date and time of last visit Property LastVisit As %TimeStamp; } ``` 针对该表的简单嵌入式SQL查询将以逻辑模式返回值。例如,考虑以下查询: ```java &sql(SELECT Name, DOB, LastVisit INTO :name, :dob, :visit FROM Patient WHERE %ID = :id) ``` 该查询将三个属性的逻辑值返回到主机变量名称,`dob`和`visit`中: 主机变量| 值 ---|--- name| "Weiss,Blanche" dob| 44051 visit| "2001-03-15 11:11:00" 请注意,`dob`是`$HOROLOG`格式。可以使用`$ZDATETIME`函数将其转换为显示格式: ```java SET dob = 44051 WRITE $ZDT(dob,3),! ``` 与`WHERE`子句中的true相同的考虑因素。例如,要查找具有给定生日的患者,必须在WHERE子句中使用逻辑值: ```java &sql(SELECT Name INTO :name FROM Patient WHERE DOB = 43023) ``` 或者,使用主机变量: ```java SET dob = $ZDH("01/02/1999",1) &sql(SELECT Name INTO :name FROM Patient WHERE DOB = :dob) ``` 在这种情况下,我们使用`$ZDATEH`函数将显示格式日期转换为其等效的`$HOROLOG`逻辑值。 ## 权限检查 嵌入式SQL不执行SQL特权检查。可以访问所有表,视图和列,并执行任何操作,而不管特权分配如何。假定使用嵌入式SQL的应用程序将在使用嵌入式SQL语句之前检查特权。 可以在嵌入式SQL中使用InterSystems SQL `%CHECKPRIV`语句来确定当前权限。
文章
Louis Lu · 一月 15, 2021

什么是核心文件,它们什么时候有用

# 什么是核心文件? 它们什么时候有用? 本文档中的信息以 2019 年 6 月 30 日发布的 InterSystems 产品最新版本为准。 此更新涵盖了截至 2020 年 4 月 14 日发现的错误,但不包括 InterSystems 产品新版本中的更改。不过,现有产品的细节不会经常变化。本文的 PDF 版本可以从 WRC 获取 目录 核心文件基础知识 SuSE Linux Windows AIX Ubuntu Linux 测试 Docker macOS (Darwin) 健全性测试 HP–UX OpenVMS 传输 RedHat Linux Solaris 索引 核心文件基础知识 Caché、Ensemble、HealthShare 和 InterSystems IRIS 数据平台非常可靠。 我们的绝大多数客户从未经历过任何种类的故障。 但是,在极少数情况下,进程发生过故障,并因此生成了核心文件(在 Windows 和 OpenVMS 上称为进程转储文件process dump file)。 核心文件记录了进程发生故障时的进程状态,包括进程寄存器和内存(是否包括共享内存的信息取决于配置)。 核心文件实质上是发生故障的进程在试图执行错误操作时的瞬时画面。 我们可以根据该画面向回推断,以找出导致故障的最初错误。 随着我们回溯过去的时间越久远,进程的信息逐渐变得模糊。 核心越详细,我们可以回溯的时间就越远,直到画面变得过于模糊。 借助正确收集的核心文件和相关信息,我们通常可以解决问题,或者以其他方式提取故障进程的有价值信息。 对于人为生成的核心文件,通常我们只能说(在经过数小时分析后):“我看到这个进程发生了什么,有人手动生成了进程核心。” 手动生成核心文件可以包含更多正在运行进程的信息,它可用作辅助信息源,以补充无法从系统默认核心文件提供的信息细节。 InterSystems 产品可以配置为在发生任何进程故障时都记录完整核心。 这对日常操作的性能没有任何影响。 您只需要保证有足够的磁盘可用空间,以应对任何潜在的、小概率发生的故障。 InterSystems 只要能获得完整核心,在解决问题方面都有着良好的记录。 有时我们会发现由难解的硬件引发的故障,并保证这种故障不会再次发生。 InterSystems 产品还可以配置为很少记录或不记录进程故障的信息。 虽然禁用核心没有性能优势,但您可能会获得运行优势。 核心文件可能包含敏感信息。 如果您不想制定保护核心文件的策略,可以只在反复出现故障后再启用生成核心文件。 In­ter­Sys­tems 产品默认采用中间方案。 也就是生成有限大小的核心文件。 利用这些小核心文件,InterSystems 通常可以识别是否为以前解决过的问题,并解决这些问题。 当然我们无法保证使用默认的有限的核心文件可以解决所有问题。 用于确定所获得的核心文件的大小和类型的主要控制参数是 DumpStyle。 这是cache.cpf 或 iris.cpf 文件中的参数。 还有其他几个特定于操作系统的控制参数。 Dump­Style 的说明在这里:。DumpStyle 取一个介于 0 到 8 之间的整数值,适用于 Caché、Ensemble、HealthShare 或 InterSystems IRIS 数据平台实例中的每个进程,并定义当进程遇到严重错误时,应保存哪种核心(或进程转储)文件。 定义的值为: 代码 名称 平台 结果 0 NORMAL UnixOpenVMSWindows 生成完整核心(取决于其他设置)。生成 CACCVIO-pid.LOG(大小受限)。生成 pid.dmp(大小受限)。 1 FULL UnixOpenVMSWindows 生成完整核心(取决于其他设置)。生成 CACHE.DMP(可能非常大)。生成 cachefpid.dmp(可能非常大)。 2 DEBUG UnixOpenVMSWindows 在 Caché2014.1 之前,生成省略共享内存的核心,现已弃用。 最好使用操作系统特定的方法省略共享内存。未实现。为 InterSystems 预留。 3 INTERMEDIATE UnixOpenVMSWindows 未实现。未实现。2014.1 版本后有效,生成cacheipid.dmp 4 MINIMAL UnixOpenVMSWindows 未实现。未实现。2014.1 版本后有效,生成cacheipid.dmp 5 NOHANDLER UnixOpenVMSWindows 不注册为信号处理程序。 将有关核心创建的所有决定都留给操作系统。未实现。未实现。 6 NOCORE UnixOpenVMSWindows 不生成核心文件。未实现。未实现。 7 NOFORK UnixOpenVMSWindows 创建核心dump(包含共享内存),但是从原始故障进程而不是从故障进程的分支副本进行创建。未实现。未实现。 8 NOFORKNOSHARE UnixOpenVMSWindows 创建不包含共享内存的核心转储,但是从原始故障进程而不是从故障进程的分支副本进行创建。未实现。未实现。 默认 DumpStyle 为 0 = NORMAL,除了在 Windows 中从 Caché 2014.1 开始,为 3 = INTERMEDIATE。 更改 DumpStyle 值的方法有三种。 分别是: ①将以下部分放在 cache.cpf 或 iris.cpf 文件中,为此,需要使用操作系统的文本编辑器: [Debug] dumpstyle=1 等号后面的数字是新的默认 DumpStyle值。 重新启动 Caché、Ensemble、HealthShare 或 InterSystems IRIS 数据平台后,如果不使用下面的方法 ② 或 ③ ,它会将这个新的值设定为所有进程的默认值。 ②使用命令: SET old=$SYSTEM.Config.ModifyDumpStyle(1) 括号中的数字是新的 DumpStyle 值。 旧值将返回。 此命令对运行后创建的所有新进程都有效。 现有进程继续以先前的 DumpStyle 运行。 此命令从 Caché 2014.1 开始有效。 对于较早的版本,可以使用以下命令: VIEW $ZUTIL(40,2,165):-2:4:1 其中新的 DumpStyle 值是最后一位数字。 ③执行以下命令或将其放在应用程序中: VIEW $ZUTIL(40,1,48):-1:4:1 其中新的 DumpStyle 值是最后一位数字。 这只对执行命令的进程有效,并覆盖方法 ① 和 ②的设定值。 大多数操作系统都可以控制将生成的核心文件重定向到一个公用目录,并控制核心文件中包含的信息数量。 您也应该手动修改这些设置,并且应考虑相应的影响,尤其是从数据隐私的角度。 以下各节介绍了各个操作系统下的详细信息。 将核心文件的输出移动到一个公用目录对于容量规划非常有用,但也可能让希望从您的站点窃取数据的人更容易访问到核心文件。 如果核心文件不包含共享内存,很多类型的问题无法从根本进行解决。 包含共享内存的核心文件往往比不包含共享内存的核心文件大得多。 大部分差异是global和routine缓冲区的大小。 如果你正在处理的是敏感信息,不含共享内存的核心文件将只包含发生故障的进程正在处理的敏感信息。 含有共享内存的核心文件还将包含每个进程最近访问的所有全局变量。 这里用到的“最近”可能表示几分钟,或者相当长的时间。 AIX 生成完整的核心文件应使用 smit 启用: System Environments > Change / Show Characteristics of Operating System > > Enable full CORE dump true > > Use pre-430 style CORE dump false 也可以从命令行使用以下命令查看: # lsattr -E -l sys0 | egrep 'fullcore|pre430core'↩ fullcore true Enable full CORE dump True pre430core false Use pre-430 style CORE dump True 使用以下命令设置: # chdev -l sys0 -a fullcore=true -a pre430core=false -P↩ `-P` 使更改永久有效。 ◆ 默认情况下,当进程发生故障时在进程的默认目录写入核心文件。 该目录通常就是主 CACHE.DAT 或 IRIS.DAT 文件所在的目录。 这可以通过 smit 更改: Problem Determination > Change/Show/Reset Core File Copying Directory 或从命令行运行: # chcore -p on -l /cores -n on -d↩ ◆ 确保文件 /etc/security/limits 的某个部分包含以下行: default: core = -1 最后,无论通过什么方式为用户进程设置环境变量,都确保每个用户都已根据需要定义或未定义 CORE_NOSHM。 如果定义了 CORE_NOSHM=1,核心文件不包含共享内存的内容。 如果定义 CORE_NOSHM=0 或完全未定义,核心文件将包含共享内存的内容。 为所有用户设置此参数简单方法是编辑 /etc/environment 并包含以下行: CORE_NOSHM=1 要分别指定每个用户是否在核心文件中包含共享内存的内容,请根据用户和他们使用的 shell 编辑以下任一文件: CORE_NOSHM=1; export CORE_NOSHM # sh in /etc/profile or $HOME/.profile export CORE_NOSHM=1 # ksh in /etc/.kshrc or $HOME/.kshrc export CORE_NOSHM=1 # bash in /etc/bashrc or ~/.bashrc setenv CORE_NOSHM 1 # csh in ~/.cshrc Docker InterSystems IRIS 数据平台 docker 容器的核心文件创建由主机 Linux 系统控制。 您必须规划将核心文件直接发送至操作系统文件。 该文件可以保存在 docker 容器内,也可以发送至映射的主机 Linux 系统上的目录中。 将核心文件发送至映射的主机 Linux 系统上的目录的优点是,它将在容器完全失效的情况下仍然保存下来。 由于核心文件必须发送到操作系统文件,因此必须在主机平台上禁用所有高级核心捕获软件。 您将需要为主机和容器系统的 /proc/sys/kernel/core_pattern 设置适当的值。 您应该选择一个相对简单并且在主机和容器上都存在的目录(/tmp 或 /cores 显然是最佳选择)。 您可能还需要包含变量,以确保来自多个 docker 容器的核心不会相互覆盖。 因此 /cores/core.%p.%e 是一个好选择。 主机操作系统 禁用 链接 RedHat Linux 必须禁用错误自动报告工具 (ABRT)。 ☞ SuSE Linux 截至 SuSE Linux Enterprise Server 11,SuSE 没有任何高级核心捕获软件。 因此您只需按照说明设置 /proc/sys/ker­nel/core_pat­tern。 但是,到目前为止,我们还没有提供在 SuSE Linux Enterprise Server 12 中禁用高级核心捕获软件的说明,因此 SuSE 12 及更高版本目前不适合作为 docker 容器的主机。 ☞ Ubuntu Linux 必须禁用 apport。 ☞ 启动容器时,您可能希望包含将用于核心文件的目录映射到主机操作系统的选项。 因此: # docker run ⋯ -v /cores:/cores ⋯ ↩ 如果不包含 -v /cores:/cores,则 docker 容器内的进程故障所创建的任何核心文件都只会在 docker 容器运行时存活。 如果 -v 选项给出的映射不是对称的,即冒号左侧和右侧的值不一样,则可能无法捕获某些核心文件内容。 将核心文件大小设置为无限制。 由于这是运行时决定,因此将以下内容添加到 docker run 命令中: # docker run ⋯ --ulimit core=-1 ⋯ ↩ HP–UX 使用以下命令使核心文件保存在公用目录中并带有扩展名称: # coreadm -e global -g /cores/core.%p.%f↩ %p 表示将 pid 放在路径名中,%f 表示将可执行文件名(如 cache 或 iris)放在路径名中。 请参见: % man 1m coreadm↩ 了解更多选项。 ◆ 使用以下命令查看是否已在核心文件中启用共享内存: # /usr/sbin/kctune core_addshmem_read↩ # /usr/sbin/kctune core_addshmem_write↩ 更改为: # /usr/sbin/kctune core_addshmem_read=1↩ # /usr/sbin/kctune core_addshmem_write=1↩ 1 表示启用,0 表示禁用。 HP–UX 将共享内存分为两种类型。 通常,InterSystems 仅使用写共享内存,但我们建议将两种类型设置为相同值。 ◆ 在 HP–UX 上,生成的核心文件大小受 maxdsiz_64bit 内核参数限制。 确保该参数设置得足够高,以便生成完整的核心文件。 可 使用以下命令查看: # /usr/sbin/kctune maxdsiz_64bit↩ 使用以下命令设置: # /usr/sbin/kctune maxdsiz_64bit=4294967296↩ 用户可以使用 ulimit -c 命令进一步限制核心文件大小。 应该从 /etc/profile、$HOME/.profile 以及其他 shell 的类似文件中删除此设置,除非您有意限制核心文件。 RedHat Linux 如果您正在运行 Rhel 6.0 或更高版本(CentOS 同样),RedHat 已增加了错误自动报告工具 (ABRT)。 此工具安装后与 Caché、En­sem­ble、HealthShare 或 In­ter­Sys­tems IRIS 数据平台不兼容。 您需要决定您希望将 ABRT 配置为支持 Caché、Ensemble、HealthShare、InterSystems IRIS 数据平台,还是禁用 ABRT。 以下标记了 ABRT 的部分适用于使用 ABRT 的情况, 而标记了 AB/RT 的部分适用于传统的不使用 ABRT 的情况。 ◆ ABRT 要使 In­ter­Sys­tems 产品与 ABRT 兼容,请确定正在运行的 ABRT 版本: # abrt-cli --version↩ 编辑 ABRT 配置文件。 名称会因 ABRT 版本的不同而有所差异: ABRT 1.x: /etc/abrt/abrt.conf ABRT 2.x: /etc/abrt/abrt-action-save-package-data.conf 如果您使用 cinstall 命令安装了 Caché、Ensemble 或 HealthShare(最常见),或使用 irisinstall 命令安装了 InterSystems IRIS 数据平台,请找到 ProcessUnpackaged= 行,将值更改为 yes。 ProcessUnpackaged = yes 否则,如果是从 RPM 模块安装的 Caché、Ensemble、HealthShare 或 In­ter­Sys­tems IRIS 数据平台,则找到 OpenGPGCheck= 行,将值更改为 no。 OpenGPGCheck = no 不管是如何安装的 Caché、Ensemble、HealthShare 或 In­ter­Sys­tems IRIS 数据平台,都找到 BlackListedPaths= 行,并添加对 in­stal­la­tion/bin 目录中的 cstat 或 irisstat的引用。 如果 Black­List­ed­Paths= 行不存在,则在末尾添加此行以及cstat 或 iris­stat 引用。 BlackListedPaths=[retain_existing_list,]installation_directory/bin/cstat 保存所做编辑,然后重新启动 abrtd: # service abrtd restart↩ 这样配置后,ABRT 会为每次进程故障创建一个新目录(在 /var/spool/abrt 或 /var/tmp/abrt 下),并在该目录中放置核心文件以及相关信息。 当进程发生错误时,执行命令: # abrt-cli --list↩ # for ABRT 1.x # abrt-cli list↩ # for ABRT 2.x­­ 这将显示最近进程故障的列表,并为每个故障提供一个目录规范。 每个目录中都将有一个 coredump文件,以及许多其他小文件,这些文件对于确定进程故障的原因非常有用。 % tar -cvzf <var>wrcnumber</var>-core.tar.gz /var/spool/abrt/<var>directory</var>/*↩ 其中 wr­c­num­ber 是 In­ter­Sys­tems 分配用来调查案例的编号。 您可以将压缩的 wrcnumber-core.tar.gz 文件发送给我们。 ◆ AB/RT 或者,可以使用以下命令禁用 ABRT: # service abrtd stop↩ # service abrt-ccpp stop↩ # ABRT 2.x only. 要永久禁用 ABRT: # chkconfig abrtd off↩ # chkconfig abrt-ccpp off↩ # ABRT 2.x only. 最后,您需要更新 /proc/sys/kernel/core_pattern,请参见下一节。 ◆ AB/RT 您可以控制核心文件的存储位置(除非您正在使用 ABRT)。 ① : 如果正在使用 ABRT,则必须跳过此步骤。 ② : 如果已禁用 ABRT,则必须执行此步骤。 ③ : 如果从未安装 ABRT,则此步骤是可选的。 编辑文件 `/proc/sys/ker­nel/core_pat­tern` 在简单的示例中,只需使用: core 添加生成核心的程序的 pid 和名称通常很有用: core.%p.%e 还可以将核心放在公用目录中: /cores/core.%p.%e 确认所有用户对所选目录都具有写访问权限。 请参见 `man core` 了解更多选项。 您应该在目录 /etc/sysctl.d 中创建一个名称以 `.conf` 为结尾的文件,并包含以下内容,从而使此更改永久有效: kernel.core_pattern=/cores/core.%p.%e ◆ ABRT AB/RT 您应该设置 /proc/self/coredump_filter以控制转储到核心文件中的内存大小。 这可以在 /etc/profile.d/some-thing.sh 文件中设置。 命令为: # echo 0x33 >/proc/self/coredump_filter↩ 所使用的具体位映射取决于您希望收集的数据级别。 bits的含义可以在 man core 中找到,对于 InterSystems 产品有意义的示例为: Bit 说明 InterSystems 是否需要 0x01 匿名私有映射。 始终需要。 0x02 匿名共享映射。 复杂问题需要。 0x04 文件支持的私有映射。 $ZF() 相关问题可能需要。 0x08 文件支持的共享映射。 $ZF() 相关问题可能需要。 0x10 转储 ELF 标头。 始终需要。 0x20 转储私有大页。 In­ter­Sys­tems 当前未使用。 0x40 转储共享大页。 In­ter­Sys­tems 当前未使用。 0x80 转储私有 DAX 页 (Rhel 8)。 In­ter­Sys­tems 当前未使用。 0x100 转储共享 DAX 页 (Rhel 8)。 In­ter­Sys­tems 当前未使用。 作为将此命令放在 shell 特定的脚本中的替代方案,您可以在启动期间进行修改。 只有使用 grub2 引导时,这些指令才适用。 您可以通过以下命令测试: # grub2-install --version↩ grub2-install (GRUB) 2.02~beta2 编辑 /etc/de­fault/grub。 更改以 GRUB_CMDLINE_LINUX_DEFAULT= 开头的行。 如果文件中不存在该行,则在末尾添加。 它应该包含: GRUB_CMDLINE_LINUX_DEFAULT="oldcmd coredump_filter=newval " 注意:old­cmd 是 GRUB_CMD­LINE_LINUX_DE­FAULT 的旧值(如果该行先前不存在,则省略)。 new­val` 是 core­dump_fil­ter 的新值,以十六进制表示,带有前导“`0x`”。 运行: # grub2-mkconfig -o /boot/grub2/grub.cfg↩ ◆ ABRT AB/RT 您应该针对所有进程设置 ulimit -c 为无限制。 这可以在文件 /etc/security/limits.conf 中全局设置。 添加以下两行: * soft core unlimited * hard core unlimited SuSE Linux 如果运行 SuSE Linux En­ter­prise Server 12 或更高版本,SuSE 现在将所有生成的核心文件存储在 sys­temd 日志中。 存储在 systemd 日志中的核心文件是临时的。 它们在系统重启后即消失。 如果需要,必须在系统重启前从 sys­temd 日志中提取核心。 要列出 systemd 日志中当前含有的核心文件: # [ systemd- ] coredumpctl list↩ 要提取按照创建了核心的 pid 选择的核心文件: # [ systemd- ] coredumpctl -o core.morename dump pid 注意:从 SuSE 12-SP2 开始,systemd- 前缀已从命令名称中删除。 建议保留此 sys­temd 行为,不要试图修改它。 如果正在运行旧版本的 SuSE Linux Enterprise(11 或更早版本),可以通过编辑文件 /proc/sys/kernel/core_pattern来控制存放核心文件的位置。 在简单的示例中,只需使用: core 通常也需要添加生成核心文件程序的 pid 和名称,使用: core.%p.%e 还可以将核心文件放在公用目录中: /cores/core.%p.%e 确认所有用户对所选目录都具有写访问权限。 请参见 man core 了解更多选项。 可以将以下几行追加到文件 etc/sysctl.conf 中来使此更改永久有效: # Make this core pattern permanent (SuSE 12 breaks this, don't use): kernel.core_pattern=/cores/core.%p.%e ◆ 您应该设置/proc/self/coredump_filter以控制转储到核心文件的内存数量。 这可以在适当的 /etc/profile.d/something.sh文件中运行。 命令为: # echo 0x33 >/proc/self/coredump_filter↩ 所使用的具体bits映射取决于您希望收集的数据级别。 bit 的含义可以在 man core 中找到,对于 InterSystems 产品有意义的示例为: Bit 说明 InterSystems 是否需要 0x01 匿名私有映射。 始终需要。 0x02 匿名共享映射。 复杂问题需要。 0x04 文件支持的私有映射。 $ZF() 相关问题可能需要。 0x08 文件支持的共享映射。 $ZF() 相关问题可能需要。 0x10 转储 ELF 标头。 始终需要。 0x20 转储私有大页。 In­ter­Sys­tems 当前未使用。 0x40 转储共享大页。 In­ter­Sys­tems 当前未使用。 0x80 转储私有 DAX 页 (SuSE 15)。 In­ter­Sys­tems 当前未使用。 0x100 转储共享 DAX 页 (SuSE 15)。 In­ter­Sys­tems 当前未使用。 作为将此命令放在 shell 特定的脚本中的替代方案,您可以在启动期间进行修改。 要执行此操作,请使用yast2。 根据您连接的是终端界面(将使用 curses 界面)还是 GUI 界面,yast2 的用户界面会有所不同。 以下说明尽量做到与界面无关。 ① : 启动 yast2 后,从菜单中选择 Sys­tem → Boot Loader。 ② : 选择 Ker­nel Pa­ra­me­ters 选项卡。 ③ : 查找 Op­tional Ker­nel Com­mand Line Pa­ra­me­ter字段。 ④ : 如果该字段尚未包含coredump_filter=0xvalue,则使用空格分隔符将其追加到该字段中。 如果已经包含该赋值,则只需编辑 value。 ⑤ : 退出菜单系统,然后重新启动。 ◆ 您应该针对所有进程设置 ulimit -c 为无限制。这可以在文件 /etc/security/limits.conf 中进行全局设置。 添加以下两行: * soft core unlimited * hard core unlimited ◆ 注意:可能需要禁用 AppArmor,它会阻止它认为不寻常的应用程序行为,而写入核心文件可能被视为不寻常。 # rcapparmor stop↩ Ubuntu Linux Ubuntu 使用 apport 捕获所有进程故障,对于使用安装包添加的软件包,会创建 apport 报告,其中包含带有附加信息的经过编码和压缩的核心内容。 当然也可以要求 apport 处理未使用 Ubuntu 的软件包管理器(Ubuntu's package manager)安装的应用程序的代码。 不幸的是,如果这样做,Canonical 会将针对未打包代码创建的 apport 报告视为为改进 Ubuntu而收集的信息,进而进行内容检查。 由于可以从 apport 报告中提取数据,您几乎肯定不希望启用对未打包代码的 apport 处理。 您的唯一选择是禁用 ap­port。 为此,请编辑 etc/de­fault/ap­port,然后编辑 en­abled= 行: enabled=0 ◆ 创建文件 /etc/sysctl.d/30-core-pattern.conf(或该目录中的任意相似名称)。 在该文件中添加: kernel.core_pattern=/cores/core.%p.%e 确保您指定用于保存核心文件的目录可公开并写入,并且有足够的磁盘空间。 请参见 man core 了解更多选项。 ◆ 您应该设置 /proc/self/coredump_filter 以控制转储到核心文件中的内存数量。 这可以在 /etc/profile.d/something.sh 文件中进行设置。 命令为: # echo 0x33 >/proc/self/coredump_filter↩ 所使用的具体 bit 映射取决于您希望收集的数据级别。 bit 的含义可以在 man core 中找到,对于 Caché 有意义的示例为: Bit 说明 InterSystems 是否需要 0x01 匿名私有映射。 始终需要。 0x02 匿名共享映射。 复杂问题需要。 0x04 文件支持的私有映射。 $ZF() 相关问题可能需要。 0x08 文件支持的共享映射。 $ZF() 相关问题可能需要。 0x10 转储 ELF 标头。 始终需要。 0x20 转储私有大页。 In­ter­Sys­tems 当前未使用。 0x40 转储共享大页。 In­ter­Sys­tems 当前未使用。 0x80 转储私有 DAX 页 (16.04LTS)。 In­ter­Sys­tems 当前未使用。 0x100 转储共享 DAX 页 (16.04LTS)。 In­ter­Sys­tems 当前未使用。 作为将此命令放在 shell 特定的脚本中的替代方案,您可以在启动期间进行修改。 只有使用 grub2 引导时,这些指令才适用。 您可以通过以下命令测试: # grub-install --version↩ grub-install (GRUB) 2.02-2ubuntu8.12­ 编辑 /etc/de­fault/grub。 更改以 GRUB_CMDLINE_LINUX_DEFAULT= 开头的行。 如果文件中不存在该行,则在末尾添加。 它应该包含: GRUB_CMDLINE_LINUX_DEFAULT="oldcmd coredump_filter=newval " 注意:old­cmd 是 GRUB_CMD­LINE_LINUX_DE­FAULT 的旧值(如果该行先前不存在,则省略)。 new­val 是 core­dump_fil­ter 的新值,以十六进制表示,带有前导“0x”。 运行: # grub-mkconfig -o /boot/grub2/grub.cfg↩ ◆ 您应该针对所有进程设置ulimit -c 为无限制。 这可以在文件 /etc/security/limits.conf 中进行全局设置。 添加以下两行: * soft core unlimited * hard core unlimited macOS(OS X、Darwin) Mac OS X 曾重命名为 OS X,后来又重命名为 ma­cOS。 所有这些操作系统均是 Ap­ple 在 Darwin 上堆叠的专有用户界面,Darwin 是 Ap­ple 从 BSD Unix 衍生出来的操作系统,理论上已发布到公共领域。 然而,以 Ap­ple 发布 Dar­win 的方式,实际上没有人会只运行 Dar­win。 In­ter­Sys­tems 产品只需要 Dar­win,但由于 Dar­win 实际上不可用,因此所有说明均基于完整的 Apple Mac OS X、OS X 或 macOS。 ma­cOS 包括 CrashRe­porter。 该工具可以自动拦截进程故障,将故障详细信息打包为文本日志,然后将数据发送给 Apple 进行分析。 CrashReporter 将捕获第三方软件(如 Caché、Ensemble、HealthShare 和 InterSystems IRIS 数据平台)的进程故障详细信息。 理论上,Ap­ple 可将这些信息转发给 In­ter­Sys­tems。 InterSystems 没有从 Ap­ple 收到 CrashReporter 日志,我们也没有开发分析这些日志的功能。 In­ter­Sys­tems 产品严格地生成核心文件。 幸运的是,CrashReporter 独立于核心文件创建。 也就是说,处理进程故障可以通过 CrashReporter 和核心文件创建这两种方式中的任意一种或两种,或者都不使用。 CrashReporter 设置可以在“系统偏好设置”→“安全和隐私”、“隐私”选项卡中设置。 面板名称和框的选择因版本而异。 在 Mac OS X 10.4 中,该面板的名称仅为“安全性”,没有相关的复选框。 在较旧的版本中,发生任何进程故障时都会向用户显示一个对话框,询问他们是否要将数据发送到 Ap­ple 进行分析。 根据您处理的数据的敏感性,您可能想要取消选中与 CrashReprter 相关的所有选项。 ◆ 在 macOS 中,启用生成核心文件的方法在不同版本之间有很大变化。 请参见下表,并使用适合您的版本的方法。 版本 代号 InterSystems 版本 方法 公测版 Kodiak 不支持 方法 1:编辑 /hostconfig Mac OS X 10.0 Cheetah 不支持 Mac OS X 10.1 Puma 不支持 Mac OS X 10.2 Jaguar 不支持 Mac OS X 10.3 Panther Caché (PowerPC) 5.0, 5.1 Mac OS X 10.4 Tiger Caché(标记 PowerPC 或 x86)5.0PowerPC, 5.1PowerPC, 5.2*, 2007.1*, 2008.1x86, 2008.2x86, 2009.1x86 方法 2:编辑 /etc/launchd.conf Mac OS X 10.5 Leopard Caché (x86) 2008.1, 2008.2, 2009.1, 2010.1 Mac OS X 10.6 Snow Leopard Caché (x86–64) 2010.1, 2010.2, 2011.1, 2012.1, 2012.2 Mac OS X 10.7 Lion Caché (x86–64) 2011.1, 2012.1, 2012.2, 2013.1, 2014.1 OS X 10.8 Mountain Lion Caché (x86–64) 2012.2, 2013.1, 2014.1, 2015.1 OS X 10.9 Mavericks Caché (x86–64) 2013.1, 2014.1, 2015.1, 2015.2, 2016.1, 2016.2 OS X 10.10 Yosemite Caché (x86–64) 2014.1, 2015.1, 2015.2, 2016.1, 2016.2 方法 3:非自动。 OS X 10.11 El Capitan Caché (x86–64) 2016.1, 2016.2, 2017.1DEV,2017.2DEV, 2018.1DEV macOS 10.12 Sierra Caché (x86–64) 2017.1, 2017.2, 2018.1 macOS 10.13 High Sierra Caché (x86–64) 2018.1, 2019.1, 2019.2 macOS 10.14 Mojave IRIS 2019.1, 2019.2 macOS 10.15 Catalina 未发布 **方法 1:**对于 OS X 10.3 (Chee­tah) 以及先前不受支持的版本:编辑文件 /host­con­fig。 查找行 CORE­DUMPS=,然后将值更改为 -YES-。 COREDUMPS=-YES- ◆ **方法 2:**对于 OS X 10.4 (Tiger) 到 OS X 10.9 (Mav­er­icks) 版本,编辑文件 /etc/launchd.conf,然后添加以下行: limit core unlimited 重新启动。 ◆ **方法 3:**对于 OS X 10.10 (Yosemite) 及更高版本,/etc/launchd.conf 已去除。 核心文件生成现在是半禁用状态。 用户必须为每个进程启用核心: % ulimit -c unlimited↩ 在允许他们的应用程序之前,特权用户必须运行: # launchctl limit core unlimited↩­­­ 然后注销,并在启动 Caché 前再次登录。 Apple 特地没有提供一个好方法来自动执行这些操作,因为他们认为默认生成核心文件是一个潜在的安全漏洞。 Apple 提供了完全禁用核心文件生成的方法。 这通过编辑文件 /etc/sysctl.conf 并添加以下行来完成: kern.coredump=0 可以通过删除该行或将值更改为 `1` 来重新启用此功能。 OpenVMS 默认情况下,Caché 和 En­sem­ble 只针对故障进程生成 CACCVIO-pid.LOG 文件。 使用这些文件只能解决相对简单的问题。 这些 CACCVIO-pid.LOG 文件将始终放在进程默认目录中(通常是 CACHE.DAT 文件的目录),只有通过更改进程默认目录才能重定向。 Caché 和 En­sem­ble 也可能生成 CERRSAVE-pid.LOG文件。 这些文件与 CACCVIO-pid.LOG 文件类似。 通常,您无需关心它们的差异。 在某些情况下,Caché 和 En­sem­ble 将同时生成两种文件以响应故障。 在迄今为止的所有情况下,CACCVIO-pid.LOG 文件首先生成,其中包含错误的完整上下文,而 CERRSAVE-pid.LOG` 文件则在进程的最后断开过程中生成,包含的有价值的信息相对较少。 如果启用了扩展进程 dumps(完整转储),它们也会放置在进程默认目录中。 但是,可以将它们重定向,方法是定义逻辑名称 SYS$PROCDMP,将其指向要存储进程dump的目录。 该逻辑名称可以在 /SYS­TEM 级别定义。 文件名将是 CACHE.DMP 或 CSESSION.DMP。 Open­VMS 还提供了逻辑名称 SYS$PROTECTED_PROCDMP。 您也应该使用 /EX­EC­U­TIVE_MODE 和 /SYS­TEM 定义该逻辑名称。 这适用于特权映像privileged images的进程故障,Caché 的某些部分也拥有特权。 OpenVMS 文档中建议将这两个逻辑名称定义到不同的目录,并为与 SYS$PRO­TECTED_PROCDMP 对应的目录设置更高的安全性。 这基于以下假设:特权映像处理的数据比非特权映像处理的数据更敏感。 如果两种数据都很敏感,将两个逻辑名称指向同一目录也是可以的。 ◆ 影响 CACCVIO-pid.LOG 和 CERRSAVE-pid.LOG 文件创建以及完整进程dump的缺陷是有历史记录的。 以下是最重要的变更。 变更 第一个版本 说明 JLC1809 Caché 2015.2 在此变更之前,大多数 CERRSAVE-pid.LOG 文件是无用的。 JO2422 Cache 2012.1 在此变更之前,生成 CERRSAVE-pid.LOG 文件的条件在创建信息有限的文件时总是会忽略 DumpStyle。 JLC1326 Caché 2011.1 在此变更之前,Itanium 平台上的 CACCVIO-pid.LOG 和 CERRSAVE-pid.LOG 文件不包含寄存器。 这严重阻碍了我们使用这些文件解决问题的能力,而只能处理简单问题。 我们仍然可以与已经解决的问题相匹配。 JLC931 和 JLC959 Cache 2007.2 在此变更之前,Itanium 平台上的 CACCVIO-pid.LOG 和 CERRSAVE-pid.LOG 文件不记录任何有用信息。 JO1968 Caché 5.2 在此变更之前,生成 CACCVIO-pid 文件的条件在创建信息有限的文件时总是会忽略 DumpStyle。 ­­ Solaris 可以使用以下命令使核心文件放在公用目录中并带有扩展名称: # coreadm -e global -g /cores/core.%p.%f -G all↩ ① %p 表示将 pid 放在路径名中。 ② %f 表示将可执行文件名(如 cache)放在路径名中。 ③ -G all 表示包括所有类型的内存,即完整核心文件内容。 省略此选项将生成默认核心文件内容,其中仍包括大部分共享内存。 核心文件中可以存储以下内容: 代码 InterSystems 使用 默认包括 stack 需要 是 heap 需要 是 shm 不使用 是 ism 不使用 是 dism Caché 共享内存 是 text 用于 $ZF() 相关故障 是 data 需要 是 rodata 不使用 是 anon 需要 是 shanon 通常较小 是 ctf 需要 是 symntab 用于 $ZF() 相关故障 否 shfile 不使用 否 all 表示包括所有类型的内存,默认不包括最后两种。 如果您需要大幅减小的核心文件大小(以节省空间,但代价是可解决的问题变少),移除 dism 共享内存可节省出大部分空间。 使用以下命令执行此操作: # coareadm -e Global -g /cores/core.%p.%f -G (default-dism)↩ 请参见: % main 1m coreadm↩ ◆ 默认情况下,用户已经 % ulimit -c unlimited↩ 您可以使用 ulimit(或在 csh 中使用 limit 命令)禁用核心,但 core­adm 通常更灵活。 因此您应该确保 ulimit 命令不会出现在 /etc/profile 或 $HOME/.profile 中,或者其他 shell 的相应文件中。 Windows Windows 下的转储文件中包含的信息完全由 cache.cpf 文件中的 DumpStyle 参数(或上文定义的其他用于更改 DumpStyle 的接口)控制。 测试 除了特定问题外,本地安全组也可能阻止核心文件的写入。 在真实条件下测试是否可以成功创建核心文件非常有用。 为此,请输入命令: USER>DO $ZUTIL(150,"DebugException")↩ 可以肯定的是,您应该在 JOB 内以交互方式测试该语句(假定您的应用程序使用 JOB 命令),甚至在应用程序内隐藏一个不会被用户意外选择到的选项。 验证是否会获得核心文件,并按照下一节的健全性检查来验证它是否是好的核心文件。 健全性测试 核心文件(和进程转储)可能非常大,并且可能包含敏感信息。 在将核心文件传输到 InterSystems 进行分析之前,最好在生成核心文件的系统或非常相似的系统上对核心文件进行健全性测试。 根据您的操作系统,请执行以下健全性测试: 操作系统 健全性测试 AIX # dbx cache core(dbx) set $stack_details(dbx) where(dbx) quit 向 WRC 开启问题时,将上述命令的输出结果也同时发送给我们。 如果您的系统未安装 dbx,则开启一个新问题。 HP–UX # gdb cache core(gdb) frame 0(gdb) while 1 > info frame > up > end(gdb) quit # adb coreadb> $cadb> $q 根据您拥有的调试器,将上述两个命令集的其中之一的输出结果发送给我们。 如果两个调试器都有,则首选 gdb(实际是 Wildebeest)。 RedHat Linux 对于所有版本的 Linux 都使用此通用健全性测试。 # gdb cache core(gdb) frame 0(gdb) while 1 > info frame > up > end(gdb) quit SuSE Linux Ubuntu Linux 向 WRC 开启问题时,将上述命令的输出结果发送给我们。 如果您的系统未安装 gdb,则开启一个新问题。 macOS (Darwin) # lldb(lldb) target create -c core(lldb) thread backtrace all(lldb) quit # gdb cache core(gdb) frame 0(gdb) while 1 > info frame > up > end(gdb) quit 将 lldb 的输出结果(如果是 OS X 10.8 (Mountain Lion) 或更高版本)或 gdb 的输出结果(如果是 Mac OS X 10.7 (Lion) 或更早版本)发送给我们。 OpenVMS $ ANALYZE/CRASH dumpfile.DMPSDA> SHOW CALL_FRAME/ALL如果仍在运行 OpenVMS v7.x 或更早版本,先前的命令不适用,请改用:SDA> SHOW CALL_FRAMESDA> SHOW CALL_FRAME/NEXT重复先前的命令,直到获得错误。SDA> QUIT $ ANALYZE/PROCESS dumpfile.DMPDBG> SHOW CALL/IMAGEDBG> QUIT 将 SDA 或debugger调试器的输出结果发送给我们,但首选 SDA 的输出。 如果您仅有 CACCVIO-pid.LOG 文件,请检查其是否为空或几乎为空。 Solaris # mdb cache core> ::stackregs> ::quit # dbx cache core(dbx) where(dbx) quit 在 Solaris 上,InterSystems 对于几乎所有应用程序都首选 dbx 调试器,但对于健全性测试,mdb 更好。 当您向 WRC 开启问题报告时,请将 mdb 或 dbx(首选 mdb)生成的堆栈跟踪信息发送给我们。 Windows 对于 Windows 进程转储,当前没有推荐的健全性检查。 请将健全性测试的详细信息附加到 WRC 案例,或通过电子邮件发送到support@intersystems.com 。 传输 请准备好向我们发送完整核心文件以及您的特定操作系统可能需要的支持文件。 我们需要知道生成了核心文件的 Caché、Ensemble、HealthShare 或 InterSystems IRIS 数据平台的准确版本。 如果您重定向了软件并包含自定义的 `$ZF()` 函数,请发送可执行文件。 (实际上,如果您总是发送可执行文件,会更加方便。) 在大多数 Unix 系统上,最好还发送可执行文件使用的库。 我们需要库的可能性因给定的平台而异。 请查阅下表: 操作系统 硬件 需要库 支持级别 AIX PowerPC 不太可能 A HP–UX PA–RISC 非常可能 C HP–UX Itanium 有可能 A Linux(所有版本) x86 有可能 A Linux(所有版本) x86_64 有可能 A Linux(所有版本) Itanium 有可能 D macOS PowerPC 不太可能 D macOS x86 不太可能 C macOS x86_64 不太可能 A OpenVMS VAX 不适用 D OpenVMS ALPHA αxp 不适用 B OpenVMS Itanium 不适用 B Solaris x86_64 非常可能 B Solaris Sparc 不太可能 B Tru64 UNIX ALPHA αxp 非常可能 D Windows x86 不适用 A Windows x86_64 不适用 A Windows Itanium 不适用 D 支持级别说明 A: 截至本文档发布之时,InterSystems 拥有用于诊断该平台上的核心文件的资源。B: 对该平台的完全支持在最近失效。 不过,InterSystems 仍然有资源来诊断平台上的核心文件。 某些诊断出的问题可能无法使用专门版本更正。C: 旧版支持。 InterSystems 可能仍然拥有有限的资源来诊断该平台上的核心文件,但是,可能无法再提供专门版本来修复所发现的任何缺陷。D: 远古支持。 In­ter­Sys­tems 未保留任何可诊断这些平台上的问题的资源。 不过一些有限的功能仍保留下来。 这些平台上的核心可能会被分析。 但不可能修复所发现的任何缺陷。 发出 ldd 命令可列出所需的库: # ldd install_directory/bin/image linux-vdso.so.1 => (0x00007fffd1320000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f23e5002000) librt.so.1 => /lib64/librt.so.1 (0x00007f23e4dfa000) libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f23e4af0000) libm.so.6 => /lib64/libm.so.6 (0x00007f23e47ee000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f23e45d8000) libc.so.6 => /lib64/libc.so.6 (0x00007f23e4216000) /lib64/ld-linux-x86-64.so.2 (0x00007f23e521a000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f23e3ffa000) 上面的内容包含 Rhel 7 的示例输出。 所有 Unix 系统的输出都是类似的。 install_directory`指 Caché、Ensemble、HealthShare 或 InterSystems IRIS 数据平台的安装目录。 image 对于 2018 年以前的所有产品均为 cache,对于自 2019 年以后的产品为 irisdb。如果您要发送多个文件,最好将它们放在一个压缩的容器文件中。 一般来说,.ZIP是最好的容器。 .tar.gz 也是合理的。 对于 Open­VMS,使用以下命令创建备份文件: $ BACKUP *.* [-]<var>saveset</var>.BCK/SAVE/DATA=COMPRESS 包含一个说明所发送文件的manifest会有帮助。 请准备纯文本文件形式的manifest。如果以电子方式发送数据,请不要加密文件,而是使用加密的传输方式。 您可以使用以下任意方法向 InterSystems 发送核心文件: 方法 安全性 最大大小 直接上传至 WRC 应用。上传文件前,必须开启一个 WRC 问题,上传文件后,可以选择将问题标记为更高安全性。 问题标记为更高安全性后,所有对与调查相关的文件的访问都仅限于实际进行调查的人员。 除了 300 M 的附件大小限制外,还有 60 秒的时间限制,因此如果您的有效带宽小于 42 Mbps,最大上传量会减少 安全或更高 300 M 和 60 秒 电子邮件。一般来说,除了不需要任何客户数据就可以进行调查的简单问题,应避免使用电子邮件。 示例:您刚刚在一台新计算机上安装了 Caché,但它在启动时出现故障,并生成一个小核心文件。 通过电子邮件发送该文件是合理的。 不安全 40 M 我们的 kite-works 服务器。对于任何给定问题,您都必须申请数据上传链接。 这些链接在 30 天或更短时间内过期。 这是上传安全数据的首选方法。 绝对大小限制是我们服务器上的可用空间。 但是,由于大多数客户都使用这种方法,如果您要上传大于 4G 的文件,请事先告知。 安全 > 4 G 我们的 sftp 服务器。您必须申请特定于用于问题的目录。 将为问题创建一个目录。 对于更高安全性的问题,我们创建了一个限制访问的机器(或虚拟机),并实现了一个自动流程将上传的任何文件都移动到该机器。 绝对大小限制是指我们服务器上的可用空间,如果您要上传大于 100 G 的文件,请事先告知。 更高 > 100 G 您的 ftp/sftp 服务器。您要求我们从中下载数据的服务器必须归您所有,并且您有完全控制权。 In­ter­Sys­tems 不会从任何第三方服务器下载数据。 第三方服务器被视为安全风险。 取决于您 ? Se­curLink。InterSystems 可以通过我们的 SecurLink 远程控制工具直接从您的网络上的任何已核准的计算机中下载文件。 没有绝对大小限制。 但是,如果您通过 V.90 调制解调器连接到互联网,我们下载一个 3 Gio 的核心文件需要一周的时间。 安全且更高 ? 物理介质。您可以将物理介质邮寄到您当地的 In­ter­Sys­tems 办公室。 InterSystems 可以读取介质,并将数据发送到我们的剑桥办公室,在那里进行大多数核心文件分析。 大多数办公室都可以处理 U 盘以及 ISO 9660 光盘介质。 我们的剑桥办公室可以处理多种磁带格式。 在发送任何介质之前,您应该先与 InterSystems 确认。如果通过挂号(非认证)邮件发送介质,那么数据可以被认为是安全的(可能安全性更高)。 视情况 ? 务必要记住,我们需要的文件有些是二进制文件,有些是文本文件。 对于某些文件传输方法(尤其是在不同的操作系统之间),必须指定文件是二进制还是文本,以防止文件被损坏。 索引 a ABRT ☞, ☞AppArmor ☞abrtd ☞abrt-cli ☞apport ☞ b BlackListedPaths ☞ c CACCVIO-pid.LOG ☞, ☞CACHE.DMP☞, ☞CERRSAVE-pid.LOG ☞CentOS ☞CORE_NOSHM ☞CrashReporter ☞CSESSION.DMP ☞cachefpid.dmp ☞pid.dmp ☞cachempid.dmp ☞cache.cpf ☞, ☞chcore ☞chdev ☞chkconfig ☞coreadm ☞, ☞coredumpctl ☞core_addshmem_read ☞core_addshmem_write ☞cstat ☞ d DumpStyle ☞, ☞default ☞ e /etc/environment ☞/etc/profile.d/something.sh ☞, ☞, ☞/etc/security/limits ☞/etc/security/limits.conf ☞, ☞, ☞/etc/sysctl.d ☞ f FULL ☞ g GRUB_CMDLINE_LINUX_DEFAULT ☞, ☞grub2 ☞, ☞grub2-mkconfig ☞ i INTERMEDIATE ☞irisstat ☞iris.cpf ☞, ☞ l lsattr ☞ m MINIMAL ☞maxdsiz_64bit ☞ n NOCORE ☞NOFORK ☞NOFORKNOSHARE ☞NOHANDLER ☞NORMAL ☞ o OpenGPGCheck ☞ p ProcessUnpackaged ☞pid.dmp ☞/proc/self/coredump_filter☞, ☞, ☞/proc/sys/kernel/core_pattern ☞, ☞, ☞ r RPM ☞rcapparmor ☞ s SYS$PROCDMP ☞SYS$PROTECTED_PROCDMP ☞$SYSTEM.Config.ModifyDumpStyle ☞敏感信息 ☞smit ☞systemd ☞ u ulimit -c ☞, ☞, ☞, ☞/usr/sbin/kctune ☞ y yast2 ☞ z $ZUTIL(40,1,48) ☞$ZUTIL(40,2,165)☞$ZUTIL(150,"DebugException") ☞ get
公告
Claire Zheng · 三月 1, 2022

InterSystems开发者Python竞赛优胜者决出暨热烈祝贺Wu Fatian 同学代表中国获得社区并列第三名好成绩!

Hi开发者们, 是时候公布 InterSystems开发者Python竞赛的优胜者了!准备好了吗! 这些开发者和他们的应用程序赢得了雷鸣般的掌声: 🏆 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出: 🥇 第一名,奖金 $4,000 获奖项目 django-iris ,开发者 @Dmitry.Maslennikov 🥈 第二名,奖金 $2,000 获奖项目 appmsw-sql2xlsx ,开发者 @MikhailenkoSergey 🥉 第三名,奖金 $1,000 获奖项目 iris-python-apps ,开发者 @Muhammad.Waseem 以下为更多优胜者: 🏅 奖金$100 ,获奖项目 iris-python-dashboards ,开发者@Evgeniy.Potapov 🏅 奖金$100 ,获奖项目 GlobalToJSON-ePython-pure ,开发者 @Robert.Cemper1003 🏅 奖金$100 ,获奖项目 blockchain - [ IRIS python ] ,开发者 @davimassaru.teixeiramuta 🏅 奖金$100 ,获奖项目 AI Image Object Detector ,开发者@Yuri.Gomes 🏅 奖金$100 ,获奖项目GlobalToJSON-embeddedPython ,开发者@Robert.Cemper1003 🏅 奖金$100 ,获奖项目 IRIS-Database-and-Machine-Learning-Based-Approaches-for-Prediction-of-Spontaneous-Intracerebral-Hemo ,开发者 @Fatian.Wu 🏅 奖金$100 ,获奖项目 DIMSE Iris Dicom Fhir Service ,开发者@Ron.Sweeney1582 🏅 奖金$100 ,获奖项目 Django-Interop ,开发者 @Fernando.VianaMaia 🏅 奖金$100 ,获奖项目 IRIS Text2Audio ,开发者 @Yuri.Gomes 🏆 社区提名奖(Community Nomination)- 获得总投票数最多的应用: 🥇 第一名,奖金 $1,000 ,获奖项目 django-iris ,开发者 @Dmitry.Maslennikov 🥈 第二名,奖金 $625 ,获奖项目 appmsw-sql2xlsx ,开发者 @MikhailenkoSergey 🥉 第三名,奖金 $625 ,获奖项目 IRIS-Database-and-Machine-Learning-Based-Approaches-for-Prediction-of-Spontaneous-Intracerebral-Hemo ,开发者 @Fatian.Wu 恭喜所有优胜者! 感谢大家对本次比赛的关注和付出!
文章
Qiao Peng · 一月 10, 2021

2020线上峰会——第1天数据平台专题会议的精彩回顾

InterSystems 2020线上峰会第二周拉开帷幕。首日专题会议涵盖了大量精彩内容,包括38场主题各异的专题会议。我认为有必要回顾一些重大的公告和谈话要点。 IntegratedML 在正式发布之后公布后global availability for IntegratedML, 本周的多个专题会议都将重点介绍IntegratedML。今天,Thomas Dyar与Baystate Health人口健康项目的业务分析师Joe Cofone进行了交流,讨论InterSystems和Baystate如何利用丰富的Health Insight数据和由IntegratedML构建的预测模型来建立“机器学习沙箱”进而构建应用程序。 如果你错过了本次内容,请查看 "AD000 针对医疗应用的Health Insight& 和IntegratedML展示 ". 明天还将有3场关于IntegratedML的单独会议: "CL006 IntegratedML入门", "DA006 如何使用H2O和IntegratedML", 和 "DA005 使用IntegratedML和DataRobot进行机器学习"! 自适应分析 上周我们还公布了InterSystems IRIS自适应分析, 通过对InterSystems IRIS和IRIS医疗版进行扩展,可为分析最终用户提供更大的灵活性、可扩展性以及更高的效率。 今天有两场会议提供了更多关于这方面的信息。第一场会议简单介绍了计划的方案及其潜在收益,第二场会议对该方案能够解决的问题类型进行了演示和讨论。 我们正在寻找早期采用者,如果您有兴趣,请联系Carmen Logue。明天的会议将涉及更多有关数据仓库 和 商业智能 的信息,敬请关注。 嵌入式Python 上周主题报告中的另一项重要信息是我们在将来会提供嵌入式的Python支持,我们已经对其进行了简要介绍。借助嵌入式Python,IRIS内核可以并排运行Python和ObjectScript,以高速访问Python中的数据,并在Python和ObjectScript之间进行了桥接。其实,我们已经获得了在Objectscript中使用嵌入式Python的经验,包括加载Python库、调用方法和函数等等。我们即将举办一场关于如何在SQL中使用嵌入式Python的分享,欢迎大家观看。如果您有兴趣帮助我们开发嵌入式Python,请通过python-interest@intersystems.com.与我们联系。 Kafka 今天我们还宣布了InterSystems将为具有IRIS互操作性的Apache Kafka提供内置支持。Kafka是世界上扩展性最强(最受欢迎)的流数据服务。企业可以将其应用在消息队列、更改数据捕获等所有事件中。该集成系统支持多种系统架构与IRIS进行互操作,无需使用额外代码实现。 明天的专题会议还将继续介绍Kafka集成相关的话题,因为最新版本的InterSystems API Manager(IAM)同样添加了Kafka插件,可将API流量发布到Kafka主题。我们已经在IAM中很好地演示了开发者门户的增强功能,可以帮助您更加轻松地构建和定制真正适合公司品牌的开发者门户。我们明天将详细介绍IAM。 VS Code - ObjectScript 哇,我们已经介绍了这么多公告了,但我们想说的远不止这些。在上周的主题峰会上,我们正式发布了1.0版本的 Intersystems ObjectScript for Visual Studio Code 插件,将ObjectScript开发引入了市场上最受欢迎的IDE(集成开发环境)平台。该版本可以在所有的操作系统上运行,并支持GitHub和Azure DevOps等客户端源代码控制系统。尤其值得注意的是,这是一项源自开发者论坛的开源项目,InterSystems将和我们的开发者们将持续合作开发该项目。 DEE004 会议对该项目进行了快速概述和简短演示。可以点击此处的演示区域 或在 YouTube上查看更多的演示内容。 In DEE007 在DEE007 会议中,我们的几位产品经理和VS Code – ObjectScript项目管理委员会的两名社区成员一起为大家带来了精彩的现场问答。本周将有更多关于VS Code的内容——请查看 "DEE006 用于ObjectScript的Visual Studio代码:选择IDE/源代码控件组合" 和 "DEE005 用于ObjectScript的Visual Studio代码:服务器端源代码控件". 今天开始的 实战实验室也不可错过。 我们还提供了IntegratedML实战实验室和其他热门话题,例如下面这个话题: FHIR和API管理 FHIR一直是业界的热门话题,也是我们的合作伙伴比较感兴趣的话题,所以我们在许多专题会议中都涵盖了FHIR相关的主题。我们简要介绍了FHIR——FHIR是医疗保健可操作性的新标准,受到了美国政府的大力支持。美国政府通过ONC最终规则,对FHIR进行标准化并禁止信息封锁。英国等其他国家的政府也在授权FHIR参与所有新的数字健康计划。 IAM可妥善处理众多开发事务,例如安全性、日志记录、监视和控制对FHIR资源的访问等,从而简化FHIR应用程序的构建流程。用户可以通过开发门户轻松学习和测试FHIR查询。建议大家观看。 可以通过FHIR搜索查询患者、观察、诊断报告等FHIR资源。语法基于REST,但是必须为每个FHIR资源查找查询参数。使用修饰符和连接(例如 _include和_revinclude)的高级查询有时会出现令人困惑的语法,不过我们构建了一个工具来简化这些查询,从而提高生产效率并减轻初学者的负担。 NLP 在线上峰会的推动下,我们还发布了开源NLP(自然语言处理)库iKnow的1.0版本,现已完全以Python包的形式提供。Aohan和Benjamin在DA010专题会议中对这一激动人心的版本进行了概述及使用介绍,相关演示可在 演示区.查看。 演示区 您可以在线上峰会注册中心主区打开The 演示区 ,并按照自己的节奏观看超过25个的演示。 现场问答 第一天结束时我们进行了现场问答,明后两天也会有现场问答环节。大家可以借此机会,针对专题会议中或上周主题演讲中遇到到的任何问题向我们提问。更多信息请参见: https://community.intersystems.com/post/ask-intersystems-product-managers-live-qa-session-vsummit20 这绝对是忙碌的一天!接下来还有两天的专题会议。如果您还没有注册,现在还为时不晚,您可以点击这里 免费注册。 那么,您今天关注的重点是什么呢?请在下方的评论中告诉我们。 祝好! Jeff
文章
Lilian Huang · 十二月 31, 2022

HL7 ADT消息的类型和ADT^A04的例子

在上一篇文章中,我们讨论了标准 HL7v2 的起源、结构和消息类型。现在让我们看一下最常用的消息类型之一及其结构示例。我说的是 ADT。 HL7 ADT 消息(入院、出院、转院)用于在医疗机构传达基本患者信息、就诊信息和患者状态。 ADT 消息是使用最广泛且容量最大的 HL7 消息类型之一,因为它为许多触发事件提供信息,包括患者入院、注册、取消、更新、出院、患者数据合并等。 所有患者信息都输入到医疗机构的医院信息系统 (HIS) 或电子病历 (EMR) 中。这些系统中的新患者或更新通过 ADT 消息分发到辅助系统,以保持当前患者数据的同步。 此消息有很多子类型,具体取决于情况和要采取的操作。这里是其中的一些。 子类型 描述 ADT^A01 病人入院/就诊 ADT^A02 病人转运 ADT^A03 病人出院 ADT^A04 患者登记 ADT^A05 患者入院前 ADT^A08 患者信息更新 ADT^A11 取消入院 ADT^A12 取消患者转运 ADT^A13 取消患者出院 如果我们查看此类消息的一般结构,它将由以下部分组成。考虑到 HL7v2 的不同版本支持向后兼容,在更高的版本中你可能有更多的字段。 HL7 ADT 的片段 段 描述 MSH 消息头:每条消息都必须包含一个消息头,在 ADT 中称为 MSH 段。标头包含有关发送系统和位置、接收系统和位置、创建消息的日期和时间、正在通信的触发事件类型以及正在使用的 HL7 消息版本的信息。 EVN 事件类型:传达为了生成消息而发生的事件。该段是数据流的关键部分,因为它根据事件类型指示消息发送的位置和时间。 PID 患者识别:重要的患者身份信息,包括患者人口统计信息。 [{NK1}] 近亲联系信息:患者最亲近的亲属的联系信息,以备需要联系时使用。必要时可以重复此部分。 PV1 患者就诊:有关患者帐户的信息或任何特定访问的详细信息,例如服务设施、主治医生和访问 ID 都保存在该部分中。 [PV2] 患者就诊 - 附加信息:该部分是患者就诊具体信息的延续,并且是传达入院原因的部分。如果消息中包含 DG1 段,则它是可选段。如果没有 DG1 段,则需要 PV2 段。 [{OBX}] 观察/结果:每个 OBX 段都包含有关单个医学观察或结果的信息。此段在 ORU(观察报告)消息中更常用。必要时可以重复。 [{AL1}] 过敏信息:包含有关患者过敏的信息,包括过敏原类型、反应和严重程度。必要时可以重复此部分。 [{DG1}] 诊断信息:该部分包含有关患者诊断的信息,并使用 ICD 编码标准来传达特定疾病、体征、症状、异常、患者投诉等。 [{PR1}] 程序:保存有关可以对患者执行的各种程序的信息,并且可以重复以传达有关多个程序的信息。 [{ROL}] 角色:从患者记录中添加、更新、更正和删除所需的人员和事件涉及信息。 [{GT1}] 担保人信息:有关患者担保人(即对患者帐户负有财务责任的人)的信息保存在该部分中。该段在与保险计费应用程序通信时特别有用。 [{IN1..2..3}] 保险信息:生成患者和保险账单所必需的保险单覆盖信息,例如计划和提供者标识符。 [ ] = 可选段,{ } = 重复段 现在我们知道了此类消息的构建块,让我们看一个示例。 HL7 ADT^A04 消息示例 假设我们有以下消息: MSH |^~\&| EPIC | EPICADT | SMS | SMSADT |202211031408| CHARRIS | ADT ^ A04 |1817457| D |2 .5 | EVN ||202211030800||||202211030800 PID ||0493575^^^2^ ID 1|454721|| DOE ^ JOHN ^^^^| DOE ^ JOHN ^^^^|19480203| M || B |254 MYSTREET AVE ^^ MYTOWN ^ OH ^44123^ USA ||(216)123 -4567 ||| M | NON |400003403~1129086| NK1 || ROE ^ MARIE ^^^^| SPO ||(216)123 -4567 || EC ||||||||||||||||||||||||||| PV1 || O |168 ~219~ C ~ PMA ^^^^^^^^^||||277^ ALLEN MYLASTNAME ^ BONNIE ^^^^|||||||||| ||2688684|||||||||||||||||||||||||202211031408||||||002376853 在此示例中,您会注意到我们有 5 个不同的段,由回车符分隔: MSH 、 EVN 、 PID 、 NK1和PV1 。 您还会注意到每个段都包含许多复合材料。例如,在第一行中,竖线字符 (|) 分隔 SMS 和 SMS ADT 段。 最后,在第二行,名字子字段 JOHN 与姓氏 DOE 使用 ^ 字符分隔。 此外,始终有一个所用 HL7v2 标准版本的指示符,以便接收应用程序知道在哪个字段中期望什么。在本例中,版本为 2.5。 现在让我们看看这条消息的每一段,了解它携带的信息。 段MSH MSH|^~\&|EPIC|EPICADT|SMS|SMSADT|202211031408|CHARRIS|ADT^A04|1817457|D|2.5| 场地 长度 选择性 价值 MSH.1 字段分隔符 1个 必需的 | MSH.2 编码字符 4个 必需的 ^~\& MSH.3 发送申请 227 选修的 史诗 MSH.4 发送设备 227 选修的 EPICADT MSH.5 接收申请 227 选修的 短信 MSH.6 接收设施 227 选修的 短消息ADT MSH.7 消息日期/时间 26 必需的 202211031408 MSH.8 安全 40 选修的 查理斯 MSH.9 消息类型 15 必需的 ADT^A04 MSH.10 消息控制 ID 20 必需的 1817457 MSH.11 处理编号 3个 必需的 丁 MSH.12 版本号 60 必需的 2.5 MSH.13 序列号 15 选修的 MSH.14 延续指针 180 选修的 MSH.15 接受确认类型 2个 选修的 MSH.16 申请确认类型 2个 选修的 MSH.17 国家代码 3个 选修的 MSH.18 字符集 16 选修的 MSH.19 消息的主要语言 250 选修的 MSH.20 备用字符集处理方案 20 选修的 MSH.21 消息配置文件标识符 427 选修的 段EVN EVN||202211030800||||202211030800 场地 长度 选择性 价值 EVN.1 事件类型代码 3个 向后兼容性 EVN.2 记录日期/时间 26 必需的 202211030800 EVN.3 日期/时间计划事件 26 选修的 EVN.4 事件原因代码 3个 选修的 EVN.5 操作员编号 250 选修的 EVN.6 事件日期/时间 26 选修的 202211030800 EVN.7 活动设施 241 选修的 段PID PID||0493575^^^2^ID 1|454721||DOE^JOHN^^^^|DOE^JOHN^^^^|19480203|M||B|254 MYSTREET AVE^^MYTOWN^OH^44123^USA ||(216)123-4567|||男|非|400003403~1129086| 场地 长度 选择性 价值 PID.1 设置 ID - PID 4个 选修的 PID.2 患者编号 20 向后兼容性 0493575^^^2^ PID.3 患者标识符列表 250 必需的 1 PID.4 备用患者 ID - PID 20 向后兼容性 454721 PID.5 患者姓名 250 必需的 能源部^约翰^^^^ PID.6 母亲的娘家姓 250 选修的 能源部^约翰^^^^ PID.7 出生日期/时间 26 选修的 19480203 PID.8 行政性 1个 选修的 米 PID.9 患者别名 250 向后兼容性 PID.10 种族 250 选修的 乙 PID.11 患者地址 250 选修的 254 MYSTREET AVE^^MYTOWN^OH^44123^美国 PID.12 县代码 4个 向后兼容性 PID.13 N电话号码 - 主页 250 选修的 (216)123-4567 PID.14 电话号码 - 业务 250 选修的 PID.15 主要语言 250 选修的 PID.16 婚姻状况 250 选修的 米 PID.17 宗教 250 选修的 非 PID.18 患者帐号 250 选修的 400003403~1129086 PID.19 SSN 号码 - 患者 16 向后兼容性 PID.20 驾照号码 - 患者 25 向后兼容性 PID.21 母亲的身份证明 250 选修的 PID.22 民族 250 选修的 PID.23 出生地 250 选修的 PID.24 多胞胎指标 1个 选修的 PID.25 出生顺序 2个 选修的 PID.26 国籍 250 选修的 PID.27 退伍军人军人身份 250 选修的 PID.28 国籍 250 向后兼容性 PID.29 患者死亡日期和时间 26 选修的 PID.30 患者死亡指标 1个 选修的 PID.31 身份未知指示器 1个 选修的 PID.32 身份可靠性代码 20 选修的 PID.33 最后更新日期/时间 26 选修的 PID.34 最后更新工具 241 选修的 PID.35 物种代码 250 有条件的 PID.36 品种代码 250 有条件的 PID.37 拉紧 80 选修的 PID.38 生产类代码 250 选修的 PID.39 部落公民身份 250 选修的 NK1段 NK1||ROE^MARIE^^^^|SPO||(216)123-4567||EC||||||||||||||||||||||||| 场地 长度 选择性 价值 NK1.1 套装 ID - NK1 4个 必需的 NK1.2 NK名称 250 选修的 ROE^MARIE^^^^ NK1.3 关系 250 选修的 SPO NK1.4 地址 250 选修的 NK1.5 电话号码 250 选修的 (216)123-4567 NK1.6 公司电话号码 250 选修的 NK1.7 联系人角色 250 选修的 欧共体 NK1.8 开始日期 8个 选修的 NK1.9 结束日期 8个 选修的 NK1.10 近亲/关联方职称 60 选修的 NK1.11 近亲/关联方职位代码/类别 20 选修的 NK1.12 近亲/关联方雇员编号 250 选修的 NK1.13 组织名称 - NK1 250 选修的 NK1.14 婚姻状况 250 选修的 NK1.15 行政性 1个 选修的 NK1.16 出生日期/时间 26 选修的 NK1.17 生活依赖 2个 选修的 NK1.18 动态状态 2个 选修的 NK1.19 国籍 250 选修的 NK1.20 主要语言 250 选修的 NK1.21 生活安排 2个 选修的 NK1.22 公示码 250 选修的 NK1.23 保护指示灯 1个 选修的 NK1.24 学生指标 2个 选修的 NK1.25 宗教 250 选修的 NK1.26 母亲的娘家姓 250 选修的 NK1.27 国籍 250 选修的 NK1.28 民族 250 选修的 NK1.29 联系原因 250 选修的 NK1.30 联络人姓名 250 选修的 NK1.31 联络人电话 250 选修的 NK1.32 联络人地址 250 选修的 NK1.33 近亲/关联方的标识符 250 选修的 NK1.34 工作现状 2个 选修的 NK1.35 种族 250 选修的 NK1.36 差点 2个 选修的 NK1.37 联系人社会安全号码 16 选修的 NK1.38 近亲出生地 250 选修的 NK1.39 贵宾指标 2个 选修的 段 PV1 PV1||O|168 ~219~C~PMA^^^^^^^^^||||277^ALLEN MYLASTNAME^BONNIE^^^^||||||||| ||2688684|||||||||||||||||||||||202211031408||||||002376853 场地 长度 选择性 价值 PV1.1 设置 ID - PV1 4个 选修的 PV1.2 病人等级 1个 必需的 欧 PV1.3 分配的患者位置 80 选修的 168~219~C~PMA^^^^^^^^^ PV1.4 录取类型 2个 选修的 PV1.5 预准号码 250 选修的 PV1.6 先前的患者位置 80 选修的 PV1.7 主治医生 250 选修的 277^艾伦我的姓氏^邦尼^^^^ PV1.8 推荐医生 250 选修的 PV1.9 咨询医生 250 复古兼容性 PV1.10 医院服务 3个 选修的 PV1.11 临时位置 80 选修的 PV1.12 准考前测试指示器 2个 选修的 PV1.13 重新接纳指标 2个 选修的 PV1.14 承认来源 6个 选修的 PV1.15 动态状态 2个 选修的 PV1.16 贵宾指标 2个 选修的 PV1.17 录取医生 250 选修的 PV1.18 患者类型 2个 选修的 PV1.19 访问次数 250 选修的 2688684 PV1.20 金融类 50 选修的 PV1.21 收费价格指标 2个 选修的 PV1.22 礼遇守则 2个 选修的 PV1.23 信用评级 2个 选修的 PV1.24 合约代码 2个 选修的 PV1.25 合约生效日期 8个 选修的 PV1.26 合同金额 12 选修的 PV1.27 合同期 3个 选修的 PV1.28 兴趣代码 2个 选修的 PV1.29 转移到坏账代码 4个 选修的 PV1.30 转移到坏账日期 8个 选修的 PV1.31 坏账代理代码 10 选修的 PV1.32 坏帐转移金额 12 选修的 PV1.33 坏账回收金额 12 选修的 PV1.34 删除账户指标 1个 选修的 PV1.35 删除帐户日期 8个 选修的 PV1.36 出院处置 3个 选修的 PV1.37 出院地点 47 选修的 PV1.38 饮食类型 250 选修的 PV1.39 维修设施 2个 选修的 PV1.40 床位状况 1个 复古兼容性 PV1.41 帐户状态 2个 选修的 PV1.42 待定地点 80 选修的 PV1.43 先前的临时位置 80 选修的 PV1.44 承认日期/时间 26 选修的 202211031408 PV1.45 出院日期/时间 26 选修的 PV1.46 当前患者余额 12 选修的 PV1.47 总费用 12 选修的 PV1.48 总调整 12 选修的 PV1.49 总付款 12 选修的 002376853 PV1.50 备用访问 ID 250 选修的 PV1.51 访问指标 1个 选修的 PV1.52 其他医疗保健提供者 250 选修的 现在就是这样。在官方门户网站上找到有关 HL7v2 的更多信息。 欢迎在评论部分提出任何意见/建议。
文章
姚 鑫 · 九月 16, 2022

第三十四章 在 Windows 上使用 IRIS(一)

# 第三十四章 在 Windows 上使用 IRIS(一) 在 `Microsoft Windows` 平台上管理 `IRIS` 数据平台实例非常简单。可以使用管理门户和 `IRIS` 启动器执行大多数任务。还可以从命令提示符控制 `IRIS` 实例。 本主题使用 `install-dir` 来指代 `IRIS` 安装目录——可以在安装指南的默认安装目录部分找到默认目录。 **注意:不要对 `IRIS IRIS.DAT` 数据库文件使用 `Windows` 文件压缩。 (通过右键单击 `Windows` 资源管理器中的文件或文件夹并选择属性,然后选择高级,然后压缩内容以节省磁盘空间来压缩文件;压缩后,文件夹名称或文件名在 `Windows` 资源管理器中呈现为蓝色。)如果压缩一个`IRIS.DAT` 文件,它所属的实例将无法启动,并出现误导性错误。** # 管理对 `IRIS` 实例的访问 ## `InterSystems` 服务 所有 `IRIS job`和进程都从 `InterSystems` 服务、 `IRIS Controller for ` 运行。 `InterSystems` 服务具有的权限由其关联的 `Windows` 用户帐户决定。当这是本地 `SYSTEM` 帐户时, `IRIS` 可以访问 `Windows` 系统上的所有文件和权限。为了维护一个更安全和限制性更强的环境,应该为服务选择一个仅具有所需权限和访问权限的 `Windows `帐户。 在正常安装和锁定安装中, `IRIS` 创建两个本地用户组来授予对实例的访问权限。当为 `InterSystems` 服务指定一个 `Windows` 用户帐户而不是默认的本地 `SYSTEM` 帐户时 `IRIS` 将该 `Windows` 用户帐户添加到每个组。这些组是: - `IRISServices`,它授予启动、停止和控制 `IRIS` 实例的权限。 - `IRIS_Instance_instancename`,授予对安装树的访问权限——`IRIS` 的安装目录及其所有子目录。 **注意:这些组可能不会授予 `IRIS` 执行某些操作所需的所有权限。要确保 `IRIS` 对安装树之外的所有实例、日志和日志文件具有所需的访问权限,请授予 `IRIS_Instance_instancename` 组对这些文件和包含它们的目录的完全访问权限。如有必要,还可以授予该组额外的权限。** 通常,在安装期间为 <instance-name> 选择 `IRIS` 控制器的 `Windows` 帐户,如安装指南的 `Windows` 用户帐户部分所述。 ## 限制对安装树的访问 默认情况下,任何经过身份验证的 `Windows` 用户都可以访问安装树,这可能是不可取的。以下命令为经过身份验证的用户删除 `Windows` 访问控制条目 (ACE): ```java icacls /remove "NT AUTHORITY\Authenticated Users" ``` 运行此命令后,只有管理员用户或 `IRIS_Instance_instancename` 组中的用户才能访问安装树。 **重要提示:如果不这样做,任何可以登录到主机 `Windows` 系统的用户都可以轻松地修改文件、更改设置或完全禁用 `IRIS` 实例。** 在某些情况下,除了 `IRIS` 控制器用于 ` ` 服务的帐户之外,可能还希望授予另一个 `Windows` 帐户访问安装树的权限。例如,这可能包括运行自动化任务的帐户,或直接登录到 `Windows` 服务器以访问 `IRIS` 的帐户(通过本地终端会话或调用自定义调用可执行文件)。可以通过将任何此类帐户添加到 `IRIS_Instance_instancename` 组来为其提供所需的访问权限。 # 更改 InterSystems 服务帐户 在命令行中输入以下内容以更改用于 `IRIS Controller for `的` Windows` 用户帐户: ```java \bin\IRISinstall.exe setserviceusername ``` 此命令将 `Windows` 用户帐户更改为指定的帐户。它还将用户添加到 `IRISServices` 和 `IRIS_Instance_instancename` 组,并在必要时创建这些组。运行此命令并重新启动 `IRIS` 实例后,该实例将在新指定的 `Windows` 用户帐户下运行。
文章
Michael Lei · 六月 26, 2022

以程序化的方式检查审计设置

下面的代码允许用户查看其实例的审计设置。通过运行类方法 "test "来运行该代码。: class objectscript.checkAudit Extends %RegisteredObject { classmethod test() { w "Checking for Auditing...",! Set SYSOBJ = ##class(Security.System).%OpenId("SYSTEM") If +SYSOBJ = 0 Set SYSOBJ = ##class(Security.System).%New() i SYSOBJ.AuditEnabled { w "Security Auditing is enabled for the following services",! s rs=##class(%ResultSet).%New("Security.Events:ListAllSystem") s sc=rs.Execute() If $$$ISERR(sc) Do DisplayError^%apiOBJ(sc) Quit while rs.%Next() { d:rs.Data("Enabled")="Yes" rs.%Print() } d rs.Close() s rs=##class(%ResultSet).%New("Security.Events:ListAllUser") s sc=rs.Execute() If $$$ISERR(sc) Do DisplayError^%apiOBJ(sc) Quit while rs.%Next() { d:rs.Data("Enabled")="Yes" rs.%Print() } d rs.Close() } } } 这是 GitHub的链接: https://github.com/intersystems-community/code-snippets/blob/master/src/cls/objectscript/checkAudit.cls