来自SQL

时间:2016-07-07 18:14:25

标签: oracle11g documentum6.5

我正在尝试解决如何在映射的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 

此外,使用带有getpath的API会返回有效数据,但是当选择显示SQL时,会给出相同的查询(稍微向下),但实际上并没有给出文件的位置。

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

这是您选择&#39;显示SQL&#39;。

时提供的查询
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加入?我也对从该系统中提取数据的其他想法持开放态度。

1 个答案:

答案 0 :(得分:0)

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

  

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