0

我正在尝试弄清楚如何在映射的文档共享上找到文件的物理位置。使用 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 脚本获得此信息的任何指导,可以编写以在 CSV 中提供路径和 r_object_id 以加入?我也对其他从这个系统中提取数据的想法持开放态度。

4

1 回答 1

0

经过大量挖掘后,我发现解决此问题的最佳方法是将数据票转换为您的路径。引用问题中链接的文章:

确定内容路径的技巧是解码 data_ticket 的 2 的补码十进制值。通过首先将 2^32 添加到数字然后将其转换为十六进制,将 data_ticket 转换为 2 的补码十六进制数。您可以使用科学计算器来执行此操作,或者从网上获取一些 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()

于 2016-08-03T11:51:01.620 回答