Oracle краулер

Примечание

В статье приведен пример краулера, характеристики которого настраиваются индивидуально под каждого заказчика. Краулер поставляется только по запросу и не идет по умолчанию в стандартной сборке.

Краулер не поддерживает автоматическую миграцию модели при запуске сканирования. Перед первым запуском необходимо вручную импортировать модель из библиотеки.

Модель совместима с моделью DIS краулеров. Если на стенде уже используется модель DIS, импорт не требуется.

Примечание

Краулер для версий Oracle должен быть не ниже 12 версии.

Установка библиотеки краулеров

  1. Скопируйте содержимое libs из архива с библиотекой краулеров в директорию universe-integration в Docker deploy.

  2. Перезапустите стенд.

  3. Добавьте библиотеку crawlers-library-{version}.jar из архива в систему в разделе "Библиотеки".

Параметры

Таблица 1 – Параметры краулера Oracle

Системное имя (Отображаемое имя)

Формат

Пояснение/Примечание

resourceName (Наименование)

Строка

На основе значения данного поля формируется префикс external_id ( формат: <resourceName>://)

database (База данных)

Строка

Имя базы данных

host (Хост)

Строка

Хост базы данных

port (Порт)

Строка

Порт базы данных

username (Имя пользователя)

Строка

Имя пользователя

password (Пароль)

Строка

Пароль пользователя

schema (Схема)

Строка

Схема, sql выражение. Зарезервированные слово включая символы "<schema>". Обычное sql условие (where). Данное условие добавляется к запросу: SELECT * from all_users <выражение>

Примеры выражений:

Включить список схем: <schema> in ('SYS', 'SYSTEM', 'USER')

Исключить список схем: <schema> not in ('SYS', 'SYSTEM')

Похоже: (like) <schema> like '%%SYS' or <schema> like 'SYS%%' or <schema> like '%%SYS%%'

Несколько условий: <schema> in ('USER','TEST') or <schema> like 'SYS%%' and <schema> !='SYSTEMD'

table (Таблицы и представления)

Строка

Sql Выражение. Зарезервированное слово включая символы "<table>" для таблиц и представлений. Синтаксис такой же как и для параметра "Схема". + Если load_system_objects = false, то добавляется условие ORACLE_MAINTAINED = 'N'

load_system_objects (Загружать системные объекты)

Чекбокс

Загружать системные объекты (системные схемы и их объекты). Добавляется в условие к параметру "Схемы": ORACLE_MAINTAINED = 'N' ("Если не включен"), если включен, то условие не добавляется.

Активы

  • Системное имя актива и параметра складывается из префикса com_infa_ldm_relational_ и имен актива из таблицы активов, например Table. Системное имя актива Table = com_infa_ldm_relational_Table.

  • Системное имя актива констрейнтов складывается из префикса com_infa_ldm_constraint_ и имени актива из таблицы активов ниже, например ForeignKey. Системное имя актива ForeignKey = com_infa_ldm_constraint_ForeignKey.

  • Параметры core_description и core_name не имеют префикс. Данные параметры присутствуют в каждом активе.

Актив Database

  • Параметры в БД:

    • core_description

    • core_name

    • SystemType: banner_full

  • Row Mapper: OracleDatabaseRowMapper

  • Sql выражение

SELECT * FROM V$VERSION

Актив Schema

  • Параметры в БД:

    • core_description

    • core_name: username

  • Row Mapper: OracleSchemaRowMapper

  • Sql выражение:

SELECT username AS owner from all_users %1
UNION
SELECT 'PUBLIC' as schema_name FROM DUAL

где %1 - Выражение из параметра "schema"

Актив Table

  • Параметры в БД:

    • core_description

    • core_name: table_name

    • com_infa_ldm_relational_NativeType: Table type (for oracle is empty)

  • Row Mapper: OracleTableRowMapper

  • Sql выражение:

WITH tables AS (
     SELECT * FROM dba_tables t
     WHERE OWNER in (
         SELECT username AS owner from all_users %1 %2
         UNION
         SELECT 'PUBLIC' as schema_name FROM DUAL
     )
)

SELECT * FROM tables %2

где %1 - Выражение из параметра "schema", %2 - Выражение из параметра "table"

Актив View

  • Параметры в БД:

    • core_description

    • core_name: view_name

    • com_infa_ldm_relational_DDL: View DDL

  • Row Mapper: OracleViewRowMapper

  • Sql выражение:

WITH views AS (
    SELECT * FROM all_views t
    WHERE OWNER in (
        SELECT username AS owner from all_users %1
        UNION
        SELECT 'PUBLIC' as schema_name FROM DUAL
    )
)

SELECT * FROM views %2

где %1 - Выражение из параметра "schema", %2 - Выражение из параметра "table"

Актив Column

  • Параметры в БД:

    • core_description

    • core_name: column_name

    • Datatype: data_type

    • Nullable: nullable

    • DatatypeLength: data_length

    • DatatypeScale: data_scale

    • DefaultValue: data_default

    • Position: column_id

  • Row Mapper: OracleTableColumnRowMapper

  • Sql выражение:

WITH table_cols AS (
     SELECT * FROM DBA_TAB_COLUMNS
     WHERE TABLE_NAME IN (SELECT table_name FROM all_tables %1 )
     AND substr(table_name, 1, 4) != 'BIN$' AND OWNER in (
         SELECT username AS owner from all_users %1
         UNION
         SELECT 'PUBLIC' as schema_name FROM DUAL
     )
     ORDER BY TABLE_NAME, COLUMN_ID
)

SELECT * FROM table_cols;

где %1 - Выражение из параметра "table", %2 - Выражение из параметра "schema"

Актив ViewColumn

  • Параметры в БД:

    • core_description

    • core_name: column_name

    • Datatype: data_type

    • Nullable: nullable

    • DatatypeLength: data_length

    • DatatypeScale: data_scale

    • DefaultValue: data_default

    • Position: column_id

  • Row Mapper: OracleViewColumnRowMapper

  • Sql выражение:

WITH view_cols AS (
     SELECT * FROM DBA_TAB_COLUMNS
     WHERE TABLE_NAME IN (SELECT view_name FROM all_views %1 )
     AND substr(table_name, 1, 4) != 'BIN$' AND OWNER in (
         SELECT username AS owner from all_users %1
         UNION
         SELECT 'PUBLIC' as schema_name FROM DUAL
     )
     ORDER BY TABLE_NAME, COLUMN_ID
)

SELECT * FROM view_cols;

где %1 - Выражение из параметра "table", %2 - Выражение из параметра "schema"

Активы PrimaryKey, ForeignKey, UniqueConstraint, CheckConstraint

  • Параметры в БД:

    • core_description

    • core_name: constraint_name

    • com_infa_ldm_constraint_origin: check constraint expression

  • Row Mapper: OracleConstraintsRowMapper

  • Sql выражение:

WITH constraints AS (
     SELECT * FROM all_constraints
      WHERE constraint_type IN ('P', 'F', 'U', 'C')
     AND owner in (
         SELECT username AS owner from all_users %1
         UNION
         SELECT 'PUBLIC' as schema_name FROM DUAL
     )
     AND table_name in ( select table_name from all_tables %2 )
)

где %1 - Выражение из параметра "schema", %2 - Выражение из параметра "table"

Актив Package

  • Параметры в БД:

    • core_description

    • core_name: constraint_name

    • ddl: ddl

    • Status: status

  • Row Mapper: OracleObjectsPackageRowMapper

  • Sql выражение:

WITH objects as
     SELECT a.owner, a.object_name, a.object_type,
     dbms_metadata.get_ddl(
              a.OBJECT_TYPE, a.OBJECT_NAME, a.OWNER) AS DDL
     FROM all_procedures a
     WHERE a.OBJECT_TYPE = 'PACKAGE'
     AND a.owner in (
         SELECT username AS owner from all_users %1
        UNION
        SELECT 'PUBLIC' as schema_name FROM DUAL
     )
)

где %1 - Выражение из параметра "schema"

Актив Function

  • Параметры в БД:

    • core_description

    • core_name: constraint_name

    • ddl: ddl

  • Row Mapper: OracleObjectsFunctionRowMapper

  • Sql выражение:

WITH objects as
     SELECT a.owner, a.object_name, a.object_type,
     dbms_metadata.get_ddl(
              a.OBJECT_TYPE, a.OBJECT_NAME, a.OWNER) AS DDL
     FROM all_procedures a
     WHERE a.OBJECT_TYPE = 'FUNCTION'
     AND a.owner in (
         SELECT username AS owner from all_users %1
         UNION
        SELECT 'PUBLIC' as schema_name FROM DUAL
     )
)

где %1 - Выражение из параметра "schema"

Актив StoredProcedure

  • Параметры в БД:

    • core_description

    • core_name: constraint_name

    • ddl: ddl

  • Row Mapper: OracleObjectsProcedureRowMapper

  • Sql выражение:

WITH objects as
     SELECT a.owner, a.object_name, a.object_type,
     dbms_metadata.get_ddl(
             a.OBJECT_TYPE, a.OBJECT_NAME, a.OWNER) AS DDL
     FROM all_procedures a
      WHERE a.OBJECT_TYPE = 'PROCEDURE'
     AND a.owner in (
        SELECT username AS owner from all_users %1
         UNION
         SELECT 'PUBLIC' as schema_name FROM DUAL
     )
)

где %1 - Выражение из параметра "schema"

Актив Synonym

  • Параметры в БД:

    • core_description

    • core_name: constraint_name

    • ddl: ddl

  • Row Mapper: OracleObjectsSynonymRowMapper

  • Sql выражение:

WITH synonyms as (
   SELECT s.owner, s.synonym_name, 'SYNONYM' as object_type,
   dbms_metadata.get_ddl('SYNONYM', s.SYNONYM_NAME, s.OWNER) AS ddl
   FROM all_synonyms s
   WHERE s.owner in (
         SELECT username AS owner from all_users %1
          UNION
          SELECT 'PUBLIC' as schema_name FROM DUAL
    )
    AND s.table_name in ( select table_name from dba_tables %2 )
)

где %1 - Выражение из параметра "schema" + параметр load_system_objects; %2 - Выражение из параметра "table"

Актив Trigger

  • Параметры в БД:

    • core_description

    • core_name: constraint_name

    • ddl: ddl

  • Row Mapper: OracleObjectsTriggerRowMapper

  • Sql выражение:

WITH triggers as (
     SELECT t.OWNER ,
            t.TRIGGER_NAME, 'TRIGGER' as object_type,
            dbms_metadata.get_ddl(
                'TRIGGER', t.TRIGGER_NAME, t.OWNER) AS DDL,
            t.trigger_type,
            t.triggering_event
     FROM all_triggers t
     WHERE t.owner in (
        SELECT username AS owner from all_users %1
        UNION
        SELECT 'PUBLIC' as schema_name FROM DUAL
     )
     AND t.table_name in ( select table_name from dba_tables %2 )
)

где %1 - Выражение из параметра "schema" + параметр load_system_objects; %2 - Выражение из параметра "table"

Связи (Иерархия)

Древо активов:

+ База данных Oracle
└── + Схема X
  └── + Таблицы
        ├── + Таблица X
        |   ├── + Колонки
        |   |   └── + Колонка X
        |   ├── Foreign Key (Список всех FK таблицы)
        |   ├── Primary Key (Список всех PK таблицы)
        |   ├── Check Constraint (Список всех CC таблицы)
        |   └── Unique Constraint (Список всех UC таблицы)
        ├── + Представления
        |   └── + Представление X
        |       └── + Колонки
        |           └── Колонка X
        ├── Пакеты
        ├── Процедуры
        ├── Синонимы
        ├── Функции
        └── Триггеры

Таблица 2 – Параметры связей

Координаты всех связей: 1:0

Имя связи

Левый актив - Правый актив

Row Mapper

com_infa_ldm_relational_DatabaseSchema

Database - Schema

OracleSchemaLinkRowMapper

com_infa_ldm_relational_SchemaTable

Schema - Table

OracleTableLinkRowMapper

com_infa_ldm_relational_SchemaView

Schema - View

OracleViewLinkRowMapper

com_infa_ldm_relational_SchemaPackage

Schema - Package

OracleObjectsPackageLinkRowMapper

com_infa_ldm_relational_SchemaFunction

Schema - Function

OracleObjectsFunctionLinkRowMapper

com_infa_ldm_relational_SchemaStoredProcedure

Schema - StoredProcedure

OracleObjectsProcedureLinkRowMapper

com_infa_ldm_relational_SchemaSynonym

Schema - Synonym

OracleObjectsSynonymRowLinkMapper

com_infa_ldm_relational_SchemaTrigger

Schema - Trigger

OracleObjectsTriggerLinkRowMapper

com_infa_ldm_relational_ViewViewColumn

View - ViewColumn

OracleViewColumnLinkRowMapper

com_infa_ldm_relational_TableColumn

Table - Column

OracleTableColumnLinkRowMapper

com_infa_ldm_constraint_DataSetPrimaryKey

Table - PrimaryKey

OracleConstraintsLinkFromTableRowMapper

com_infa_ldm_constraint_DataSetForeignKey

Table - ForeignKey

com_infa_ldm_relational_TableUniqueConstraint

Table - UniqueConstraint

com_infa_ldm_relational_TableCheckConstraint

Table - CheckConstraint

Связи констрейнтов

Координаты связей констрейнтов:

  • com_infa_ldm_constraint_ForeignKeyPrimaryKeyDataElement: 0:0,

  • com_infa_ldm_constraint_PrimaryKeyDataElement: 0:0,

  • com_infa_ldm_relational_UniqueConstraintColumn: 1:0,

  • com_infa_ldm_relational_CheckConstraintColumn: 0:0.

Таблица 3 – Параметры связей констрейнтов

Имя связи

Левый актив - Правый актив

Row Mapper

com_infa_ldm_constraint_ForeignKeyPrimaryKeyDataElement

ForeignKey - Column

OracleConstraintsLinkFromColumnRowMapper OracleConstraintsLinkToColumnRowMapper

com_infa_ldm_constraint_PrimaryKeyDataElement

PrimaryKey - Column

OracleConstraintsLinkFromColumnRowMapper

com_infa_ldm_relational_UniqueConstraintColumn

UniqueConstraint - Column

OracleConstraintsLinkFromColumnRowMapper

com_infa_ldm_relational_CheckConstraintColumn

CheckConstraint - Column

OracleConstraintsLinkFromColumnRowMapper

Связи Oracle objects (ALL_OBJECT)

Row mapper связей: OracleObjectsLinksRowMapper

Координаты всех связей: 0:0, за исключением:

  • com_infa_ldm_relational_PackagePackage: 1:0,

  • com_infa_ldm_relational_PackageStoredProcedure: 1:0.

Таблица 4 – Параметры связей объектов

Имя связи

Левый актив

Правый актив

com_infa_ldm_relational_TablePackage

Table

Package

com_infa_ldm_relational_TableFunction

Function

com_infa_ldm_relational_TableStoredProcedure

StoredProcedure

com_infa_ldm_relational_TableTrigger

Trigger

com_infa_ldm_relational_TableSynonym

Synonym

com_infa_ldm_relational_ViewPackage

View

Package

com_infa_ldm_relational_ViewFunction

Function

com_infa_ldm_relational_ViewStoredProcedure

StoredProcedure

com_infa_ldm_relational_ViewSynonym

Synonym

com_infa_ldm_relational_ViewTrigger

Trigger

com_infa_ldm_relational_PackagePackage

Package

Package

com_infa_ldm_relational_PackageFunction

Function

com_infa_ldm_relational_PackageSynonym

Synonym

com_infa_ldm_relational_PackageStoredProcedure

Procedure

com_infa_ldm_relational_PackageTrigger

Trigger

com_infa_ldm_relational_FunctionFunction

Function

Function

com_infa_ldm_relational_FunctionPackage

Package

com_infa_ldm_relational_FunctionStoredProcedure

StoredProcedure

com_infa_ldm_relational_FunctionSynonym

Synonym

com_infa_ldm_relational_FunctionTrigger

Trigger

com_infa_ldm_relational_StoredProcedureStoredProcedure

StoredProcedure

StoredProcedure

com_infa_ldm_relational_StoredProcedureFunction

Function

com_infa_ldm_relational_StoredProcedureSynonym

Synonym

com_infa_ldm_relational_StoredProcedureTrigger

Trigger

com_infa_ldm_relational_SynonymSynonym

Synonym

Synonym

com_infa_ldm_relational_SynonymPackage

Package

com_infa_ldm_relational_SynonymFunction

Function

com_infa_ldm_relational_SynonymStoredProcedure

StoredProcedure

com_infa_ldm_relational_SynonymTrigger

Trigger