New post

Encontrar

InterSystems Official
· Feb 20

Alerte : les requêtes SQL renvoient des résultats erronés

19 février 2025 – Alerte : les requêtes SQL renvoient des résultats erronés

InterSystems a corrigé deux problèmes pouvant entraîner le renvoi de résultats erronés par un petit nombre de requêtes SQL. De plus, InterSystems a corrigé une incohérence dans la gestion des types de données date/heure qui peut entraîner des résultats différents, inattendus, mais corrects, pour les applications existantes qui s'appuient sur le comportement antérieur et incohérent.

DP-436825 : les requêtes SQL avec jointure latérale peuvent renvoyer des résultats erronés

Le premier problème (DP-436825) affecte uniquement les requêtes SQL qui utilisent une jointure latérale, implicitement ou explicitement, sur une instance configurée avec une limite de mémoire par processus non par défaut (paramètre « bbsiz » dans le fichier .cpf). Une nouvelle installation d'InterSystems IRIS a une valeur bbsiz par défaut de -1 (il n'y a donc pas de limite de mémoire), tandis qu'une mise à niveau à partir d'une version plus ancienne conserverait le paramètre précédent. Lorsqu'une telle requête utilise l'exécution parallélisée au moment de l'exécution, y compris les cas où le système utilise l'exécution parallélisée, la requête peut renvoyer des résultats incorrects. Ce problème affecte les versions 2023.3, 2024.1.0, 2024.1.1, 2024.1.2, 2024.2 et 2024.3 des produits suivants :

  • Plateforme de données InterSystems IRIS®
  • InterSystems IRIS® for Health
  • HealthShare® Health Connect

Le problème affecte également d'autres produits InterSystems basés sur les produits ci-dessus, notamment HealthShare® Unified Care Record et Suite : Version 2024.2 Bien que le dossier de soins unifié et la suite n'utilisent pas de requêtes SQL qui utilisent une jointure latérale dans le code du produit, les clients HealthShare qui effectuent une mise à niveau vers HealthShare 2024.2 avec une limite de mémoire par processus non par défaut qui écrivent également leurs propres requêtes SQL qui utilisent une jointure latérale peuvent être affectés.

Pour éviter ce problème, utilisez l'une des trois options suivantes :

  • Supprimez la limite de mémoire par processus en définissant le paramètre bbsiz sur -1.
  • Utilisez le mot clé %NOPARALLEL dans les requêtes qui incluent une jointure latérale.
  • Désactivez temporairement le mode adaptatif pour l'instance, ce qui évite le traitement parallèle automatique des requêtes éligibles.

Tout cela garantit que la requête renvoie des résultats corrects. La correction de ce défaut est identifiée comme DP-436825 et sera incluse dans toutes les futures versions du produit à partir de 2024.1.3 et 2025.1.0. Elle est également disponible via une distribution ad hoc.

DP-436998 : requêtes SQL avec tri inversé par %ID entrant dans une boucle sans fin

Le deuxième problème (DP-436998) affecte les requêtes SQL qui classent par ID de ligne décroissant et dans lesquelles l'ID de ligne est un entier positif (compatible bitmap) et en particulier, les circonstances spécifiques aux données. Dans ces conditions, la requête peut entrer dans une boucle sans fin et continuer à renvoyer le même ensemble de résultats jusqu'à ce qu'elle soit abandonnée. Ce problème affecte les versions 2022.2, 2022.3, 2023.x et 2024.x des produits suivants :

  • Plateforme de données InterSystems IRIS®
  • InterSystems IRIS® for Health
  • HealthShare® Health Connect

Il affecte également d'autres produits InterSystems basés sur les produits ci-dessus, notamment HealthShare® Unified Care Record and Suite : Version 2024.1 et version 2024.2. Bien que le dossier de soins unifié et la suite n'utilisent pas de requêtes SQL avec tri inversé par %ID dans le code produit, les clients HealthShare 2024.1 et HealthShare 2024.2 qui écrivent leurs propres requêtes SQL avec tri inversé par %ID peuvent être concernés. La correction de ce défaut est identifiée comme DP-436998. Elle sera incluse dans toutes les futures versions de produits à partir de 2023.1.6, 2024.1.3 et 2025.1.0. Elle est également disponible via une distribution ad hoc.

DP-436633 : Requêtes SQL comparant les valeurs DATE et TIMESTAMP

InterSystems a récemment corrigé une incohérence dans la manière dont les valeurs DATE et TIMESTAMP sont comparées à l'aide des opérateurs <=, > et BETWEEN. Cette correction modifie les résultats de comparaisons de date et d'heure particulières. Le comportement mis à jour a été introduit dans la version 2023.3 de :

  • Plateforme de données InterSystems IRIS®
  • InterSystems IRIS® for Health
  • HealthShare® Health Connect

Elle affecte également d'autres produits InterSystems basés sur les produits ci-dessus, notamment HealthShare® Unified Care Record and Suite : Version 2024.2.

Elle s'applique à toutes les versions ultérieures.

Avec le comportement mis à jour, les valeurs DATE sont converties en une valeur TIMESTAMP avant la comparaison. Cela est conforme à la norme SQL qui consiste à convertir le type de données le moins précis en type de données le plus précis.

Par exemple, avec le nouveau comportement (conforme à la norme), un prédicat de requête « MyTimeStamp > MyDate » est évalué à FAUX lorsque les valeurs de ces champs correspondent à la même date de calendrier, sauf lorsque MyTimestamp correspond exactement à minuit. Auparavant, le comportement n'était entièrement conforme à la norme que lorsque le champ MyTimeStamp était défini avec le format %PosixTime et renvoyait des résultats non conformes dans certains cas lors de l'utilisation de %Timestamp ou de certaines combinaisons de fonctions et variables spéciales.

Pour garantir des comparaisons prévisibles, InterSystems recommande d'utiliser des fonctions CAST explicites, en particulier lors de l'utilisation d'instructions CASE ou de fonctions SQL telles que GETDATE(), NVL() et IFNULL(), où le type résultant peut ne pas être évident.

 

Pour aider à évaluer les instructions affectées par le changement de comportement, InterSystems a introduit un avertissement dans le plan de requête et un indicateur système facultatif pour que ces instructions génèrent une erreur lors de l'exécution. L'activation de l'indicateur peut être utile lors des tests de régression du code d'application et peut offrir un filet de sécurité supplémentaire pour les requêtes utilisateur lors de l'exécution. Cette fonctionnalité d'information est identifiée comme DP-436633 et sera incluse dans toutes les futures versions du produit à partir de 2024.1.4 et 2025.1.0.

Informations complémentaires

Si vous subissez l'impact de ce défaut, contactez le Worldwide Response Center (WRC) pour obtenir de l'aide.

Discussion (0)0
Log in or sign up to continue
Article
· Feb 20 3m read

Configurando la replicación o Mirroring para productos de Health Share

Es posible que hayáis notado que, para configurar un mirror en InterSystems IRIS for Health™ y HealthShare® Health Connect, hay un requisito especial. En este artículo, quiero guiaros paso a paso por el proceso.

Esto supone que ya habéis configurado el segundo miembro de conmutación por error y habéis confirmado un estado exitoso de dicho miembro en el monitor del mirror:

Paso 1: Activad el usuario HS_Services (en el servidor de respaldo y en el principal).

 

Paso 2: Cambiad al espacio de nombres HSSYS y dirigíos a Interoperabilidad > Configurar > Credenciales. Introducid la contraseña para vuestro usuario HS_Services predefinido (en el servidor de respaldo y en el principal).

Paso 3: Programad la tarea de lanzamiento del Monitor de Duplicación (en el servidor de respaldo y en el principal). Hacedlo ejecutando lo siguiente desde el terminal de IRIS en el espacio de nombres HSSYS:

HSSYS>do ##class(HS.Util.Mirror.Task).Schedule("HSSYS")

Confirmad que se ha programado correctamente y que está configurado para ejecutarse cada cinco minutos:

Paso 4: Añadid la base de datos HSSYS a la duplicación en el servidor principal. Id a Administración del Sistema > Configuración > Configuración del Sistema > Bases de Datos Locales. Seleccionad "Añadir al Mirror" y escoged HSSYS.

Paso 5: Desmontad HSSYS de los servidores principal y de respaldo. Id a Operación del Sistema > Bases de Datos, seleccionad HSSYS y escoged "Desmontar".

Paso 6: Copiad el archivo HSSYS IRIS.DAT del servidor principal al directorio adecuado de HSSYS en el servidor de respaldo.

Aseguraos de que los permisos sean los adecuados. Deberíais ver algo como esto:

-rw-rw---- 1 irisowner irisowner 22020096 Jan 12 15:26 IRIS.DAT

Si no veis esto, modificadlo con chown y chmod para que sea así.

Paso 7: Montad la base de datos en el servidor principal. Id a Operación del Sistema > Bases de Datos, seleccionad HSSYS y escoged "Montar". Elegid "¿Iniciar la sincronización del mirror?" pero no seleccionéis "Solo lectura".

Paso 8: Montad la base de datos en el servidor de respaldo. Id a Operación del Sistema > Bases de Datos, seleccionad HSSYS y escoged "Montar". No seleccionéis "Solo lectura". No habrá la opción de "Iniciar la sincronización de la duplicación".

Paso 9: En vuestro servidor de respaldo, abrid el Monitor de Duplicación (Operación del Sistema > Monitor de Mirror). Ahora deberíais ver HSSYS añadida a vuestra lista de bases de datos duplicadas. Pero tenéis que hacer clic en "Activar" para que se inicie la sincronización.

Después de unos segundos, vuestro servidor de respaldo debería estar "Sincronizado".

HSSYS ya está duplicada.

Y deberíais ver el Agente del Monitor de Mirror en ejecución (Salud > Agente del Monitor de Mirror).

Paso 10: Configurad el Nombre de Host de la Red en el servidor principal (Inicio > Salud > Asistente de Instalación).

El Nombre de Host de la Red debe estar configurado con el VIP de la duplicación (o la entrada DNS para el VIP de la duplicación).

Paso 11: Configurad la Comunicación Segura.

Paso 12 (opcional): Configurad la Fundación.

Recordad activar vuestro Namespace una vez que esté creado.

Dado que seleccionamos Base de Datos de Mirror, deberíais verla en vuestras Bases de Datos de Mirror en el Monitor de Mirror.

El requisito adicional de duplicación para productos de Healthshare ya está completo, y al probar una conmutación por error, vemos que ambos servidores están sincronizados según el Agente del Monitor de Mirror.

Ahora podéis configurar vuestros Puntos de conexión FHIR y ver cómo las bases de datos de recursos (R) y historial de recursos (V) se duplican automáticamente.

2 Comments
Discussion (2)1
Log in or sign up to continue
Article
· Feb 20 2m read

Extensión de VSCode para el análisis visual de ISCLOGs

Los ISCLOGs son una herramienta útil de depuración proporcionada con IRIS que os puede ayudar a solucionar muchos tipos de problemas. Para obtener más información sobre cómo generar estos registros, consultad la siguiente documentación de IRIS: "Logging".

Este registro se escribe en el global ^ISCLOG almacenado en el espacio de nombres %SYS. Cada nodo de esta global representa un evento independiente, y en algunos casos, se registra información adicional en los subnodos.

Cada entrada consiste en una lista con los siguientes campos: ID, Categoría, Nivel de Registro (LogLevel), Mensaje, Espacio de Nombres, ID de Proceso, Rutina, ID de Sesión, Etiqueta y Hora de Adición. Para más detalles sobre los distintos campos, consultad la sección "Fields in the Log" en la documentación de IRIS.

Aunque esta herramienta proporciona información valiosa, también genera muchas entradas, lo que puede dificultar su interpretación. Para facilitar su lectura, he creado una extensión para VSCode que mejora la visualización de dos maneras:

1) Al exportar un ISCLOG a VSCode, podéis utilizar funciones integradas como la comparación de archivos.  

2) La utilidad incluye resaltado sintáctico para facilitar la identificación de los diferentes campos.

Instalación:

  1. En VSCode, buscad la extensión "Pretty ISCLOGs" o utilizad el siguiente enlace: Pretty ISCLOGs en Visual Studio Marketplace
  2. Seleccionad el botón de instalar para cargar la extensión.
  3. Seguid los pasos a continuación para exportar y visualizar un ISCLOG:

Uso:

  1. En el ObjectScript Shell, navegad al espacio de nombres "%SYS".
  2. Ejecutad el siguiente comando para especificar un nombre de archivo (podéis usar cualquier nombre, siempre que tenga la extensión ".isclog"):

set file = <filepath>/filename.isclog

ie: set file="C:/ISCLOGs/myISCLOG.isclog"

  1. Ejecutad el siguiente comando para exportar el global ^ISCLOG al archivo:

Open file: "wns" use file zw ^ISCLOG close file

  1. Abrid el archivo en VSCode para visualizar el registro.

Aquí tenéis un ejemplo de captura de pantalla utilizando el tema de color InterSystems Default Dark Modern:

Limitaciones:

Debido a cambios en el almacenamiento de los ISCLOGs, esta utilidad solo funcionará con versiones más recientes (generalmente, versiones de IRIS desde 2018 en adelante).

He probado esto utilizando los estilos visuales proporcionados en la extensión InterSystems ObjectScript. La utilidad usa los colores de los tokens de VSCode. Los colores exactos dependerán del tema visual que tengáis aplicado, por lo que la legibilidad puede variar según el tema elegido.

Discussion (0)1
Log in or sign up to continue
Article
· Feb 20 4m read

WSGI サポートの概要

wsgi_logo

コンテキスト

ウェブサーバーゲートウェイインターフェース(WSGI)は、ウェブサーバーがリクエストを Python プログラミング言語で記述されたウェブアプリケーションまたはフレームワークに転送するための単純な呼び出し規則です。 WSGI は PEP 3333 で詳しく説明された Python 規格です。

🤔 定義は良いとして、IRIS との関連性は何でしょうか?

IRIS 2024.2+ の新機能により、直接 IRIS で WSGI アプリケーションを実行できます。 この機能は、IRIS を他の Python フレームワークとライブラリに統合する優れた方法です。

Discussion (0)1
Log in or sign up to continue
Announcement
· Feb 20

インターシステムズ 第20回 開発者向けウェビナー「IRIS概要 システム構築編」のご案内

     

平素は大変お世話になっております。

2025 年初の開発者向けウェビナーを開催いたします。

ご多用中とは存じますが、多数の皆様のご参加をお待ちしております。

【タイトル】
IRIS概要 システム構築編

【日時】3月19日(水)13:30⁻14:00 (参加費無料・事前登録制)

【概要】InterSystems IRIS は高機能な次世代データプラットフォームですが、独自のアーキテクチャによる高速データアクセスに加えて、優れたリソース効率・拡張性・耐障害性といった高次元のシステム管理を兼ね備えており、さまざま運用環境に耐えうる製品となっています。

このウェビナーでは、20年間にわたり InterSystems でシステムサポートを行ってきたサポートエンジニアより、InterSystems IRIS で実現可能な高可用性や耐障害性をそなえたシステム構築のパターン、またそれを運用・管理するための便利なツールなど、IRIS システムに関する主要な機能を網羅して、みなさまにご紹介いたします。

【対象者】

  • IRISの高可用性や耐障害性にご興味のある方
  • IRISを管理運用される方
  • IRISをこれから深く知りたい方

ご登録はこちらから

Discussion (0)1
Log in or sign up to continue