搜索​​​​

清除过滤器
文章
Jingwei Wang · 六月 6, 2022

Object Script基础知识(六)

Object Script(六) 变量的类型 ObjectScript中的变量是没有类型的,也就是说,它们没有一个指定的数据类型,可以接受任何数据值。 ObjectScript支持以下几种类型的变量: 1. 本地变量 :只有创建它的进程可以访问的变量,当该进程终止时,改变量将自动删除。一个本地变量可以从任何命名空间访问。 示例: SET str = "A string" 2. 进程私有的全局变量 : 只有创建它的进程可以访问的变量,并且在进程结束时不再存在。一个进程专用的全局变量可以从任何命名空间访问,因为它与命名空间无关。进程私有的全局变量对于临时存储大数据值特别有用。在许多情况下,它们可以替代Mgr/Temp目录的使用,在进程终止时提供自动清理。 示例: SET ^||flintstones(1)="Fred" SET ^||flintstones(2)="Wilma" 3. 全局变量 : 一个存储在InterSystems IRIS数据库中的持久性变量。一个全局变量可以从任何进程中访问,并且在创建它的进程终止后仍然存在。全局变量是针对个别命名空间的。 示例: SET ^myglobal = "This is a global stored in the current namespace" 4. i%property实例变量 当你创建任何类的实例时,系统会为该类的每个非计算属性创建一个实例变量。实例变量持有该属性的值。例如,如果一个类有Name和DOB属性,那么实例变量i%Name和i%DOB就可以在该类的任何实例方法中使用。实例变量有进程私有的。请注意,这些变量不在本地变量符号表中,不受Kill命令的影响。InterSystems IRIS也使用额外的实例变量,名称为r%PropName和m%PropName,但这些变量不支持直接使用。 5. 特殊变量(也称为系统变量) : 一组特殊的内置变量之一,用于某些应用程序使用的系统信息。所有的特殊变量都是由InterSystems IRIS提供的,并以"$"字符前缀命名。用户不能定义额外的特殊变量。特殊变量集被映射为可从所有命名空间访问。 示例: $HOROLOG
文章
姚 鑫 · 四月 12, 2021

第一章 SQL性能优化简介

# 第一章 SQL性能优化简介 InterSystems SQL支持几个特性来优化InterSystems IRIS®数据平台的SQL性能。 # 表定义优化 SQL性能从根本上取决于良好的数据架构。 将数据划分为多个表并在这些表之间建立关系对于高效的SQL是必不可少的。 描述了以下优化表定义的操作。 这些操作要求定义表,但不要求用数据填充表: - 数据存储策略:可以选择使用`%Storage.Persistent`、`%Storage.SQL`或自定义存储来存储数据。 - 全局变量命名策略:可以使用`USEEXTENTSET`参数为数据和索引查找操作指定更短、更高效的散列全局名称。 - 索引:可以为一个表字段或一组字段定义索引。可以定义几种不同类型的索引:标准索引、位图索引、位图索引和位图范围索引。SQL优化使用定义的索引而不是数据值本身来访问查询、更新或删除操作的特定记录。 # 表数据优化 根据对表中典型数据的分析,可以执行以下操作来优化表访问: - Tune Table:检查典型的表数据并生成`ExtentSize`(行数)、选择性(具有特定值的行的百分比)和`BlockCount`元数据。查询优化器使用此信息来确定最有效的查询执行计划。 - 选择性和异常值选择性:确定某个字段具有特定值的行的百分比,以及某个值是否为异常值,该值明显比该字段的其他值更常见。 # 查询优化 **在几乎所有情况下,用嵌入式SQL编写的查询的执行速度都比用动态SQL编写的查询快。还要注意,由于存在缓存查询,对于嵌入式SQL和动态SQL,重新执行查询的速度都比初始执行快得多。** 可以执行以下操作来优化特定查询的执行。这些查询优化使用现有的表定义和表数据优化: - 运行时统计:用于衡量系统上查询执行的性能。 - 显示计划显示查询的执行计划。 - 缓存查询和文字替换:维护最近动态查询的缓存,允许重新执行查询,而不会重复准备查询的开销。 - SQL语句和冻结计划允许保留查询执行计划,从而允许在不降低现有查询性能的情况下更改表。 - 索引配置和使用:用于指定如何使用现有索引。 - 索引优化提示:`%ALLINDEX`、`%IGNOREINDEX` - 联接优化提示:`%FIRSTTABLE`、`%FULL`、`%INORDER`、`%STARTTABLE` - 子查询优化提示:`%NOFLATTEN`、`%NOMERGE`、`%NOREDUCE`、`%NOSVSO` - 并行查询执行:`%Parallel` - 联合优化: `UNION %PARALLEL`, `UNION/OR` 还可以通过使用数据分片来提高对大型数据库表的查询性能。 # 配置优化 默认情况下,内存和启动设置默认为自动配置,每个进程的最大内存默认为262144 kb。要优化在生产系统上运行的SQL,应该将默认值更改为手动配置,并增加每进程的最大内存设置。 # 分片 分片是跨多个系统对数据及其关联缓存进行分区。分片集群跨多个InterSystems IRIS实例(称为碎片数据服务器)水平(即按行)对大型数据库表进行分区,同时允许应用程序通过单个实例(称为碎片主数据服务器)透明地访问这些表。 必须将表定义为分片。分片表只能在分片环境中使用;非分片表可以在分片或非分片环境中使用。并不是所有的表都适合进行分片。分片环境中的最佳性能通常是通过组合使用分片表(通常非常大的表)和非分片表来实现的 # 快速命令 InterSystems SQL支持快速选择、快速插入和快速截断表。“快速”意味着这些SQL命令的标准调用是使用高效的内部代码执行的。这些快速操作“就是工作”;没有使用特殊语法,也没有提供优化选项。 通过ODBC或JDBC的`SELECT`查询支持快速选择。JDBC上的插入操作支持快速插入。对于不涉及参照完整性的截断表操作,支持快速截断表。 并不是所有的表都支持快速操作,也不是所有的命令语法都可以使用快速执行来执行。InterSystems SQL在可能的情况下执行快速执行;如果无法执行快速执行,InterSystems SQL将执行指定命令的标准执行。
文章
姚 鑫 · 三月 13, 2021

第九章 SQL查询数据库(二)

# 第九章 SQL查询数据库(二) # 调用用户定义函数的查询 InterSystems SQL允许您在SQL查询中调用类方法。这为扩展SQL语法提供了强大的机制。 若要创建用户定义的函数,请在持久性InterSystems IRIS类中定义一个类方法。该方法必须具有文字(非对象)返回值。这必须是一个类方法,因为在SQL查询中将没有对象实例可以在其上调用实例方法。还必须将其定义为SQL存储过程。 例如,我们可以在`MyApp.Person`类中定义一个`Cube()`方法: ```java Class MyApp.Person Extends %Persistent [DdlAllowed] { /// Find the Cube of a number ClassMethod Cube(val As %Integer) As %Integer [SqlProc] { RETURN val * val * val } } ``` 可以使用`CREATE FUNCTION`,`CREATE METHOD`或`CREATE PROCEDURE`语句创建SQL函数。 要调用SQL函数,请指定SQL过程的名称。可以在可能指定标量表达式的任何地方以SQL代码调用SQL函数。函数名称可以使用其架构名称进行限定,也可以不限定。不合格的函数名称采用用户提供的模式搜索路径或系统范围内的默认模式名称。函数名称可以是定界标识符。 SQL函数必须具有用括号括起来的参数列表。参数列表可以为空,但括号是强制性的。所有指定的参数均充当输入参数。不支持输出参数。 SQL函数必须返回一个值。 例如,以下SQL查询将用户定义的SQL函数作为方法调用,就像它是内置SQL函数一样: ```sql SELECT %ID, Age, Sample.Person_Cube(Age) FROM Sample.Person ``` ![image](/sites/default/files/inline/images/1_25.png) 对于`Age`的每个值,此查询将调用`Cube()`方法并将其返回值放入结果中。 SQL函数可能是嵌套的。 如果找不到指定的功能,则InterSystems IRIS会发出`SQLCODE -359`错误。如果指定的函数名称不明确,则InterSystems IRIS会发出`SQLCODE -358`错误。 # 查询串行对象属性 使用默认存储(`%Storage.Persistent`)从类中映射为SQL的子表的串行对象属性也将在该类映射表中的单个列中映射。该列的值是串行对象属性的序列化值。该单列属性被映射为SQL `%List`字段。 例如,`Sample.Person`中的`Home`列定义为`Property Home As Sample.Address;`。它将映射到类`Sample.Address`扩展(`%SerialObject`),其中包含属性`Street`,`City`,`State`和`PostalCode`。 以下示例从各个串行对象列返回值: ```sql SELECT TOP 4 Name,Home_Street,Home_City,Home_State,Home_PostalCode FROM Sample.Person ``` 以下示例将所有串行对象列的值(按顺序)作为单个%List格式字符串返回,并将每一列的值作为%List的元素: ```sql SELECT TOP 4 Name,$LISTTOSTRING(Home,'^'),$length(Name) FROM Sample.Person ``` ![image](/sites/default/files/inline/images/2_14.png) 默认情况下,此“主页”列是隐藏的,并且不映射为`Sample.Person`的列。 # 查询集合 可以从SQL `WHERE`子句引用集合,如下所示: ```sql WHERE FOR SOME %ELEMENT(collectionRef) [AS label] (predicate) ``` `FOR SOME%ELEMENT`子句可用于指定`STORAGEDEFAULT =“ list`”的列表集合和数组。谓词可以包含对伪列`%KEY`,`%VALUE`或两者的引用。一些示例应有助于阐明如何使用`FOR SOME%ELEMENT`子句。以下返回其最喜欢的颜色包括`“红色”`的每个人的名字和最喜欢的颜色的列表。 ```sql SELECT Name,FavoriteColors FROM Sample.Person WHERE FOR SOME %ELEMENT(FavoriteColors) (%Value = 'Red') ``` ![image](/sites/default/files/inline/images/3_12.png) 任何SQL谓词都可能出现在`%Value`(或`%Key`)之后,因此例如以下也是合法语法: ```sql SELECT Name,FavoriteColors FROM Sample.Person WHERE FOR SOME %ELEMENT(Sample.Person.FavoriteColors) (%Value IN ('Red', 'Blue', 'Green')) ``` ![image](/sites/default/files/inline/images/4_8.png) 列表集合被认为是具有连续数字键1、2等的数组集合的特例。数组集合可以具有任意的非空键: ```sql FOR SOME (children) (%Key = 'betty' AND %Value > 5) ``` 除了内置列表和数组集合类型之外,还可以通过为任何属性提供`BuildValueArray()`类方法来创建通用集合。 `BuildValueArray()`类方法将属性的值转换为本地数组,其中数组的每个下标是一个`%KEY`,该值是对应的`%VALUE`。 除了可以在`%KEY`或`%VALUE`上进行简单选择之外,还可以在逻辑上连接两个集合,如以下示例所示: ```sql FOR SOME %ELEMENT(flavors) AS f (f.%VALUE IN ('Chocolate', 'Vanilla') AND FOR SOME %ELEMENT(toppings) AS t (t.%VALUE = 'Butterscotch' AND f.%KEY = t.%KEY)) ``` 此示例有两个集合:`Favors`和`TOPING`,这两个集合通过键在位置上相关。该查询限定了将`巧克力`或`香草`指定为`口味元素`的行,并且还将`奶油糖果`列为相应的`配料`,其中通过`%key`建立对应关系。 可以使用`$SYSTEM.SQL`配置方法`GetCollectionProjection()`和`SetCollectionProjection()`来确定如果将集合映射为子表,则是否将集合映射为列。在编译或重新编译该类时,对该系统范围的设置所做的更改将对每个类生效。 ## 使用说明和限制 - **`FOR SOME%ELEMENT`只能出现在`WHERE`子句中。** - **`%KEY`和`/`或`%VALUE`只能出现在`FOR`谓词中。** - **任何特定的`%KE`Y或`%VALUE`只能被引用一次。** - **`%KEY`和`%VALUE`可能不会出现在外部联接中。** - **`%KEY`和`%VALUE`可能不会出现在值表达式中(仅在谓词中)。** # 调用文本搜索的查询 InterSystems IRIS支持所谓的`“自由文本搜索”`,包括支持: - 通配符 - 填充物 - 多词搜索(也称为n-gram) - 自动分类 - 词典管理 此功能使SQL能够支持全文索引,还使SQL能够索引和引用集合的单个元素,而无需将集合属性映射为子表。虽然支持集合索引和全文索引的底层机制密切相关,但文本检索具有许多特殊属性,因此为文本检索提供了特殊的类和SQL功能。 # 伪字段 InterSystems SQL查询支持以下伪字段值: - **`%ID` —返回`RowID`字段值,而不管`RowID`字段的实际名称是什么。** - `%TABLENAME` —返回在`FROM`子句中指定的现有表的限定名称。定义表时,使用限定的字母大小写返回合格的表名,而不是`FROM`子句中指定的字母大小写。如果`FROM`子句指定了不合格的表名,则`%TABLENAME`将返回合格的表名(`schema.table`),以及从用户提供的模式搜索路径或系统范围内的默认模式名称提供的模式名称。例如,如果`FROM`子句指定`mytable`,则`%TABLENAME`变量可能返回`SQLUser.MyTable`。 - `%CLASSNAME` —返回与`FROM`子句中指定的现有表相对应的合格类名称(`package.class`)。例如,如果`FROM`子句指定了`SQLUser.mytable`,则`%CLASSNAME`变量可能返回`User.MyTable`。 注意:请勿将`%CLASSNAME`伪字段值与`%ClassName()`实例方法混淆。它们返回不同的值。 伪字段变量只能为包含数据的表返回。 如果在`FROM`子句中指定了多个表,则必须使用表别名,如以下嵌入式SQL示例所示: ```java /// d ##class(PHA.TEST.SQL).Query3() ClassMethod Query3(val As %Integer) As %Integer [ SqlProc ] { &sql(SELECT P.Name,P.%ID,P.%TABLENAME,E.%TABLENAME INTO :name,:rid,:ptname,:etname FROM Sample.Person AS P,Sample.Employee AS E) IF SQLCODEd ##class(PHA.TEST.SQL).Query3() Sample.PersonPerson table Name is: Adams,Diane F. Sample.PersonPerson table RowId is: 95 P alias TableName is: Sample.Person E alias TableName is: Sample.Employee ``` 为`%TABLE NAME`和`%CLASS NAME`列分配了默认的列名称`Literal N`,其中`n`是`SELECT`语句中伪字段变量的`select-item`位置。 # 查询元数据 可以使用Dynamic SQL返回有关查询的元数据,例如查询中指定的列数,查询中指定的列的名称(或别名)以及查询中指定的列的数据类型。 下面的ObjectScript Dynamic SQL示例为`Sample.Person`中的所有列返回列名和该列的ODBC数据类型的整数代码: ```java /// d ##class(PHA.TEST.SQL).Query4() ClassMethod Query4() { SET myquery="SELECT * FROM Sample.Person" SET rset = ##class(%SQL.Statement).%New() SET qStatus = rset.%Prepare(myquery) IF qStatus'=1 { WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT } SET x=rset.%Metadata.columns.Count() WHILE x>0 { SET column=rset.%Metadata.columns.GetAt(x) WRITE !,x," ",column.colName," ",column.ODBCType SET x=x-1 } WRITE !,"end of columns" } ``` ```java DHC-APP>d ##class(PHA.TEST.SQL).Query4() 15 Office_Zip 12 14 Office_Street 12 13 Office_State 12 12 Office_City 12 11 Home_Zip 12 10 Home_Street 12 9 Home_State 12 8 Home_City 12 7 Spouse 4 6 SSN 12 5 Name 12 4 FavoriteColors 12 3 DOB 9 2 Age 4 1 ID 4 end of columns ``` 在此示例中,列以反向列顺序列出。请注意,包含列表结构化数据的`FavoriteColors`列返回的数据类型为`12(VARCHAR)`,因为ODBC将InterSystems IRIS列表数据类型值表示为以逗号分隔的值的字符串。 # 快速查询 InterSystems IRIS支持快速选择,这是一种内部优化,用于通过ODBC和JDBC快速执行查询。此优化将InterSystems全局变量映射到Java对象。它将全局节点(数据记录)的内容作为Java对象传递。收到这些Java对象后,它将从它们中提取所需的列值并生成结果集。 InterSystems IRIS会尽可能自动应用此优化。这种优化是自动的,用户看不见。当准备好查询时,InterSystems IRIS会将查询标记为使用快速选择机制执行还是使用标准查询机制执行。 如果查询仅引用字段,常量或引用字段和`/`或常量的表达式,则快速选择将应用于`%PARALLEL`查询和针对分片表的查询。 服务器和客户端都必须支持快速选择。要在客户端中启用或禁用“快速选择”,请在类实例的定义中使用“属性”,如下所示: ```java Properties p = new Properties(); p.setProperty("FeatureOption","3"); / 1 is fast Select, 2 is fast Insert, 3 is both ``` 由于性能上的差异,对于用户来说重要的是要知道什么情况限制了快速选择的应用。 表限制:无法使用快速选择来查询以下类型的表: - 链接表 - 一个表,其主/数据映射具有多个节点 - 具有映射到同一数据位置的多个字段的表(仅可使用`%Storage.SQL`来实现) 字段限制:如果选择项列表中包含以下列,则无法使用“快速选择”执行查询。这些类型的列可以在表中定义,但是查询无法选择它们: - 流字段(数据类型`%Stream.GlobalCharacter`或`%Stream.GlobalBinary`) - 查询时计算的字段(计算的`COMPUTECODE`或瞬态) - 是列表集合的字段(具有`LogicalToOdbc`转换) - 一个执行`LogicalToOdbc`转换并且不是数据类型`%Date`,`%Time`或%PosixTime`的字段 - 覆盖了`LogicalToOdbc`转换代码的字段 - 执行`LogicalToStorage`转换的字段 - 地图数据输入使用检索码的字段 - 一个其地图数据条目具有定界符的字段(不是`%List`存储) - 映射到一块嵌套存储的字段 索引限制:如果选择项目列表仅由`%ID`字段和`/`或均映射到同一索引的字段组成,则不使用快速选择。 如果使用“快速选择”执行查询,则在启用了`%System `/`%SQL` / `XDBCStatement`的情况下,在审计数据库的SELECT审计事件中会标记此事实。 ## 查询和企业缓存协议Enterprise Cache Protocol (ECP) 使用企业缓存协议(ECP)的InterSystems IRIS实现(例如分布式缓存群集)可以同步查询结果。 ECP是一种分布式数据缓存体系结构,用于管理服务器系统的异构网络之间的数据分布和锁定。 如果ECP同步处于活动状态,则每次执行`SELECT`语句时,InterSystems IRIS都会将所有未决的ECP请求强制发送到数据服务器。完成后,这可以确保客户端缓存是同步的。此同步发生在查询的“打开”逻辑中。如果这是游标查询,则在`OPEN`游标执行中。 要激活ECP同步,请使用`%SYSTEM.SQL`类的`SetECPSync()`方法。若要确定当前设置,请调用`$SYSTEM.SQL.CurrentSettings()`。
文章
姚 鑫 · 四月 8, 2021

第二十章 用户、角色和权限

# 第二十章 用户、角色和权限 InterSystems IRIS®具有系统级安全性,以及一组与sql相关的额外安全性特性。 在数据库级保护之外,InterSystems SQL安全性提供了额外级别的安全功能。 SQL和系统级安全性之间的一些关键区别是: - SQL保护比系统级保护更细粒度。可以为表、视图和存储过程定义特权。 - SQL权限既可以授予用户,也可以授予角色。 系统级权限只分配给角色。 - 持有SQL特权会隐式授予执行SQL操作所需的任何相关系统特权。 (相反,系统级特权并不意味着表级特权。) InterSystems SQL在InterSystems IRIS数据平台上对ODBC、JDBC、Dynamic SQL和SQL Shell接口进行权限检查。 嵌入式SQL语句不执行特权检查; 假定使用嵌入式SQL的应用程序在使用嵌入式SQL语句之前会检查特权。 # SQL权限和系统权限 要通过特定于SQL的机制操作表或其他SQL实体,用户必须具有适当的SQL权限。 系统级权限不足。 用户可以直接被授予SQL权限,也可以属于具有SQL权限的角色。 注意:角色是由SQL和系统级安全共享的:单个角色可以包括系统和SQ权限。 下面的例子,以Windows机器上的InterSystems IRIS为例: - 在用户名称空间中有一个名为`User.MyPerson`的持久化类。 这个类被投影到SQL中作为`SQLUser.MyPerson`表。 - 有一个名为`Test`的用户,他不属于任何角色(因此没有系统权限),并且拥有`SQLUser.MyPerson`表的所有权限(没有其他SQL权限)。 - 还有第二个用户,名为`test2`。此用户被分配给以下角色:`%DB_USER`(因此可以读取或写入用户数据库上的数据);`%SQL`(因此可以通过`%Service_BINDINGS`服务访问SQL);并且通过自定义角色具有使用控制台和`%Development`的权限。 如果测试用户尝试通过任何特定于SQL的机制(如使用ODBC的机制)在`SQLUser.MyPerson`表中读取或写入数据,则尝试将成功。这是因为InterSystems IRIS使测试用户成为`%SQL`角色(包括`%SERVICE_SQL:USE`权限)和`%DB_USER`角色的成员,因此该用户具有建立连接所需的权限;这在连接生成的审核事件(如`%SYSTEM/%Login/Login event`)中可见。(如果测试用户尝试使用终端对象机制,则这些尝试将失败,因为用户对这些机制没有足够的权限。) 如果`Test2`用户尝试通过任何特定于SQL的机制(如使用ODBC的机制)在`SQLUser.MyPerson`表中读取或写入数据,则该尝试将失败,因为该用户没有足够的权限访问该表。(如果`Test2`用户尝试使用对象机制查看终端中的相同数据,则尝试成功-因为该用户有足够的权限进行这种类型的连接。) # 用户 InterSystems SQL用户与为InterSystems安全性定义的用户相同。可以使用SQL命令或管理门户定义用户。 - 在SQL中,可以使用`CREATE USER`语句创建用户。这只会创建一个用户名和用户密码。新创建的用户没有角色。必须使用`GRANT`语句为用户分配权限和角色。可以使用`ALTER USER`和`DROP USER`语句修改现有用户定义。 - 在管理门户中选择System Administration(系统管理),选择Security(安全性),然后选择Users(用户)。单击页面顶部的Create New User(创建新用户)按钮。这会将带到编辑用户页,可以在其中指定用户名、用户口令和其他参数。创建用户后,其他选项卡即可用,可以在其中指定用户拥有哪些角色、用户拥有哪些常规SQL权限、用户拥有哪些表级权限、哪些视图可用以及可以执行哪些存储过程。 如果用户具有SQL表权限或一般SQL权限,则在用户的角色选项卡上授予或撤消的角色不会影响用户通过基于SQL的服务(如ODBC)对表的访问。这是因为,在基于SQL的服务中,基于表的权限优先于基于资源的权限。 ![image](/sites/default/files/inline/images/1_32.png) 可以使用`%Library.SQLCatalogPriv`类查询列出: - 所有用户`SQLUsers()` - 授予指定用户`SQLUserPrivs(“username”)`的所有权限 - 授予指定用户`SQLUserSysPrivs(“username”)`的所有系统权限 - 授予指定用户`SQLUserRole(“username”)`的所有角色 以下示例列出了授予当前用户的权限: ```java /// d ##class(PHA.TEST.SQL).Sqluser2() ClassMethod Sqluser2() { SET statemt=##class(%SQL.Statement).%New() SET cqStatus=statemt.%PrepareClassQuery("%Library.SQLCatalogPriv","SQLUserPrivs") IF cqStatus'=1 {WRITE "%PrepareClassQuery failed:" DO $System.Status.DisplayError(cqStatus) QUIT} SET rset=statemt.%Execute($USERNAME) WRITE "Privileges for ",$USERNAME DO rset.%Display() } ``` ## 架构形式的用户名 在某些情况下,用户名可以隐式用作SQL模式名称。如果用户名包含SQL标识符中禁止的字符,这可能会带来问题。例如,在多域配置中,用户名包含“@”字符。 根据分隔标识符配置参数的设置,InterSystems IRIS会以不同的方式处理此情况: - 如果启用了分隔标识符的使用,则不会进行特殊处理。 - 如果禁用分隔标识符的使用,则会从用户名中删除所有禁用字符,以形成架构名称。例如,用户名`“Documentation@intersystems.com”`将成为模式名称`“Documentationintersystemscom”`。 这不会影响`SQL CURRENT_USER`函数返回的值。它始终与`$USERNAME`相同。 # 角色 将SQL权限分配给用户或角色。角色使能够为多个用户设置相同的权限。角色由SQL和系统级安全性共享:单个角色可以同时包括系统权限和SQL权限。 管理门户、系统管理、安全性、角色页提供了InterSystems IRIS实例的角色定义列表。要查看或更改特定角色的详细信息,请选择该角色的名称链接。在出现的编辑角色页面上,有关于角色权限以及哪些用户或角色拥有该权限的信息。 常规选项卡列出角色对系统间安全资源的权限。如果角色仅拥有SQL权限,则一般信息选项卡的资源表会将该角色的权限列为“未定义”。 SQL权限选项卡列出了角色对InterSystems SQL资源的权限,其中命名空间的下拉列表允许查看每个命名空间的资源。因为权限是按名称空间列出的,所以在特定名称空间中没有权限的角色的列表显示为`“None”`。 注:应该使用角色定义权限,并将特定用户与这些角色相关联。这有两个原因: 1. 与检查单个用户条目相比,SQL引擎通过检查相对较小的角色数据库来确定权限级别的效率要高得多。 2. 与具有多个单独用户设置的系统相比,使用少量角色集管理系统要容易得多。 例如,可以定义具有特定访问权限的名为`“ACCOUNTING”`的角色。随着 `Accounting Department`的发展,可以定义新用户并将其与会计角色相关联。如果需要修改`Accounting`权限,只需修改一次,系统会自动覆盖`Accounting Department`的所有成员。 一个角色可以担任其他角色。例如,会计角色可以拥有`BILLINGCLERK`角色。被授予会计角色的用户将同时拥有会计角色和`BILLINGCLERK`角色的权限。 还可以使用以下SQL命令定义用户和角色:`CREATE USER`、`CREATE ROLE`、`ALTER USER`、`GRANT`、`DROP USER`和`DROP ROLE`。 可以使用`%Library.SQLCatalogPriv`类查询列出: - 所有角色`SQLRoles()` - 授予指定角色`SQLRolePrivileges(“Rolename”)`的所有权限 - 授予指定角色`SQLRoleUser(“Rolename”)`的所有角色或用户 - 授予指定用户`SQLUserRole(“username”)`的所有角色 # SQL权限 将SQL权限分配给用户或角色。角色使能够为多个用户设置相同的权限。 InterSystems SQL支持两种类型的权限:管理权限和对象权限。 - 管理权限是特定于命名空间的。 管理权限包括创建、更改和删除对象类型,例如创建表所需的`%CREATE_TABLE`权限。不仅需要`%ALTER_TABLE`特权来更改表,还需要`%ALTER_TABLE`特权来创建或删除索引、创建或删除触发器以及运行`TUNE TABLE`。 管理权限还包括`%NOCHECK`、`%NOINDEX`、`%NOLOCK`和`%NOTRIGGER`,它们确定用户在执行`INSERT`、`UPDATE`、`INSERT`或`UPDATE`或`DELETE`时是否可以应用相应的关键字限制。用户需要分配`%NOTRIGGER`管理权限才能执行`TRUNCATE TABLE`。 - 对象权限特定于表、视图或存储过程。它们指定对特定命名SQL对象的访问类型(在SQL意义上:表、视图、列或存储过程)。如果用户是SQL对象的所有者(创建者),则会自动向该用户授予该对象的所有权限。 表级对象权限提供对表或视图的所有列中的数据的访问(`%ALTER`、`DELETE`、`SELECT`、`INSERT`、`UPDATE`、`EXECUTE`、`REFERENCES`),包括当前存在的列和任何后续添加的列。 列级对象权限仅提供对表或视图的指定列中的数据的访问权。不需要为具有系统定义的值(如`RowID`和`Identity`)的列分配列级权限。 存储过程对象权限允许将过程的`EXECUTE`权限分配给指定的用户或角色。 ## 授予SQL权限 可以通过以下方式授予权限: - 使用管理门户。从系统管理中选择安全性,然后选择用户或角色。选择所需的用户或角色,然后选择相应的选项卡:管理权限的SQL权限、对象权限的SQL表、SQL视图或SQL过程。 - 在SQL中,使用`GRANT`命令向指定用户或角色(或用户或角色列表)授予特定管理权限或对象权限。可以使用`REVOKE`命令删除权限。 - 在ObjectScript中,使用`$SYSTEM.SQL.Security.GrantPrivileve()`方法将特定对象权限授予指定用户(或用户列表)。 ## 列出SQL权限 - 使用管理门户。从系统管理中选择安全性,然后选择用户或角色。选择所需的用户或角色,然后选择相应的选项卡:管理权限的SQL权限、对象权限的SQL表、SQL视图或SQL过程。 - 在SQL中,使用`%CHECKPRIV`命令确定当前用户是否具有特定的管理或对象权限。 - 在ObjectScript中,使用`$SYSTEM.SQL.Security.CheckPrivileve()`方法确定指定用户是否具有特定的对象权限。 ## 审核权限错误 当InterSystems IRIS进程调用用户没有特权的SQL语句时,操作将失败,并生成`SQLCODE-99`错误。启用审核事件`%SYSTEM/%SQL/PrivilegeFailure`时,将在`Audit`数据库中为遇到的每个`SQLCODE-99`错误放置一条记录。默认情况下,此审核数据库选项处于禁用状态。 怎么使用sql查询用户的权限,包括表权限,视图权限
问题
water huang · 四月 24, 2021

RSAEncrypt加密 只能用证书吗

最近尝试使用 Set Ciphertext=##class(%SYSTEM.Encryption).RSAEncrypt(Plaintext,PublicKeyStr)来加密数据,但是加密失败,参考了以下资料https://community.intersystems.com/post/format-public-key-when-using-rsaencrypt-method-systemencryption-or-systemencryptionrsaencrypt https://blog.ndpar.com/2017/04/17/p1-p8/ 生成的公钥为 -----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvl8YRMOJMUOyK5NzWo+8FD8dGR3DuPwn7M13If+rwYp18TEL58NneFdCL+Jjytx4axq+uhPuup5HtmEm22+PQTzFlXuAhXf3oUm4LQl4zgSb14D6gfqac9DqbVhm+aUjDfItFapM35/DH2cvc+rbBhu4Q5Y6kJwcUK0UbRv3swQIDAQAB-----END PUBLIC KEY----- 转换为pkcs1后的内容为 -----BEGIN RSA PUBLIC KEY-----MIGJAoGBANHPwS9+rVB1TJZM1UGLCBan3CY8TIDPkDAftkI504l68vdUWdPlmcN1YZzCGDK4+LvtzdqLXb/XSA3SxsUrA5toWSh45K7/jDzXRcb0AYiUTWGfpeMrHdcGNL07gVT11FM8M+0Jc5Sw6dvMKVXE9wzAxwgaJo0d8zW8Crbx6iI3AgMBAAE=-----END RSA PUBLIC KEY----- 文件保存为utf-8和ansi格式都不行。错误信息为 error:0906D06C:PEM routines:PEM_read_bio:no start line; 2016之后的版本,RSAEncrypt可以接收X.509证书或RSA公钥,而2016中RSAEncrypt接收证书参数。Ensemble2016上使用RSAEncrypt,如果拿不到证书,仅用公钥,请联系InterSystems 销售工程师。 好的,谢谢
文章
Claire Zheng · 八月 17, 2021

【视频】FHIR标准和国际基于FHIR的互联互通实践

当前医院面临更多互联互通需求,如预约挂号与分级诊疗、检验结果共享、医联体信息化、监管数据上报、临床辅助决策支持等,都需要对多源数据进行集成与整合。医疗机构内部和跨机构数据交换与共享,对互联互通提出新的要求。HL7 FHIR是国际上医疗行业实现数据交换和信息共享的标准之一,正在快速得到医疗行业广泛关注。InterSystems中国技术总监乔鹏在视频中分享了FHIR标准与国际互联互通的一些实践经验。
公告
Michael Lei · 十月 24, 2023

官宣对 CentOS 的支持终止

终止对 CentOS 的支持 自 InterSystems IRIS 2023.3 发布起,CentOS 将不再是受支持的开发平台。 CentOS 一直是一个受支持的开发平台,为开发人员提供了相当于 Red Hat Enterprise Linux (RHEL) 的免费版本,用于 IRIS 开发。您可能知道,Red Hat 对 CentOS 进行了重大更改,CentOS 已成为 RHEL 的“上游”。这意味着它具有 RHEL 中尚未包含的错误和功能,这可能会给在该平台上构建的开发人员带来问题。 我们鼓励使用 CentOS 的开发人员利用 Red Hat 的免费开发人员计划来获得 RHEL 的免费开发许可证。 CentOS 继续支持 IRIS 2023.2(及更早版本)。
文章
Weiwei Gu · 八月 7, 2023

如何自定义 Web 网关错误消息

InterSystems 常见问题解答标题 您可以为以下 Web Gateway 错误消息/系统响应设置单独的错误页面: 服务器错误 服务器繁忙 服务器无法使用 服务器超时 连接关闭 在 Web Gateway 管理界面上进行设置([Management Portal] > [System Administration] > [Configuration] > [Web Gateway Management] > [Configuration] > [Default Parameters])。 在“默认参数”(Default Parameters )菜单的“错误页面”部分中,设置要显示的 html 页面的文件名或发生错误时要重定向到的 URL。 ※Web网关管理界面也可以从以下URL访问。 http://<web server address>:<port>/csp/bin/Systems/Module.cxw 详细信息请参考以下文档自定义错误页面 [IRIS]
问题
Michael Lei · 二月 14, 2023

有没有办法导出与Production相关的所有内容?

您好,有没有一种简单的方法可以导出与Production相关的所有内容并在另一个实例中导入? 例如导出Production保存的 db、ns、映射、webapp 相关、资源、角色等 您可以使用InterSystems Package Manager(IPM)列出生产的所有成员,并通过IPM注册表或使用zpmhub将其分发到另一台机器(例如您的客户端)。 例如,您可以将多个EnsDemo产品安装为一个包: 用户>zpm“安装irishealth-ensdemo” 或者最近我发布了一个非常简单的CSV数据转换生产示例,您可以将其安装为一行: USER>zpm "install esh-i14y-csv" 下面是如何在module.xml中描述生产的所有模块。
文章
Michael Lei · 五月 17, 2021

iris-fhir-portal 概述

我创建了 iris-fhir-portal 来参加当前竞赛 **[InterSystems IRIS for Health FHIR](https://community.intersystems.com/post/welcome-intersystems-iris-health-fhir-contest-developers),**本篇快速概述旨在介绍我的应用程序提供的功能。 iris-fhir-portal 的目标是说明使用 IRIS for Health 中的 FHIR 功能创建患者图表并让用户拥有自己的数据有多么简单。 ## 功能 ### 患者列表 在左侧面板上,有一个患者列表,顶部是一个筛选栏。 ![](/sites/default/files/inline/images/images/search.png) ### 患者详细信息 ![](/sites/default/files/inline/images/images/formloaded_badges.png) 表格提供以下信息: * FHIR 患者 ID * SSN(社会保障号码) * 名字 * 姓氏 * 出生日期 * 性别 * 地址 * 城市 * 州/省 * 国家/地区 在患者详细信息表格后面,是一个包含四个信息块的可折叠项。 提供这些信息的 FHIR 资源为: * AllergyIntolerance * Observation * 类别:vital-signs * 类别:laboratory * Immunization 右侧的徽章显示每个项目的结果总数。 附注:我在上一篇文章中写到了如何从 FHIR 资源获取所有这些信息。 https://community.intersystems.com/post/my-experience-working-fhir 例如,以下是实验室数据结果的屏幕截图: ![](/sites/default/files/inline/images/images/accordionresults.png) 为了以透明的方式处理患者数据,在页面末尾有一个模版,其中包含 FHIR 资源提供的所有信息。 ![](/sites/default/files/inline/images/images/fhir_resourcedata.png) ####   #### 您可以在这里试用本应用程序!   如果您喜欢本应用程序,并认为我值得您投票,请为 iris-fhir-portal 投一票!  ![laugh](https://community.intersystems.com/sites/all/libraries/ckeditor/plugins/smiley/images/teeth_smile.png "laugh") ****  
文章
Michael Lei · 三月 21, 2022

消息转换即服务--轻松实现从HL7v2 转换为 FHIR !

# IRIS Healthtoolkit Service 软件即服务 [![Video](https://raw.githubusercontent.com/grongierisc/iris-healthtoolkit-service/main/misc/images/Cover.png)](https://youtu.be/lr2B7zSFkds "Video") 轻松实现HL7v2 转 FHIR, CDA 转 FHIR, FHIR 转 HL7v2 即服务. 这个项目的目标是提供 REST API 可以轻松转化不同的医疗行业格式。 在Rest body 发布需要的格式,在答案中获得新的格式。 * ![emoji](https://community.intersystems.com/sites/all/libraries/ckeditor/plugins/smiley/images/tongue_smile.png) InterSystems 消息转换公有云服务: https://aws.amazon.com/marketplace/pp/prodview-q7ryewpz75cq2 ![emoji](https://community.intersystems.com/sites/all/libraries/ckeditor/plugins/smiley/images/tongue_smile.png) * ![emoji](https://community.intersystems.com/sites/all/libraries/ckeditor/plugins/smiley/images/devil_smile.png) 视频(油管) : https://youtu.be/lr2B7zSFkds ![emoji](https://community.intersystems.com/sites/all/libraries/ckeditor/plugins/smiley/images/devil_smile.png) ## 安装 克隆这个 repository ``` git clone https://github.com/grongierisc/iris-healthtoolkit-service.git ``` Docker ``` docker-compose up --build -d ``` ## 使用 * 访问 : http://localhost:32783/swagger-ui/index.html ## API 细节 * HL7 转 FHIR ``` POST http://localhost:32783/api/hl7/fhir ``` * FHIR 转 HL7 ADT ``` POST http://localhost:32783/api/fhir/hl7/adt ``` * FHIR 转 HL7 ORU ``` POST http://localhost:32783/api/fhir/hl7/oru ``` * FHIR 转 HL7 vxu ``` POST http://localhost:32783/api/fhir/hl7/vxu ``` * CDA 转 FHIR ``` POST http://localhost:32783/api/cda/fhir ``` * FHIR repo ``` GET http://localhost:32783/api/fhir/metadata ``` ## 支持的 HL7 inbound 格式 : * ADT_A01, ADT_A02, ADT_A03, ADT_A04, ADT_A05, ADT_A06, ADT_A07, ADT_A08, ADT_A09, ADT_A10, ADT_A11, ADT_A12, ADT_A13, ADT_A17, ADT_A18, ADT_A23, ADT_A25, ADT_A27, ADT_A28, ADT_A29, ADT_A30, ADT_A31, ADT_A34, ADT_A36, ADT_A39, ADT_A40, ADT_A41, ADT_A45, ADT_A47, ADT_A49, ADT_A50, ADT_A51, ADT_A60 * BAR_P12 * MDM_T02, MDM_T04, MDM_T08, MDM_T11 * OMP_O09 * ORM_O01 * ORU_R01 * PPR_PC1, PPR_PC2, PPR_PC3 * RDE_O11 * SIU_S12, SIU_S13, SIU_S14, SIU_S15, SIU_S16, SIU_S17, SIU_S26 * VXU_V04 ## 如何工作 这个项目基于SDA模型工作. SDA (Summary Document Architecture) 是InterSystems系联公司的临床数据格式。 SDA FHIR 的对应关系在 [这里](https://docs.intersystems.com/irisforhealthlatest/csp/docbook/Doc.View.cls?KEY=HXFHIR_transforms), CDA -> SDA 的对应在[这里](https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI.Page.cls?KEY=HXCDA). ![gif sda pivot](https://raw.githubusercontent.com/grongierisc/iris-healthtoolkit-service/main/misc/images/Gif_SDA_Pivot.gif)
文章
Michael Lei · 四月 17, 2022

在IRIS容器里添加VSCode

# 在IRIS容器里添加VSCode 设置可重复的开发环境的最简单的方法之一是使用容器。我发现在快速迭代时,在我的开发环境容器里托管一个vscode实例是非常方便的。因此,我创建了一个快速的容器脚本,将一个基于浏览器的vscode添加到IRIS容器中。这应该适用于大多数2021.1以上的容器。[我的代码库可以在这里找到](https://github.com/nickmitchko/Hosting-vscode-in-a-container) > 带VSCode 且预连接好的InterSystems IRIS 容器 | Cred | Value | |--------------|:--------:| | User | _SYSTEM | | Password | SYS | ![image](/sites/default/files/inline/images/hostedvscodebanner.gif) ## 概要 这个项目创建了一个IRIS容器,在同一个IRIS容器中提供了vscode的托管(web-based)版本。这提供了: * 同样的容器代码编辑 * 预连接到容器内的IRIS 实例 * 管理门户里的链接 * 自动启动IDE # 快速启动 1. [下载](https://github.com/nickmitchko/Hosting-vscode-in-a-container/archive/refs/heads/master.zip) 或者 `git clone https://github.com/nickmitchko/Hosting-vscode-in-a-container.git` 2. 在项目根目录下, 运行 `docker build . -t vscode-irishealth-ml:latest --no-cache` 3. 执行 `docker-compose up` * 不使用 docker compose? 请看 [这里](#No-Docker-Compose) 4. 浏览 [管理门户](http://localhost:52773/csp/sys/%25CSP.Portal.Home.zen) 5. 用用户名和密码登陆 6. 在Favorites 面板里点击 VSCODE 链接 on the favorites pane 7. 依据提示在VScode里使用相同的用户名/密码 来连接到IRIS 实例 ```bash # New folder for project mkdir vscode-iris cd vscode-iris # Clone repo here git clone https://github.com/nickmitchko/Hosting-vscode-in-a-container.git . # Build image docker build . -t vscode-irishealth-ml:latest --no-cache # Only Run (A) or (B) # # (A) Run compose file docker-compose up # OR (B) if you want a daemon docker-compose up -d ``` ## 添加持久化 如果想要一个持久化IRIS实例, 去掉docker-compose.yml 文件中16-20行里的注释 . 这样就在容器上增加了一个持久化存储的挂载。 ```yml volumes: - "./durable/:/durable/" environment: - ISC_DATA_DIRECTORY=/durable/iconfig ``` ## 改变基础镜像Base Image 这个镜像是建立在 InterSystems 开发者社区 zpm 镜像上 ([看这里](https://hub.docker.com/r/intersystemsdc/iris-community/tags)). 这些镜像包括了让我们从package repo 安装的zpm命令,只是仅有一个90天的社区版 license。 用于这个builds上的镜像标签image tag: ```dockerfile FROM intersystemsdc/irishealth-ml-community:latest ``` 如果你想改变镜像, 把docker 文件里的第一行改成你想要的镜像标签image tag (可以是一个自定义的IRIS instance 或者 [官方支持的](https://docs.intersystems.com/components/csp/docbook/DocBook.UI.Page.cls?KEY=PAGE_containerregistry#PAGE_containerregistry_public)). 例如: ```dockerfile FROM containers.intersystems.com/intersystems/irishealth-community:2021.2.0.651.0 ``` # 无 Docker-Compose 如果你没有用 docker compose, 你仍然可以如下运行容器: ```bash # After building the container # --after command is required docker run --name vscode -d \ --publish 1972:1972 \ --publish 52773:52773 \ --publish 51773:51773 \ --publish 53773:53773 \ --publish 8080:8080 \ --publish 8888:8888 \ vscode-irishealth-ml:latest \ --after "/bin/bash /install/boot.sh" ```
文章
Muhammad Waseem · 八月 11, 2022

FHIR 客户端使用嵌入式 python 连接任何打开的 FHIR 服务器

嗨社区, 这篇文章公开介绍我的 iris-fhir-client 客户端应用。 iris-fhir-client 可以可以借助嵌入式 python 连接到任何开放的 FHIR 服务器 fhirpy 图书馆. 通过终端和使用 CSP Web 应用程序获取资源信息。 查看和激活注册服务器 连接到 IRIS 终端 docker-compose exec iris iris session iris 应用程序将默认注册 InterSystems FHIR Accelerator Service 和 SmartHealthIT Open FHIR Server,两者都可以使用。使用以下命令列出已注册的服务器 do ##class(dc.FhirClient).ServerList() InterSystems FHIR 加速器服务处于激活状态。 为了选择 SmartHealthIT 打开 FHIR 服务器,通过传递服务器 ID 使用 dc.FhirClient 类的 SetFhirServer 函数 do ##class(dc.FhirClient).SetFhirServer(2) 注册的 FHIR 服务器 要注册新服务器,请使用 dc.FhirClient 类的 RegisterServer() 函数class(dc.FhirClient).RegsterServer("Server Name","Endpoint","ApiKey"[optional],"EndpointOAuth"[optional] do ##class(dc.FhirClient).RegisterServer("INTERSYSTEMS FHIR Server","http://localhost:52773/csp/healthshare/samples/fhir/r4/","","") 从 FHIR 服务器获取资源 要检索当前服务器的所有资源,请使用 dc.FhirClient 类的 ListResources() 方法 do ##class(dc.FhirClient).ListResources() 为了显示任何资源的记录数,通过传递 dc.FhirClient 的 Resource 使用 CountResource() 方法下面的命令将从激活的 FHIR 服务器获取患者资源计数器 set count = ##class(dc.FhirClient).CountResource("Patient") write count 要检索所有创建的资源及其计数,只需将 1 传递给 ListResource() 函数 do ##class(dc.FhirClient).ListResources(1) 要获取资源的详细信息,请通过传递 dc.FhirClient 类的 Resource 使用 GetResource()下面的命令将从激活的FHIR 服务器中检索所有患者 do ##class(dc.FhirClient).GetResource("Patient") 下面的命令将从激活的 FHIR 服务器中检索所有观察结果 do ##class(dc.FhirClient).GetResource("Observation") 从 FHIR 服务器获取特定患者的资源 下面的命令将从激活的 FHIR 服务器中检索针对 Patinet ID 1 的观察详细信息 do ##class(dc.FhirClient).GetPatientResources("Observation","1") 从 CSP Web 应用程序查看 FHIR 服务器信息 导航 http://localhost:55037/csp/fhirclient/index.csp索引页面将显示激活的服务器中患者、观察、从业者和就诊次数以及患者和注册服务器的详细信息 索引页面将显示 FHIR 服务器列表,其中选择了激活的服务器。 从列表中选择其他服务器以查看所选服务器的详细信息 将鼠标悬停到患者 ID 并选择以获取患者资源的详细信息 此页面将显示一些患者资源的数量以及患者观察的详细信息 谢谢
文章
Jingwei Wang · 五月 5, 2023

IRIS SQL 编辑器和 IRIS JAVA 连接

WIN SQL是大多数用户使用的普通编辑器。但是我们不能使用winsql下载大量数据。所以我写了一个教程如何连接一个新的基于 Java 的编辑器,叫做 Squirrel SQL,它可以很容易地下载或导出 excel 或任何其他格式的数据。我还包括一个 Java JCBC 连接程序来连接 IRIS 数据库,尤其是镜像/故障转移服务器。 基于 SQL Java 的编辑器导出大量数据和用于 IRIS 连接的 Java JDBC 程序 基于 SQL Java 的编辑器导出大量数据 WinSql 是通常用于从 Iris 数据库中提取数据的编辑器,但是,如果没有许可的 winsql,则无法导出大量数据。 解决方案是使用基于 java 的编辑器,称为 Squirrel SQL。这是一个基于 java 的编辑器,您可以在从 IRIS 数据库执行 fetch 从编辑器中导出大量数据。这是用 Java 构建的开源 SQL 客户端,它使用 JDBC 连接到 IRIS 数据库。 Squirrel SQL 的特点 Java 19 兼容性 多个插入符/光标编辑 全局首选项和新会话属性搜索 Saved Sessions 的多项改进(用于保存和恢复 Session 的所有 SQL 编辑器的特性) 可配置的鼠标右键菜单 重新设计的添加/编辑 JDBC 驱动程序对话框 安装 Squirrel SQL 的步骤 Squirrel SQL 可以从 Squirrel 官网下载https://squirrel-sql.sourceforge.io/ 连接 IRIS 数据库的步骤 向 Squirrel Sql 添加驱动程序 点击“+”图标创建一个新的驱动程序,如下图所示 在“添加驱动程序对话框”中,选择“额外类路径”并单击“添加”,为“Intersystems-jdbc-3.2.0.jar”(jdbc 驱动程序jar 文件)添加一个新条目,如下所示。如果您在本地计算机的 C 盘上安装了 IRIS,这将是基于 IRIS 版本的正常路径 C:\InterSystems\IRISHealth2\dev\java\lib\JDK18\intersystems-jdbc-3.2.0.jar。 如下图所示, 输入驱动程序的名称“Intersystems IRIS”(选择任何有意义的名称) 输入示例 URL 作为 jdbc:IRIS://<host>:<port>/<database> 网站 URL 是可选的。 单击右侧的“List Drivers”按钮并选择“com.intersystems.jdbc.IRISDriver”,如下图所示。 单击“确定”保存驱动程序条目。现在您可以在驱动程序下的左侧菜单栏中看到驱动程序。 添加基于驱动程序的别名(连接) 选择squirrel sql左侧的“别名”选项卡,点击“+”添加新别名,如下图。 在“添加别名”窗口中,为别名输入一个有意义的名称。 从下拉菜单中选择我们新创建的 IRIS 驱动程序。选择驱动程序后,URL 格式将填充为新创建的驱动程序配置。通过添加正确的主机名或 IP 地址、端口号和数据库命名空间来编辑 URL。 例如:jdbc:IRIS://00.00.00.00.00:12345/TEST-TRAK 输入具有 SQL 权限的 IRIS 数据库的用户名和密码 单击测试按钮并验证连接是否成功。 单击“确定”保存新别名 连接到 IRIS 数据库 双击新创建的别名连接到数据库,squirrel 编辑器将打开,您可以尝试使用 sql 查询。 用于编写程序的 IRIS 数据库的 JDBC 连接 import java.sql.*; import com.intersystems.jdbc.*; import java.util.logging.*; import java.io.IOException; import java.util.*; public class Extract { public static Connection TrakCache () throws Exception { IRISDataSource ds = new IRISDataSource(); Connection conn = null ; ds.setURL( "jdbc:IRIS://1.12.333.444:12345/NAMESPACE-TRAK" ); ds.setUser( "username" ); ds.setPassword( "Password" ); try { conn = ds.getConnection(); } catch (Exception e) { System.out.println( "catch" +conn); //You can write another connection here if automatically fail over to another server. } return conn; } }
文章
姚 鑫 · 四月 7, 2023

第二十一章 配置镜像

# 第二十一章 配置镜像 本章提供了镜像和镜像成员的设置、配置和管理的相关信息和步骤。 # 镜像的自动部署方法 本章提供了使用管理门户创建镜像和将现有实例配置为成员的过程。 IRIS Data平台还提供了几种自动部署镜像的方法,这些镜像在部署后完全可运行。 ## 使用云管理器(ICM)部署镜像 ISC建议使用InterSystems Cloud Manager(ICM)部署 IRIS,包括镜像配置。通过将纯文本声明性配置文件、简单的命令行界面和Docker Containers中的 IRIS部署相结合,ICM为提供了一种简单、直观的方式来配置云或虚拟基础架构,并在该基础架构上部署所需的InterSystems IRIS体系结构以及其他服务。ICM可以显著简化部署流程,尤其是对于复杂的水平群集配置。 除了部署独立的镜像实例外,ICM还可以部署具有镜像数据服务器的分布式缓存集群和具有镜像数据节点的分片集群。 ## 使用 Kubernetes运算符(IKO)部署镜像 KUBERNETES一个开源的编排引擎,用于自动部署、扩展和管理容器化的工作负载和服务。可以定义想要部署的容器化服务以及希望它们遵循的策略;Kubernetes以尽可能高效的方式透明地提供所需的资源,在部署偏离规范时修复或恢复部署,并自动或按需扩展。InterSystems Kubernetes运算符(ICO)使用IrisCluster定制资源扩展了Kubernetes API,该资源可以作为InterSystems IRIS分片集群、分布式缓存集群或独立实例部署在任何Kubernetes平台上,所有这些都是可选的镜像。 在Kubernetes下部署 IRIS并不需要ICO,但它极大地简化了过程,并向Kubernetes添加了 IRIS特定的集群管理功能,支持将节点添加到集群等任务,否则您必须通过直接与实例交互来手动完成这些任务。 ## 使用配置合并部署镜像 配置合并功能在Linux和UNIX®系统上可用,它允许通过将所需的声明性配置合并文件应用于部署中的每个实例,来改变从相同映像部署的InterSystems IRIS容器的配置,或从相同工具包安装的本地实例的配置。此合并文件也可在重新启动现有实例时应用,它更新实例的配置参数文件(CPF),其中包含其大部分配置设置;这些设置在每次启动时从CPF中读取,包括部署实例后的第一个设置。当在部署期间应用配置合并时,实际上是用自己的更新版本替换了随实例提供的默认CPF。 使用配置合并,可以部署(或从现有实例配置)一个或多个镜像,包括它们的镜像数据库,方法是将单独的合并文件应用到不同的镜像角色,按顺序部署或配置第一个故障切换成员,然后是第二个故障切换成员,然后是灾难恢复异步成员。(部署或配置镜像后,必须手动将报告异步成员添加到镜像中。)。如果部署主机的名称与特定模式匹配,还可以自动部署多个故障转移对,或为现有主映像部署多个备份。在这种情况下,您可以将单个合并文件同时用于主备份和备份,然后在自动部署故障切换对后,对任何灾难恢复异步成员使用单独的合并文件。 还可以使用配置合并功能来部署具有镜像数据服务器的分布式缓存集群和具有镜像数据节点的分片集群。