Nueva publicación

Encontrar

Pregunta
· 13 jul, 2024

How to read the routine object code

How to see the code of the routine objects in the database. While importing the routine in the xml format the object code is in Database64 format but not able to see the actual code. How to decompile or how to see the code of the routines. 

3 comentarios
Comentarios (3)1
Inicie sesión o regístrese para continuar
Comentarios (8)2
Inicie sesión o regístrese para continuar
Artículo
· 12 jul, 2024 Lectura de 6 min

Base de Dados Multivolume: um molho assombroso!

 

IS Comunidade de Desenvolvedores, Eu 👑 você.

Base de Dados Multivolume

Eu obtive essa explicação diretamente da documentação, mas suponhamos que eu tenha perguntado a uma LLM para evitar dizer que a copiei :)

Por defeito, sua base de dados em IRIS usa um único arquivo IRIS.DAT. Você pode configurar sua base de dados para que se expanda automaticamente em volumes adicionais (IRIS-0001.VOL, IRIS-0002.VOL, e assim sucessivamente)  ao alcançar um limite de tamanho específico. Também pode expandir deliberadamente sua base de dados em volumes adicionais. Os volumes adicionais podem residir no mesmo diretório que IRIS.DAT e/ou em um conjunto de diretórios adicionais.

estou passando rapidamente por essa característica e estou a colocando em prova, mas o que quero fazer é estabelecer um limite pequeno e revisar a operação de expansão em múltiplos volumes em um PVC alternativo (diretório). Sem dúvida, as ramificações em respeito a Mirroring, Rendimento (farra!) e Gestão são enormes e o seguinte que necessito é um meio simples para entendê-las, então aqui está. A solução mais direta considera se há um "callback" onde possamos por exemplo portar um novo volume na nuvem antes que a expansão chegue ao tamanho limite.

Ambiente

Tenho um deploy em execução em 2024.1 (Build 263U) com um PVC OpenEBS de 50 GiB para o meu $ISC_DATA_DIRECTORY, o configurei há aproximadamente um mês.

Adicionei um PVC OpenEBS adicional ao meu namespace:

#kind: PersistentVolumeClaim
#apiVersion: v1
#metadata:
#  name: jiva-iris-volume-claim
#spec:
#  storageClassName: openebs-jiva-csi-default
#  accessModes:
#    - ReadWriteOnce
#  resources:
#    requests:
#      storage: 50Gi
#--
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: jiva-iris-volume-claim-mv
spec:
  storageClassName: openebs-jiva-csi-default
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi

O apliquei

sween@run1:~$ kubectl apply -f deezwatts-volume.yaml -n rivian
persistentvolumeclaim/jiva-iris-volume-claim-mv created

O juntei e apliquei no meu deploy através do meu container init:

<snips>
volumes:
   - name: task-pv-storage
        persistentVolumeClaim:
            claimName: jiva-iris-volume-claim
        - name: task-pv-storage-mvd
          persistentVolumeClaim:
            claimName: jiva-iris-volume-claim-mv
<snips>
volumeMounts:
    - name: task-pv-storage
   mountPath: /data
    - name: task-pv-storage-mvd
   mountPath: /data-mvd

Agora estamos configurando outro volume para a expansão multinível para `/data-mvd`.



Configuração

Aqui está a forma rápida na qual o fiz, disfarçando-me de Administrador de Sistemas (Advertência: modo escuro não ativado 🕶️)

Vamos criar a base de dados no volume principal para a instância e revisar as novas propriedades da operação.

Criando a base de dados "mvd" no volume principal, as novidades são as seguintes:

O limite do novo volume é onde planejamos as coisas inicialmente para o gatilho de expansão. Há outros lugares para configurar o lugar onde se criarão os arquivos .DAT de transbordamento. É claro, preste atenção ao texto de ajuda que aparece abaixo do parâmetro de configuração, receberá de imediato uma lição sobre as melhores práticas 💯💯.

Coloque o valor zero para desabilitar a criação automática de novos volumes. Se colocar um valor diferente de zero, quando o IRIS.DAT se expandir para além desse limite, se criará um novo arquivo de volume chamado IRIS-0001.VOL. Quando a expansão fizer crescer esse arquivo para além desse limite, se criará IRIS-0002.VOL, e assim sucessivamente. Para valores diferentes de zero, se recomenda um mínimo d e1 terabyte para evitar um número excessivo de arquivos. Cada base de dados está limitada a 200 volumes.

Agora, monte a nova base de dados. Não poderá configurá-la posteriormente até que esteja montada.

Encontrará na lista de bases de dados a coluna de volumes.

Aqui é onde se configura o lugar alternativo para a base de dados que queremos expandir volumes múltiplos.



Expandir

Com o limite da base de dados sendo bastante pequeno, me confundi um pouco com a ordem das coisas, mas valeu a pena mostrar.

Para gerar um esgotamento de espaço em IRIS.DAT, adicionei um namespace em cima da base de dados:

Uma vez que tive o namespace configurado, configurei o administrador de pacotes ZPM e instalei algumas coisas do openexchange.
 

irisowner@iris-deezwatts-deployment-7b9bfcff8f-dssln:~$ irissession IRIS

Node: iris-deezwatts-deployment-7b9bfcff8f-dssln, Instance: IRIS

USER>zn "MVD"
MVD>zn "%SYS" d ##class(Security.SSLConfigs).Create("z") s r=##class(%Net.HttpRequest).%New(),r.Server="pm.community.intersystems.com",r.SSLConfiguration="z" d r.Get("/packages/zpm/latest/installer"),$system.OBJ.LoadStream(r.HttpResponse.Data,"c")

Load started on 06/04/2024 13:43:08
Loading file /data/IRIS/mgr/Temp/z9mu1CvnPnaGbA.xml as xml
Imported class: %ZPM.Installer
Compiling class %ZPM.Installer
Compiling routine %ZPM.Installer.1
Load finished successfully.

%SYS>zpm

=============================================================================
|| Welcome to the Package Manager Shell (ZPM). version 0.7.1               ||
|| Enter q/quit to exit the shell. Enter ?/help to view available commands ||
|| Current registry https://pm.community.intersystems.com                  ||
=============================================================================
zpm:%SYS>install "zpm-registry"

Agora podemos ver o "molho" de base de dados multivolume na interface de usuário da base de dados:

E também na estrutura de pastas do pod:

irisowner@iris-deezwatts-deployment-7b9bfcff8f-dssln:/data-mvd$ ls -ltr /data-mv*
total 5140
drwxrwxrwx 2 irisowner irisowner   16384 Jun  4 11:56 lost+found
-rw-rw---- 1 irisowner irisowner      20 Jun  4 12:11 iris.dbdir
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:25 IRIS-0022.VOL
irisowner@iris-deezwatts-deployment-7b9bfcff8f-dssln:/data-mvd$ ls -ltr /data/IRIS/mgr/mvd
total 164
drwxrwxrwx 2 irisowner irisowner    4096 Jun  4 11:15 stream
-rw-rw---- 1 irisowner irisowner      63 Jun  4 12:01 iris.lck
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0001.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0002.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0003.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0004.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0005.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0006.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0007.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0008.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0009.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0010.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0012.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0015.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0018.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0016.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0019.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0020.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0017.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0014.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0013.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0011.VOL
-rwxrwxrwx 1 irisowner irisowner 5242880 Jun  4 13:08 IRIS.DAT
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 13:08 IRIS-0021.VOL

Acho que tenho um novo brinquedo para me entreter!


Conclusão

Definitivamente isso foi uma publicação rápida e tenho que voltar ao trabalho. Provavelmente deveria ter convertido em uma discussão em lugar de artigo, mas espero com ansiedade futuras experiências e ações compartilhadas da comunidade com essa característica a medida que seja adotada.

Comentarios (0)1
Inicie sesión o regístrese para continuar
Anuncio
· 12 jul, 2024

[Vidéo] Comment construire une Supply Chain agile, résiliente et intelligente ?

Salut la Communauté!

Profitez de regarder la nouvelle vidéo sur la chaîne Youtube d'InterSystems France :

📺 Comment construire une Supply Chain agile, résiliente et intelligente ?

Intervenants :
🗣 Isabelle Bouchoucha, Directeur Conseil - Expert Supply Chain, CGI Business Consulting sur le sujet " Intégration de bout en bout : le facteur clé d'une supply chain plus durable "
🗣 Hervé Hillion, Associé, SCALE sur le sujet " Modéliser, évaluer, simuler et optimiser la supply chain de bout en bout grâce au jumeau numérique "
🗣 @Sylvain Guilbaud, Expert InterSystems France  sur le sujet " Les évolutions technologiques nécessaires pour accroître la visibilité, l'agilité et la résilience de votre supply chain "

Abonnez-vous à notre chaîne youtube pour plus de vidéos et restez à l'écoute !

Comentarios (0)0
Inicie sesión o regístrese para continuar
Artículo
· 11 jul, 2024 Lectura de 4 min

管理ポータルのユーザ設定をプログラムで作成する方法

これは InterSystems FAQ サイトの記事です。

管理ポータル > [システム管理] > [セキュリティ] 以下の設定は、%SYSネームスペースにあるSecurityパッケージ以下クラスが提供するメソッドを利用することでプログラムから作成することができます。

ユーザ設定については、Security.UsersクラスCreate()メソッドを使えば作成できますが、ユーザを作成するだけでは適切な権限が付与されずに目的のデータにアクセスできない状況もあります。

例)testAユーザ作成

    %SYS>set st=##class(Security.Users).Create("testA",,"testA","これはテストユーザです","USER")
    
    %SYS>write st
    1

    上記メソッドで作成した結果は以下の通りです。(ロール付与無し、テーブルに対する権限の割り当てもなしの状態)

     

    以降の解説では、以下のシナリオをもとにした設定を行っていきます。

    シナリオ:アプリケーション開発者用ロールとユーザを作成する

    1) アプリケーション開発者のtestAは、USERネームスペースにログインするアプリケーション開発者です(=%DevelopmentリソースのUse許可を与えます)。

    2) このユーザはUSERネームスペース内で自由にテーブルの作成・参照・更新が行えるよう適切な特権を持つように定義します。

     

    1) のアプリケーション開発者testAの作成は、以下の通りです。

    未作成の場合は以下実行します。(現時点ではロールは何も付与していません。)

    • 第1引数:ユーザ名
    • 第2引数:ロール(複数ある場合はカンマ区切りで指定)
    • 第3引数:パスワード
    • 第4引数:ユーザのフルネーム
    • 第5引数:開始ネームスペース(ログイン後にアクセスするネームスペース)
    %SYS>set st=##class(Security.Users).Create("testA",,"testA","これはテストユーザです","USER")
    
    %SYS>write st
    1

     

    2)で触れられているテーブルの特権はユーザに直接付与することもできますが、ロールにも付与できます。

    アプリケーション開発者であるtestA 以外にも開発者が増えたとき簡単に同じ設定をユーザに追加できるよう、%DevelopmentリソースのUse許可、%DB_USERロール、テーブルに対する操作が行える特権を追加したロール:MyAppDeveloper を作成します。

    %SYSネームスペースで実行します。

    set st=##class(Security.Roles).Create("MyAppDeveloper","アプリケーション開発者用ロール","%Development:U","%DB_USER")

    Security.RolesクラスCreate()メソッドに指定する引数は以下の通りです。

    第1引数:ロール名
    第2引数:ロールの説明
    第3引数:リソースの割り当て(未指定もOK)
    第4引数:割り当てるロール(複数ある場合はカンマ区切りで指定)

    管理ポータルでは以下のように表示されます。

    管理ポータル > [システム管理] > [セキュリティ] > [ロール] > [MyAppDeveloper]ロールの「Assigned To」タブ選択

     

    このロールにUSERネームスペースの全てのSQL管理者特権を付与します。

    set p=##class(Security.SQLAdminPrivilegeSet).%New()
    set p.AlterTable=1
    set p.AlterView=1
    set p.BuildIndex=1
    set p.CancelQuery=1
    set p.CreateFunction=1
    set p.CreateMethod=1
    set p.CreateProcedure=1
    set p.CreateTable=1
    set p.CreateTrigger=1
    set p.CreateView=1
    set p.DropFunction=1
    set p.DropProcedure=1
    set p.DropQuery=1
    set p.DropTable=1
    set p.DropTrigger=1
    set p.DropView=1
    set p.Namespace="USER"
    set p.Grantee="MyAppDeveloper"
    set st=p.%Save()

     

    ロールMyAppDeveloperの[SQL Admin Privileges]

       

     

    最後に、アプリケーション開発者testAに作成したロール:MyAppDeveloperを付与します。(AddRoles()メソッドを使用します。)

    %SYS>set st=##class(Security.Users).AddRoles("testA","MyAppDeveloper")
    
    %SYS>write st
    1

     

    これで設定完了です。

    確認のため、管理ポータルをログアウトし、testAユーザでログインします(パスワードはtestAです)

    USERネームスペースにアクセスすることを確認し、管理ポータル > [システムエクスプローラ] > [SQL] で任意のSQL文を実行します。(CREATE TABLEなどが実行できることを確認します)

    Comentarios (0)1
    Inicie sesión o regístrese para continuar