Расположение общего доступа к содержимому документа Documentum из SQL

Я пытаюсь разобраться, как найти физическое расположение файла на сопоставленном ресурсе documentum. Есть несколько способов сделать это с помощью API или DQL, но ни один из них не масштабируется до того уровня, который нам нужен для переноса данных из системы. В конечном итоге планируется перенести все данные в новую систему, но для этого нам нужны местоположения файлов.

Следующие ресурсы были полезны:

https://robineast.wordpress.com/2007/01/24/where-is-my-content-stored/ https://community.emc.com/thread/51958?start=0&tstart=0

Запуск этого DQL даст нам местоположение, но предоставленный SQL не возвращает никаких данных, относящихся к тому, что мы пытаемся выполнить (или вообще к чему-либо).

execute GET_PATH for '<parent_id_goes_here>'

Результат:

t:\documentum\data\schema\storage_volume_number\00000000\80\01\ef\63.xlsx 

Кроме того, использование API с getpath возвращает действительные данные, но при выборе отображения SQL выдает тот же запрос (немного ниже), который на самом деле не указывает местоположение файла.

API>getpath,c,<r_object_id>
...
t:\documentum\data\schema\storage_volume_number\00000000\80\01\ef\63.xlsx 

Это запрос, предоставляемый обоими, когда вы выбираете «Показать SQL».

select a.r_object_id,    b.audit_attr_names, a.is_audittrail,
       a.event,          a.controlling_app,  a.policy_id,
       a.policy_state,   a.user_name,        a.message,
       a.audit_subtypes, a.priority,         a.oneshot,
       a.sendmail,       a.sign_audit
  from dmi_registry_s a, dmi_registry_r b
 where a.r_object_id = b.r_object_id and a.registered_id = :p0 and (a.event = 'all' or a.event = 'dm_all' or a.event = :p1)
 order by a.is_audittrail desc,   a.event         desc,
          a.r_object_id,          b.i_position    desc;
:p0 = < parent_id >;
:p1 = dm_getfile

Приведенный выше запрос ничего не возвращает в PL/SQL, а удаление переменных :p0/:p1 просто возвращает данные аудита.

Любое руководство о том, как получить это с помощью SQL или сценария DQL, который можно написать, чтобы указать путь и r_object_id в CSV для присоединения? Я также открыт для других идей извлечения данных из этой системы.


person Taylor    schedule 07.07.2016    source источник


Ответы (1)


После долгих поисков я обнаружил, что лучший способ сделать это — преобразовать билет данных в ваш путь. Чтобы процитировать статьи, связанные с вопросом:

Хитрость в определении пути к содержимому заключается в декодировании десятичного значения дополнения data_ticket до 2. Преобразуйте data_ticket в шестнадцатеричное число с дополнением 2, сначала добавив 2 ^ 32 к числу, а затем преобразовав его в шестнадцатеричное. Вы можете использовать научный калькулятор, чтобы сделать это, или получить код Java из сети.

-2147474649 + 2^32 = (-2147474649 + 4294967296) = 2147492647

преобразование 2147492647 в шестнадцатеричный = 80002327

Теперь разделите шестнадцатеричное значение data_ticket на каждые два символа, добавьте его к file_system_path и docbase_id (дополняется до 8 бит) и добавьте dos_extension. Виола! у вас есть полный путь к файлу содержимого.

C:/Documentum/data/docbase/content_storage_01/0000001/80/00/23/27.txt

Этот код PowerShell выполнит преобразование за вас — просто передайте ему билет данных.

$Ticket = -2147474649
$FSTicketInt = $Ticket + [math]::Pow(2, 32)
$FSTicketHex = [Convert]::ToString($FSTicketInt, 16)
$FSTicketPath = ($FSTicketHex -split '(..)' | ? {$_}) -join '\'

Затем все, что вам нужно сделать, это соединить путь с местом хранения контента, используя [System.IO.Path]::Combine().

person Taylor    schedule 03.08.2016