Я написал Xquery, который выполняется во время выполнения инкрементного резервного копирования. Я знаю, что состояние резервной копии возвращает три возможных значения -
completed
, in-progress
и failed
. Не уверен, точное значение последнего, но в любом случае это мой xquery -
xquery version "1.0-ml";
declare function local:escape-for-regex
( $arg as xs:string? ) as xs:string {
replace($arg,
'(\.|\[|\]|\\|\||\-|\^|\$|\?|\*|\+|\{|\}|\(|\))','\\$1')
} ;
declare function local:substring-before-last
( $arg as xs:string? ,
$delim as xs:string ) as xs:string {
if (matches($arg, local:escape-for-regex($delim)))
then replace($arg,
concat('^(.*)', local:escape-for-regex($delim),'.*'),
'$1')
else ''
} ;
let $server-info := doc("/config/server-info.xml")
let $content-database :="xyzzy"
let $backup-directory:=$server-info/configuration/server-info/backup-directory/text()
let $backup-latest-dateTime := xdmp:filesystem-directory(fn:concat( $backup-directory,'/',$content-database))/dir:entry[1]/dir:filename/text()
let $backup-latest-date := fn:substring-before($backup-latest-dateTime,"-")
let $backup-info := cts:search(/,cts:element-value-query(xs:QName("directory-name"),$backup-latest-date))
let $new-backup := if($backup-info)
then fn:false()
else fn:true()
let $db-bkp-status := if($new-backup)
then (xdmp:database-backup-status(())[./*:forest/*:backup-path[fn:contains(., $backup-latest-dateTime)]][./*:forest/*:incremental-backup eq "false"]/*:status)
else (xdmp:database-backup-status(())[./*:forest/*:backup-path[fn:contains(., $backup-latest-dateTime)]][./*:forest/*:incremental-backup eq "true"][./*:forest/*:incremental-backup-path[fn:contains(., fn:replace(local:substring-before-last(xs:string(fn:current-date()), "-"), "-", ""))]]/*:status)
return $db-bkp-status
Мы поддерживаем файл конфигурации, в котором хранится статус резервной копии. Если будет новый полный день резервного копирования, $backup-info
ничего не вернет. Если это ежедневный день инкрементного резервного копирования, он вернет конфигурацию. Я использую его только для того, чтобы проверить, является ли текущее резервное копирование новым полным или инкрементным. Для инкрементального дня $backup-info
имеет значение false и поэтому переходит к последней строке, т. Е. Условие else. это ничего не возвращает для инкрементных резервных копий. Ни completed
, ни in-progress
. Интересно, как markLogic собирает метку времени. Пожалуйста, помогите в этом.
Не стесняйтесь предоставлять свои собственные xquery с нуля. Я могу обновить мой.
Я даже вынул идентификатор задания и произвел поиск в выводе функции xdmp:database-backup-status(())
, но этот идентификатор задания тоже не существует в наборе результатов.