Oracle краулер
Примечание
В статье приведен пример краулера, характеристики которого настраиваются индивидуально под каждого заказчика. Краулер поставляется только по запросу и не идет по умолчанию в стандартной сборке.
Краулер не поддерживает автоматическую миграцию модели при запуске сканирования. Перед первым запуском необходимо вручную импортировать модель из библиотеки.
Модель совместима с моделью DIS краулеров. Если на стенде уже используется модель DIS, импорт не требуется.
Примечание
Краулер для версий Oracle должен быть не ниже 12 версии.
Извлекаемые объекты
В результате сканирования из источника извлекаются метаданные следующих типов объектов:
- Таблица 
- Синоним 
- Представление 
- Триггер 
- Функция 
- Процедура 
- Ключ 
- Материализованное представление 
Настройка разрешений для учетной записи
У учетной записи пользователя базы данных Oracle должна быть роль SELECT_CATALOG_ROLE.
Загрузка файлов и библиотек
Загрузка дополнительных файлов и библиотек не требуется.
Параметры подключения к источнику
С сервера, на котором развернут сканер, а также с сервера каталога данных должны быть открыты порты (по умолчанию порт базы данных 1521) до сервера базы данных сканируемого источника. IP адрес сервера и порт базы данных источника указываются в параметрах подключения (Таблица 1).
Таблица 1 – Параметры краулера Oracle
| Системное имя (Отображаемое имя) | Формат | Пояснение/Примечание | 
|---|---|---|
| resourceName (Наименование) | Строка | На основе значения данного поля формируется префикс external_id ( формат: <resourceName>://) | 
| database (База данных) | Строка | Имя базы данных | 
| host (Хост) | Строка | Хост базы данных | 
| port (Порт) | Строка | Порт базы данных | 
| username (Имя пользователя) | Строка | Имя пользователя | 
| password (Пароль) | Строка | Пароль пользователя | 
| schema (Схема) | Строка | Схема, sql выражение. Зарезервированные слово включая символы "<schema>". Обычное sql условие (where). Данное условие добавляется к запросу:  | 
| 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 |