我正在尝试解决如何在映射的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加入?我也对从该系统中提取数据的其他想法持开放态度。
答案 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()
将路径加入内容存储位置。