InterSystems 常见问题系列
可以通过 TRY-CATCH 来完成:
#dim ex As%Exception.AbstractExceptionTRY {
//Code that causes an error
}
CATCH ex {
do ex.Log()
}如果用了 ^%ETN, 从BACK 接入点 (BACK^%ETN)处调用.
请参考另外一篇文章: 如何使用命令获得应用错误 (^ERRORS)
可以通过 TRY-CATCH 来完成:
#dim ex As%Exception.AbstractExceptionTRY {
//Code that causes an error
}
CATCH ex {
do ex.Log()
}如果用了 ^%ETN, 从BACK 接入点 (BACK^%ETN)处调用.
请参考另外一篇文章: 如何使用命令获得应用错误 (^ERRORS)
DBServer |
ECPApp |
| 10.1.30.231 | 10.1.30.232 |
如果要让超时功能失效, 在DSN设置查询超时为disabled:
Windows Control Panel > Administrative Tools > Data Sources (ODBC) > System DSN configuration
如果勾选了Disable query timeout , 超时就会失效.
如果想在应用侧修改,你可以在ODBC API 层设置:在连接数据源之前,调用ODBC SQLSetStmtAttr功能设置SQL_ATTR_QUERY_TIMEOUT 属性
如果您想在InterSystems 产品启动时执行一个操作系统可执行文件,命令或者程序,可以在SYSTEM^%ZSTART routine里面写明流程 ( %ZSTART routine在 %SYS 命名空间里面创建).
在 SYSTEM^%ZSTART 里面写代码之前, 请确保他可以在任何情况下能正常工作
如果 ^%ZSTART routine 写的不对,或者没有响应或者发生错误,InterSystems 产品可能会无法启动。
更多信息,请参考一下文档。
About writing %ZSTART and %ZSTOP routines [IRIS]
About writing %ZSTART and %ZSTOP routines
InterSystems 产品里数据 (表、对象、实例数据) 是存在global 变量里的。
每个global 的数据大小可以从管理门户中中点击属性查看Management Portal > System > Configuration > Local Database > Globals page, 然后在global 属性页点击计算大小Calculate Size 按钮。
你可以在终端上调用^%GSIZE 来在命名空间里显示数据大小,方法如下.
流程如下
1. 上传到 FTP server
要求:
熟练掌握:InterSystems Cache, PHP, API开发. 熟练英语沟通,工作时间能够适应美国时区
工作时间--即刻开始,兼职,-20-30 小时/周,持续1-2个月;
关于我们: 加州IT咨询公司Redline Coders
感兴趣直接联系英文社区:https://community.intersystems.com/node/568846
从发布InterSystems IRIS®数据平台2022.3开始,InterSystems修改了许可证强制执行机制,以包括REST和SOAP请求。由于这种变化,在升级后,使用REST或SOAP的非处理器核数的许可证环境下,用户可能会遇到更高的许可证消耗。要确定此警报是否适用于您的InterSystems许可证,请按照下面链接的FAQ中的说明进行操作。
下表总结了强制执行变更情况:
|
产品 |
许可证强制执行中是否包含REST & SOAP 请求? |
|
InterSystems Caché® |
是 |
|
InterSystems Ensemble® |
否 |
|
InterSystems IRIS, InterSystems IRIS® for Health, and Health Connect prior to 2022.3 |
否 |
|
InterSystems IRIS, InterSystems IRIS for Health, and Health Connect 2022.3 and later |
是 |
我在使用PHP 链接 Cache时 超长字段有一半乱码,其他字段正常,这是为什么
我使用Call 来访问的视图 unixODBC 链接 windows ODBC链接 均出现乱码 请求帮助
%SYS.Journal.Record 类有一个查询(query), List, 可以列出Journal文件中记录的数据修改历史。例如,要查询谁对global节点^QP(1,2)做过修改,可以使用如下代码。它查询Journal文件(输入参数pFilePath)中的global节点(输入参数pSearchGlobal)的操作:
2023.12.31之前的所有百讲课程,总计261讲。IRIS、Cache编程知识的免费课程。日志总是出现如下“严重”级别报错,这个错误要紧吗?
03/13/24-09:44:12:182 (39059) 2 [SYSTEM MONITOR] WriteDaemon Alert: Write Daemon still on pass 581
在 Documentation 里搜索关键词也只有如下信息,哪里还能找到更详细的教程或说明呢?
SYS.History.WriteDaemon — The properties in this class describe the performance of write daemon cycles. The system automatically keeps track of the last 20 write daemon cycles, and the History Monitor stores the data for the cycles that occurred in each interval. Typically, there are multiple cycles within each interval.
Cache 的资料太少了,想买本书来学习都买不到。
生产级别的Cache集群往往由多个Cache实例组成,而Cache自带的管理界面不能满足对整个集群的监控,因此在实际使用中,往往需要投入人力对实例进行性能巡检。即便如此,这种巡检模式实时性低、告警的漏报错报率高、对既往数据追溯能力差。针对Cache/IRIS集群管理的这一缺憾,本文提出以Prometheus监控Cache集群的方案,最终实现了对集群全实例监控指标的自动化采集,以及准实时监控数据展示和告警提示。
如果系统24小时没有停止,旧的日志文件将根据“日志文件删除设置”在0:30删除。
导致日志文件保留的时间早于“日志文件删除设置”的一个可能原因是存在仍处于开放状态的事务。
在这种情况下,您将能够通过搜索执行事务的进程并完成事务来删除日志文件。
下面的示例检查是否存在未完成的事务,如果存在,则输出目标文件名和日志记录信息。
(示例可以从这里下载
*注意*如果要检查的日志文件较大或日志文件较多,则执行需要时间,因此请联系我们的支持中心。
作为针对数据导入处理性能和错误(锁定表已满)的衡量标准,可能需要调整常规内存堆 (gmheap) 和锁定表大小 (locksiz) 参数。
事实上,您可以使用终端和管理门户来检查当前分配了多少通用内存堆。
★终端用
// 一般メモリヒープサマリUSER> w $system .Config.SharedMemoryHeap.GetUsageSummary() 4992226 , 6029312 , 59441152通用内存堆摘要以使用量、分配量和配置量(字节)的形式显示返回值。
使用量是分配的锁表、进程表等实际使用的量。
分配量是gmheap区域中锁表、进程表等分配的量。
配置量为gmheap(KB)+IRIS系统附加区,即当前最大可用量(实际通用内存堆区值)。
如上所述,配置数量与配置参数 gmheap 的独立值不匹配。
这是因为IRIS自动将内部使用的内存区域添加到配置参数gmheap中来配置通用内存堆区域。详情请参阅下面的文档。
您可以使用以下命令获取锁表的使用情况:
返回值显示为可用量、用户可用量和已用量(字节)。详情请参阅这篇文章。
%SYS > w##class (SYS. Lock ).GetLockSpaceInfo() 16772624 , 16764624 , 4592
★用于管理门户
您可以从“系统操作”>“系统使用情况”>“共享内存堆使用状态”进行检查。
目前在使用Codemirror展示cache的代码,codemirror能支持csp和js的代码高亮,但是cls的代码没有对应插件,不知具体关键字的正则表达式,是否有对应插件或解决方法,可是cls代码高亮。
在日常Cache运维过程中可能会由于数据或者程序等原因造成锁的异常增长,导致数据库性能受到影响会出现程序报错或卡顿无法正常运行的问题。遇到此类问题需查看数据库当前锁列表情况,找到出现次数最多关键锁,根据关键锁对应的进程来判断处理。总结有以下三种方式查看关键锁。
|
查看方式 |
优点 |
缺点 |
|
第一种 |
易操作、方式简便 |
慢、锁数量太多无法显示 |
|
第二种 |
快、不受网页限制 |
易忘、需要输入准确命令 |
|
第三种 |
快、灵活、直接显示关键锁信息 |
需定位准确命名空间 |
下面给出自定义程序实例,程序逻辑为按命名空间循环所有锁信息,通过计数器方式记录所有锁当中出现次数最多的一个,输出其信息。入参为数据库中不同命名空间,输出结果为锁名称及锁的所有者,所有者一般为进程ID或ECP。
本主题介绍如何发送HTTP请求(如POST或GET)和处理响应。
可以创建%Net.HttpRequest的实例来发送各种HTTP请求并接收响应。此对象相当于Web浏览器,可以使用它发出多个请求。它会自动发送正确的cookie,并根据需要设置Referer标头。
要创建HTTP请求,请使用以下常规流程:
%Net.HttpRequest的实例。localhost。注意:不要将http://或https://作为服务器值的一部分。这将导致错误#6059:无法打开到服务器http:/的TCP/IP套接字。
%Net.HttpRequest实例的get()方法或其他方法来发送HTTP请求,如“发送HTTP请求”中所述。可以从实例发出多个请求,它将自动处理cookie和Referer标头。
注意:如果创建此HTTP请求是为了与生产出站适配器(EnsLib.HTTP.Outbound Adapter)一起使用,那么请改用该适配器的方法来发送请求。
iris 是数据平台,更是一种数据库。对于熟悉SQL语句的人来说,会认为“既然是数据库,数据应该就能使用sql语句来查询”。这是对的,但是因为有global这个概念,保存的数据可能在global里面,而没有对应的表,也可能保存在类的参数定义里面。这些数据,不能使用sql直接查询。要查询iris数据库的数据,通常有几种方式:1.直接查询表的数据。2.查询视图。3.调用存储过程(call 命令)。其中要查询“只存于global里面或者类参数里定义的数据”,只有使用存储过程。但是存储过程有个问题,就是程序如果迁移到低版本的cache数据库后,数据类型的定义会有问题,且不再支持使用select的方式,只能使用call。这对于第三方熟悉sql的人员来说很不友好。因此结合global和表的关系,介绍一种我称为“进程表”的表。进程表,指数据只存于该进程中,global的样式为"^||global名“。通常按照默认存储新加一个持久类(对应会生成一个表),然后手动的把global改成进程global,也就是加上”||“。然后写个方法,把需要查询出来的数据写入进程global。这样就能查询出来 了。调用形式为 SELECT * FROM People WHERE People_GLB()=1。
示例如下:
如题,我根据日志发现并没有snmpext.dat文件
通过在持久类(=table)定义中提供的%BuildIndices() 方法的参数中指定要重建索引的 ID 的开始值和结束值,您可以仅重建该范围内的索引。
例如,要仅针对 ID=10 到 20 重建 Sample.Person 类中的 NameIDX 索引和 ZipCode 索引,请执行以下代码(ID 范围在第 5 个和第 6 个参数中指定)。
set status = ##class (Sample.Person). %BuildIndices ( $LB ( "NameIDX" , "ZipCode" ), 1 ,, 1 , 10 , 20 )$LB() 是$ListBuild() 函数。 %BuildIndices() 方法使用它来指定索引名称。
有关如何重建索引的更多信息,请参阅文档。
2018.1版本请参考此文档。
参考 https://blog.csdn.net/InterSystems/article/details/115350635 搭建 mirror ,获取数据变更,示例给出了获取数据变更的代码:
Class ZCustom.MirrorDejournal Extends SYS.MirrorDejournal
{
Method RunFilter(
MirrorDBName As %String,
GlobalReference As %String,
RecordType As %String,
Address As %Integer) As %Integer
{
Set ^CDCLog( $I($^CDCLog))=$lb(MirrorDBName,GlobalReference,RecordType,Address)
Quit 1
}
示例代码将变更存储在 global 对象 CDCLog 中,想请问下获取变更前后数据,发送到外部系统,有哪些方式?
大家好,由于我目前在做一个数据分析的demo,所以需要在IRIS Data platform存储百万行数据供我测试。因此使用Populate Utility 来自动生成我需要的数据。
在这篇文章中,我将会给大家分享我使用 Populate utility 包括POPSPEC parameter的心得和经验。
1.创建两个persistent class , popPatient用于存储病人信息, popSign用于存储收集到的对应病人的生命信息。在定义persistent class时需要在后面引用(%Persistent, %Populate)以支持调用Populate Utility工具.
2.1 为了使我们生成出来的数据更贴合正常的情况,我们不能取一个超出常识的值比如心跳1000次一分钟。所以我使用(MAXVAL 和 MINVAL)来限制了生成数据的区间。
在popPatient 中如图所示我限制了生成病人年龄的取值范围
在popSign中限制了心跳的区间
我们经常收到有关 InterSystems IRIS 数据平台支持的平台和框架列表最近和即将发生的更改的问题。此更新旨在分享最近的变化以及我们对即将发生的变化的当前最佳知识,但预测未来是一件棘手的事情,这不应被视为承诺的路线图。
话虽如此,接下来是更新……
IRIS 生产环境操作系统和 CPU 架构
红帽Linux企业版RHEL
※如果您想比较使用Mirror、Shadow或其他机制复制的数据库,请使用此方法。
您可以使用 DATACHECK 实用程序来比较Global。请参阅下面的文档。
DataCheck 概述 [IRIS]
***
Routines比较使用系统例程 %RCMP 或管理门户。
以下是如何在管理门户中使用它。
.png)
FHIR® SQL Builder或 Builder 是 InterSystems IRIS 医疗版数据平台 的一个组件。它是一种复杂的投射工具,用于将 InterSystems IRIS 医疗版数据平台FHIR 存储库中的数据创建为自定义的 SQL 模式,而无需将数据移动到单独的 SQL 存储库中。 Builder 专门设计用于与 InterSystems IRIS 医疗版数据平台中的 FHIR 存储库和多模型数据库配合使用。
Builder 的目标是使数据分析师和商业智能开发人员能够使用熟悉的SQL分析工具使用 FHIR,而无需学习新的查询语法。 FHIR 数据以复杂的有向图编码,无法使用标准 SQL 语法进行查询。基于图的查询语言 FHIRPath 旨在查询 FHIR 数据,但它是非关系型的。 Builder 使数据管理员能够使用表、列和索引创建其 FHIR 存储库的自定义 SQL 来投射,使数据分析师能够查询 FHIR 数据,而无需学习 FHIRPath 或 FHIR 搜索语法的复杂性。
存储库将加载 FHIR 资源,您所需要做的就是配置 FHIR SQL BUILDER。
对于配置,导航到http://localhost:55037/csp/fhirsql/index.csp# /.png)
有关如何进行配置的更多详细信息,请观看此教程视频
从哪里可以下载到cache-2016的安装包?包括windows、macOS以及Linux
IRIS/Caché编码方案一直以来,编码问题像幽灵一般,不少开发人员都受过它的困扰。
试想你请求一个数据,却得到一堆乱码,丈二和尚摸不着头脑。有同事质疑你的数据是乱码,虽然你很确定传了UTF-8 ,却也无法自证清白,更别说帮同事 debug 了。
有时,靠着百度和一手瞎调的手艺,乱码也能解决。尽管如此,还是很羡慕那些骨灰级程序员。为什么他们每次都能犀利地指出问题,并快速修复呢?原因在于,他们早就把编码问题背后的各种来龙去脉搞清楚了。
ASCII标准
ASCII码,使用7 位二进制数(最高位为0)来表示所有的大写和小写字母,数字0到9、半角标点符号,以及在英语中使用的特殊控制符号。
最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母a的编码是97,小写字母z的编码是122。
在IRIS/Caché中获取字符ASCII码与二进制字符串,如下代码示例:
USER>w $a("a")
97
USER>w ##class(M.Code).LogicalToDisplay(97)
10000110
经过如下二进制转十进制计算可得出 1+32+64 = 97
2**0 + 2**5 + 2**6 = 97
Unicode