MLCP导入模块数据库报错:无法更新目录URI的服务器维护属性
问题根因
该报错由MLCP尝试写入服务器自动维护的显式目录属性触发:所有报错路径均为目录URI,而非实际的模块文件URI,MarkLogic不允许用户修改这类系统生成的目录内置属性,你的模块文件本身已经正常导入,仅目录属性写入步骤失败。
你之前关闭的maintain last modified和maintain directory last modified仅控制服务器是否自动更新这类属性,不会阻止MLCP主动尝试写入归档中自带的目录属性记录。
可行解决方案(全程保留模块属性与权限)
不需要全局关闭-copy_properties或-copy_permissions,只需在现有MLCP命令中追加对应参数即可:
方案1:禁用显式目录创建(推荐)
模块数据库的目录默认是MarkLogic根据模块URI自动生成的隐式目录,无需手动创建。添加-create_directories false参数,让MLCP跳过显式目录的创建和属性写入步骤,完全不影响实际模块的属性、权限、内容写入。
修改后命令如下:
./mlcp.sh import -host localhost -port 8000 -username ___ -password ___ -mode local -database api-modules -input_file_path /backups/api-modules -input_file_type archive -input_compressed -create_directories false
方案2:过滤系统内置属性(适用于必须保留显式目录的场景)
如果你的业务依赖显式目录存在,可添加-property_filter "prop:last-modified,prop:directory-last-modified"参数,MLCP会自动跳过这两个服务器维护的内置属性写入,其他自定义属性、权限都会正常保留。
效果验证
导入完成后可抽查任意模块的权限和自定义属性,确认与源数据库一致即可,不会再出现Cannot update server-maintained properties相关报错。
内容的提问来源于stack exchange,提问作者Tim Meagher
相关产品推荐
相关产品推荐

