简介:InterSystems IRIS社区版安装包(IRIS_Community-2021.1.0.215.3-lnxubuntux64.tar.gz)适用于Ubuntu 18.04 LTS x86_64环境,面向医疗信息化开发人员、数据库学习者以及需要评估Caché后关系型数据库的技术团队。Caché数据库由InterSystems公司开发,是后关系型数据库中的代表性产品,核心亮点在于同一份数据可同时通过对象、SQL和多维数据数组三种方式并发访问,在诊疗数据建模、高并发读写、事务一致性等医疗场景中具备突出优势。压缩包约781.53MB,以gz格式整体打包,下载后即可作为Ubuntu环境下的社区版安装介质使用。目前已有290人浏览学习,适合希望实际动手安装并运行IRIS/Caché、对比多维数据模型与传统关系型数据库差异的读者;也可作为医疗行业数据库选型评估、教学演示与本地实验环境搭建的基础素材,帮助技术人员快速建立对InterSystems数据平台的整体认知。
1. Caché社区版:一份tar.gz把你送进后关系型数据库的世界
做HIS、医保、药房系统的同行对Caché这名字都不陌生。InterSystems的Caché数据库主打“后关系型数据库”,后来整个产品栈升级成了IRIS数据平台,而这份IRIS_Community-2021.1.0.215.3-lnxubuntux64.tar.gz,就是2021.1社区版在Ubuntu x64下的完整安装包。社区版和生产版跑的是同一套内核,区别主要在许可边界,装完自带社区评估密钥,能直接起完整实例,不需要先去采购商业许可。适合三类人:手上有老Caché代码想找迁移评估环境的、被多维存储模型和对象/SQL混合用法勾起好奇心的、以及只想先跑通再决定要不要投入的选型工程师。我建议先准备一台2GB内存以上的Ubuntu虚拟机,照着下文把实例完整跑一遍,再回头看文档,理解成本会低很多。
2. 先搞清楚包体量再动手:社区版不是阉割玩具,是完整实例
2.1 社区版、评估版与生产版:同一套内核,区别在许可边界
InterSystems多年来的交付逻辑和MySQL社区版完全不一样。MySQL社区版是砍掉企业特性再发布的,而IRIS社区版是“完整内核 + 受限许可”的组合,它包含SuperServer、管理门户、SQL、ODBC/JDBC、互操作引擎等全部模块,唯一明显收紧的是并发连接数。按官方说明,社区版把并发连接限制在一个很小的数字(大致5个左右),超出之后会有繁忙提示。也就是说,你拿它验证存储模型、跑SQL、跑迁移脚本,体验和生产环境几乎一致,只是不能做高并发压测。
这个设计带来一个实际好处:老Caché项目的迁移评估,不必先把商业环境申请下来。我在帮客户评估老HIS迁移时,习惯先在本地Ubuntu虚拟机里用社区版把全局结构导过来、用SQL兜一遍关键报表,只有确认业务SQL能在IRIS上跑通,才去走许可采购流程。这个顺序能把选型成本压到最低,这份lnxubuntux64的tar.gz就是干这个用的。
还要纠正一个常见误区。网上搜“IRIS”很容易找到R语言里的经典鸢尾花iris数据集,和InterSystems IRIS数据平台不是一回事。这个混淆特别坑人,身边不止一个新手用“iris数据集”当关键字找安装教程,找半天全是花的分类。建议从一开始就用“IRIS Community”或“IRIS for Health”这类词做索引,后面避坑章节也会再提一笔。
2.2 环境准备清单:先别急着tar,资源与依赖核对一遍
Linux下的tar.gz包安装有一个特点:它自带大部分运行依赖,但对操作系统底层的glibc、libssl版本有硬性要求。这个2021.1版本发布于较早的Ubuntu 20.04时代,如果你拿新版Ubuntu 24.04去装,大概率会遇到libssl版本错位的报错。所以第一件事是确认系统版本和架构。
第一,确认处理器架构必须是x86_64。包名里的lnxubuntux64已经标明了目标平台,arm服务器上装不了,别浪费时间尝试。第二,确认磁盘和内存。实例安装加上日志,实际占用4GB左右,加上解压临时空间,建议在/opt或者/usr留出至少8GB。内存我建议2GB起步,IRIS的全局缓存、例程缓存都吃内存,1GB能启动,但SQL查询一压就明显卡顿。第三,检查基础依赖。在Ubuntu上我用下面这组命令做快速核查:
uname -m cat /etc/os-release | grep -E "VERSION_ID|NAME" free -h df -h /opt ldd --version | head -n 1 dpkg -l | grep -E "libssl|libgcrypt|libncurses" | awk '{print $2, $3}'这些命令逐条去看:uname -m确认x64;os-release确认是不是Ubuntu 18.04或20.04;free和df看剩余资源;ldd版本对应glibc。dpkg那一条是查IRIS运行时常用的几个库是否在位,如果输出为空,说明当前系统缺openssl组件,安装阶段就会翻车,可以先补装:
sudo apt-get update && sudo apt-get install -y libssl1.1 libgcrypt20 libncurses5这里有个细节值得注意:新版Ubuntu仓库默认只提供libssl3,libssl1.1往往要从旧版本源里提取。遇到这种情况不用慌,装一次dpkg -i把旧包装上,IRIS工作正常后再考虑系统升级策略。依赖这块少踩一个坑,后面安装流程能省十分钟。
2.3 解压、静默安装、目录规划:三步把包变成可运行实例
tar.gz包解压本身没有悬念,但安装前的目录规划值得多想一步。IRIS的Linux安装器默认会把系统文件放到/usr/irissys,这是共享系统目录,实例数据默认在/usr/irissys/mgr下。我做生产模拟时会把实例数据从系统盘迁走,避免写满后连同操作系统一起卡死。规划如下:
| 路径 | 用途 | 建议 |
|---|---|---|
| /usr/irissys | 安装系统文件与bin | 保持默认 |
| /usr/irissys/mgr | 实例数据、日志、镜像日志 | 单独磁盘分区 |
| /opt/iris_comm | 解压临时区 | 安装后可删 |
| 业务命名空间 | 业务数据区 | 用IRIS后台创建 |
实际安装命令很直接:
mkdir -p /opt/iris_comm sudo tar -xzf IRIS_Community-2021.1.0.215.3-lnxubuntux64.tar.gz -C /opt/iris_comm cd /opt/iris_comm sudo ./cinstall_silent第一行建好解压目录,第二行把包解开,第三行进入解压目录启动静默安装器。cinstall_silent是IRIS在Linux下的标准安装入口,它不像Windows那样弹图形界面,而是按交互提示一轮轮回车:先是协议确认,接着是安装路径、实例名称、SuperServer端口、Web网关端口、系统管理员密码。整个过程大约三分钟,比想象的简单。
安装过程有两个点需要提前确认。其一,实例名我习惯直接叫IRIS,和默认保持一致,后面所有命令都更容易顺下来;如果自定义名字,后续iris、irissession后面都要带上自定义实例名,命令会变长且容易拼错。其二,端口规划:SuperServer默认1972,Web网关默认52773。如果机器上已有服务占用,可以在安装器里改掉,但改完记得记录到部署文档里,因为后面ODBC连接串和Portal地址全依赖这两个数。
安装完成提示可以启动时,先验证一次文件布局再启动:
ls -la /usr/irissys/bin/ | head -n 20 sudo /usr/irissys/bin/iris list第一条命令看bin目录是否完整,重点确认iris主程序和irissession终端工具在位;第二条命令让iris工具列出当前已注册实例。如果第二条输出一个带版本号的实例信息,说明安装器注册成功。若这里为空,多半是安装过程没有用root执行,重跑cinstall_silent即可。到这步,包已经从静态tar.gz变成了一个完整且可感知的实例。
3. 把实例从黑匣子变成可操作对象:终端命令、命名空间和第一张表
3.1 用iris命令管理实例启停和状态确认
安装完成之后,不要急着连管理门户,先用命令行把服务状态搞清楚。IRIS的Linux管理命令很统一,核心就三个子命令:start、stop、list。我常用的检查序列是这样:
sudo /usr/irissys/bin/iris start IRIS sudo /usr/irissys/bin/iris list ps -ef | grep irissys | grep -v grep第一条启动名为IRIS的实例,第二条看注册信息与运行状态,第三条从操作系统视角确认进程确实存在。IRIS启动后会有多个进程,包括主控进程和多个工作进程,进程名都带irissys路径标识,不会和别的服务混淆。启动成功后,最直观的可操作入口是终端会话工具irissession,它直接进入实例的ObjectScript命令行环境,后续建命名空间和跑SQL都靠它。
这里有一个新手容易忽略的点:iris list里的状态和进程是否真活着是两回事。iris list输出显示running,只代表实例主控进程注册正常;如果系统反复启动失败,进程可能反复重启,ps看到的进程数会异常地多。所以我把ps这条命令固定放在检查序列里,辅助判断是否存在僵尸进程。
3.2 通过Web管理门户完成首次登录与系统配置
Web管理门户的地址固定由Web网关端口决定。以默认端口计算,浏览器里打开http://127.0.0.1:52773/csp/sys/UtilHome.csp,就能看到登录页。首次登录使用安装时设置的系统管理员账号,默认账号名是_SYSTEM,密码是安装时自己输入的那个。如果安装时一路回车没设密码,安装器通常会强制要求设置一次,这也是IRIS安全策略里的基础门槛。
登录后的界面就是管理门户。第一件事建议把实例的SystemName改掉,入口在门户的System Administration配置菜单下,把系统名设成主机名加环境后缀,比如iris-comm-01。这个名称会影响后续证书生成、IRIS与其他系统互操作时的身份标识,保持默认值经常出现“机器名没对上”的乌龙问题。
另一个重要操作是单独给SuperUser设置一个强密码。虽然_SYSTEM账号能用,但很多管理接口和后台作业走SuperUser身份,生产模拟时最好区别对待。变更入口在系统安全菜单的用户列表里。改完密码建议先在irissession里验证一遍,再关掉浏览器,避免改完就把密码忘在验证之前。
3.3 在SQL Shell里建命名空间、建表、插入第一条数据
管理门户能完成所有配置,但验证功能最好的方式还是终端SQL Shell。我一般先建一个业务命名空间,避免把测试表堆在USER库里。先登录到系统命名空间%SYS:
sudo /usr/irissys/bin/irissession IRIS -U %SYS进入ObjectScript终端后,执行以下命令创建命名空间:
ZN "%SYS" Do ##class(SYS.Namespace).Exists("DEMO",.status) Do ##class(SYS.Namespace).Create("DEMO")第一行ZN是切换命名空间指令,第二行先判断DEMO是否已存在,避免重复创建时报错,第三行真正创建。初学阶段先跑通最直接的创建路径,建完用ZN "DEMO"切进业务命名空间。
回到DEMO命名空间后,用内置SQL Shell建一张简单的设备表:
CREATE TABLE "DEMO"."device" ( id INTEGER, name VARCHAR(100), install_date DATE, PRIMARY KEY (id) ) GO这里有个必须注意的细节:表名和schema名我加了双引号。IRIS默认会把不带引号的标识符统一转成大写,所以如果直接写CREATE TABLE demo.device,你后面SELECT FROM DEMO.DEVICE才能命中,大小写不一致时查询直接报“表不存在”。这个坑不少从Oracle转过来的同事踩过,加双引号可以精确保留大小写,代价是之后每次查询都得加同样的引号。我实际项目里的习惯是全部统一成加引号的小写,或者干脆全大写不加引号,总之别混着写。
插入并查询:
INSERT INTO "DEMO"."device" (id, name, install_date) VALUES (1, 'ECG-2022', DATE '2024-06-01') GO SELECT * FROM "DEMO"."device" GOSQL Shell以GO作为一条语句的结束标记,执行INSERT后数据落表,再执行SELECT把整表打出来验证。到这里,你已经完成了从tar.gz到可用实例、再到业务表写入的完整闭环,后面接ODBC、接Java程序,都是在这个闭环上做扩展。
4. 把数据接出去:ODBC/JDBC驱动与连接串参数
4.1 驱动文件在哪、系统ODBC怎么注册
跑业务系统总不能一直在终端里写SQL,外部程序要连这台IRIS,主流通道就是ODBC和JDBC。ODBC驱动在安装包里已经编译好,不需要单独下载,需要做的是找到它、让系统ODBC管理工具识别它。包内驱动的搜索路径可以这样定位:
find /usr/irissys -iname "*odbc*" -o -iname "libiris*so*" | head -n 30列出结果后,重点确认有没有ODBC驱动对应的so文件,以及bin目录下有没有configure-odbc或install-odbc脚本。有的发行版安装器已自动注册,有的则要手动跑一次配置脚本。手动注册时,把驱动名与so路径写进/etc/odbcinst.ini,格式如下:
[InterSystems IRIS ODBC34] Description=InterSystems IRIS ODBC Driver Driver=/usr/irissys/lib/libirisodbcdb.soDriver一行必须指向实际存在的so文件,具体文件名以find查到的结果为准,这里示例按最常见的so名字写。注册完成后用odbcinst -q -d验证:
odbcinst -q -d这条命令输出的驱动名称列表里出现InterSystems IRIS ODBC34,才算完成系统层注册。注意驱动名不是全局固定值,不同版本的so文件名可能带不同后缀,以实际查到的结果为准。Windows上装IRIS会自动注册好DSN,Linux上我建议显式走一遍这步,避免程序里报“Driver not found”。
4.2 连接串参数:从缺省设置到按需调整
有了系统级ODBC驱动,业务程序就能用标准连接串连上IRIS。以Python的pyodbc为例,最简洁的连接串长这样:
import pyodbc conn_str = ( "Driver={InterSystems IRIS ODBC34};" "Server=127.0.0.1;" "Port=1972;" "Database=USER;" "UID=_SYSTEM;" "PWD=admin123;" "Security=1;" ) conn = pyodbc.connect(conn_str) cursor = conn.cursor() cursor.execute("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES") print(cursor.fetchone()[0]) conn.close()这个脚本的作用是检查当前用户能看到多少张表,能正常输出来,说明驱动注册、端口、账号权限全链路是通的。各参数含义如下表:
| 参数 | 默认值 | 说明 |
|---|---|---|
| Driver | 无 | /etc/odbcinst.ini里注册的驱动名 |
| Server | localhost | 实例主机地址,跨机场景填IP或内网域名 |
| Port | 1972 | SuperServer端口,不是52773 |
| Database | USER | 默认连接的命名空间 |
| UID | _SYSTEM | 登录账号 |
| PWD | 安装时设置 | 登录密码 |
| Security | 1 | 1表示密码安全认证 |
注意:ODBC连接里填1972(SuperServer),不是52773(Web网关)。这是新手最容易出错的地方,没有之一。
另外,跨服务器连接时Server尽量写内网IP而非localhost,否则一旦程序部署到另一台机器,连接串还要改一遍。Database字段直接填命名空间名,这里填的是实例里已经存在的数据库名,可以是第3章建的DEMO。
4.3 连接失败的排查顺序和日志入口
ODBC连接失败时,我的排查顺序固定是“端口—驱动—账号—日志”四步。第一步,先用nc或telnet确认1972端口是否监听且可达:
nc -vz 127.0.0.1 1972如果端口不通,回到第三章用iris list检查实例状态,状态是running再看系统防火墙。Ubuntu的ufw默认可能拦掉1972,需要显示放行。第二步,验证驱动名拼写,pyodbc报“找不到驱动”时,把odbcinst -q -d的输出和连接串Driver字段逐字比对。第三步,检查账号是否被锁定,IRIS在多次密码错误后会自动锁定账号,登录日志会有记录。
最后是日志入口,这也是新手最常忽略的。实例运行日志集中在/usr/irissys/mgr/messages.log:
tail -n 100 /usr/irissys/mgr/messages.log | grep -i errormessages.log记录启动、连接、权限、备份等全部关键事件,ODBC握手失败时这里通常会有具体的错误码。社区版没有商业版那么省心,日志是唯一的黑匣子入口,遇到奇怪问题先看它,比到处改参数有用得多。JDBC的排查路径也类似,连接串里端口和实例名不匹配时,同样能在messages.log里看到超时或认证失败记录。
5. 避坑合集:装上IRIS社区版后容易卡的五个地方
5.1 依赖版本错位导致安装器启动即崩
现象:执行sudo ./cinstall_silent,终端立刻报libssl.so.1.1: cannot open shared object file,或类似libgcrypt版本不匹配的错误,安装还没开始就退出。
原因:这个2021.1包编译于Ubuntu 20.04时代,面向的是OpenSSL 1.1.x和较旧glibc。新版Ubuntu 22.04/24.04默认只有libssl3,老动态库缺失,安装器依赖的二进制链直接断掉。
解决:不要硬改链接指向libssl3,风险太大。正确做法是从Ubuntu 20.04的apt源获取libssl1.1的deb包,下载后dpkg -i手动安装;libgcrypt20、libncurses5同理缺啥补啥。装完再跑ldd命令检查cinstall_silent动态库全部解析成功,再重新执行安装。我一般把这个依赖集写进部署脚本,换新机器时直接跑一遍能省很多事。
5.2 实例显示running,但52773端口不通
现象:iris list显示实例状态是running,ps也能看到进程,浏览器访问http://127.0.0.1:52773却一直转圈或直接拒绝连接。
原因:状态running只代表SuperServer主控进程存活,Web网关是另一条独立线路,它由独立httpd进程承载,可能因为配置不完整、端口被占或防火墙策略没启动。
解决:先看ss -tlnp | grep 52773确认监听是否存在,再检查系统防火墙ufw status。若端口被nginx或其它服务占用,修改/usr/irissys/httpd/conf/httpd.conf里的Listen端口。我碰到过最隐蔽的一次是安装时选了非默认Web端口,管理门户实际在52774上,但文档里记的仍是52773,排查了很久才发现是端口配置没同步到连接串里。
5.3 连续输错密码导致账号锁定,SuperUser登不进去
现象:第一次登录管理门户时密码输错三次,系统提示账号被锁定,SuperUser和_SYSTEM都进不去,想重装整个实例的心都有。
原因:IRIS安全策略默认开了账号锁定保护,连续失败会触发账户禁用,这个机制在社区版里同样生效。
解决:用另一个有管理员权限的账号登录,到用户安全配置里重置锁定状态;如果所有管理员账号都锁了,只能通过维护模式启动实例去解锁,这是社区版最麻烦的恢复路径。所以日常验证时密码务必记在部署文档里,而不是靠终端里翻安装日志。从那以后我每次装完都会第一时间把密码写进自己的部署记录,不再依赖大脑。
5.4 表名大小写不一致,SELECT直接报“表不存在”
现象:CREATE TABLE demo.device建表成功,但SELECT * FROM demo.device报SQLCODE -30: Table not found。
原因:IRIS默认把不带引号的标识符转成大写存储,建表时没引号,实际表名变成DEMO.DEVICE;查询时若不加引号,又会被转成全大写,多数情况下能对上。怕的是建表时用了小写加引号,查询时忘了加引号,或者反过来,大小写就对不上了。
解决:要么全不加引号统一大写,要么全加双引号统一小写。团队协作时把这规则写进开发规范,因为这类报错信息完全没有大小写提示,纯靠经验排查。我在第3章里特意用双引号建表,就是为了演示这种最容易迷惑人的写法。
5.5 用“iris”搜资料,结果全是鸢尾花花瓣长宽
现象:想搜ODBC驱动下载、部署方法,结果搜出来的全是怎么用R语言做鸢尾花分类,资料完全不相关。
原因:IRIS平台跟R语言内置的iris数据集重名,纯文字搜索很难排除干扰。
解决:搜索时用IRIS Community、InterSystems IRIS加版本号,或者直接搜tar.gz包名这类精确词条。查ODBC就搜“IRIS ODBC driver linux”,查安装就搜“cinstall_silent”,命中率会高很多。这个重名坑属于信息检索层面的踩坑,但实际工作效率影响很大,值得正式记录。
6. 用一屏SQL确认版本与许可,再把实例交给systemd托管
IRIS版本和许可状态不必靠猜,在终端里一行SQL就能确认。先用irissession进入任意命名空间,执行以下命令查看运行时版本和许可摘要:
SELECT $ZVERSION GO DO $SYSTEM.License.ShowSummary() GOSELECT $ZVERSION会返回一长串版本号、平台和构建日期,我拿它确认自己连的是不是预期实例,避免多机环境连错库。DO $SYSTEM.License.ShowSummary()会输出许可类型、有效期、已用连接数等,能直观看到社区版当前还剩多少并发额度,模拟并发测试前先用它垫一眼,比胡乱压测撞到限制再困惑有用得多。
确认实例能跑之后,最后一个习惯动作是把启动交给systemd,让它在机器重启后自动拉起服务。IRIS本身不注册systemd服务,需要手动写一个unit文件。我用的模板是:
sudo tee /etc/systemd/system/iris.service > /dev/null <<'EOF' [Unit] Description=InterSystems IRIS instance After=network.target [Service] Type=forking ExecStart=/usr/irissys/bin/iris start IRIS ExecStop=/usr/irissys/bin/iris stop IRIS ExecReload=/usr/irissys/bin/iris restart IRIS PIDFile=/usr/irissys/mgr/IRIS.pid [Install] WantedBy=multi-user.target EOF sudo systemctl daemon-reload sudo systemctl enable iris sudo systemctl start irisunit类型用forking是因为iris start自己会fork出后台主控进程,配好PIDFile后systemctl status能看到稳定的主进程状态。enable让开机自启,start立即拉起。生产模拟时我会把Restart=always也加进去,让崩溃后自动重启。从那以后我每次装完IRIS社区版都会在确认版本和许可后立刻配好systemd,再继续做数据迁移,少操心一次,就多一分精力放在业务验证上。希望帮到你。
本文还有配套的精品资源,点击获取