X查询。如何查看当前增量备份状态?
Xquery. How to check current incremental backup status?
我已经编写了一个 Xquery,在进行增量备份时执行。我知道备份状态 returns 三个可能的值 -
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,
'(\.|\[|\]|\|\||\-|\^|$|\?|\*|\+|\{|\}|\(|\))','\')
} ;
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),'.*'),
'')
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
将 return 什么都没有。如果是每日增量备份日,那么它将 return 配置。我只是用它来检查今天的备份是新的完整备份还是增量备份。对于增量日 $backup-info
是假的,所以它转到最后一行,即 else 条件。这对增量备份没有任何影响 return。 completed
和 in-progress
都没有。我想知道 markLogic 如何获取时间戳。请协助解决这个问题。
随时从头开始提供您自己的 xquery。我可以更新我的。
我什至取出作业 ID 并在函数 xdmp:database-backup-status(())
的输出中进行搜索,但结果集中也不存在该作业 ID。
MarkLogic provides the Admin modules 以提供您试图通过其他方法获取的大部分信息。 Admin UI 模块(通常在 /opt/MarkLogic/Modules/MarkLogic/Admin/Lib 中找到)包含许多有用的代码,可以调整这些代码以获取此类详细信息。在这种情况下,我会参考 database-status-form.xqy
define function db-mount-state(
$fstats as node()*,
$fcounts as node()*,
$dbid as xs:unsignedLong)
{
let $times := $fstats/fs:last-state-change,
$ls := max($times),
$since :=
if (not(empty($ls)))
then concat(" since ", longDate($ls), " ", longTimeSecs($ls))
else ""
return concat(database-status($dbid,$fstats,$fcounts),$since)
}
define function backup-recov-state($fstats as node()*)
{
if(empty($fstats/fs:backups/fs:backup)
and
empty($fstats/fs:restore))
then
"No backup or restore in progress"
else
if(empty($fstats/fs:backups/fs:backup))
then
"Restore in progress (see below for details)"
else
"Backup in progress (see below for details)"
}
...针对您的数据库调用函数,然后从您想要的元素中提取详细信息:
let $last-full-backup := max($fstats/fs:last-backup)
let $last-incremental-backup : = max($fstats/fs:last-incr-backup
return ($last-full-backup, $last-incremental-backup)
这只是一些示例代码片段,不可执行,但它应该能让您朝着正确的方向前进。
我已经编写了一个 Xquery,在进行增量备份时执行。我知道备份状态 returns 三个可能的值 -
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,
'(\.|\[|\]|\|\||\-|\^|$|\?|\*|\+|\{|\}|\(|\))','\')
} ;
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),'.*'),
'')
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
将 return 什么都没有。如果是每日增量备份日,那么它将 return 配置。我只是用它来检查今天的备份是新的完整备份还是增量备份。对于增量日 $backup-info
是假的,所以它转到最后一行,即 else 条件。这对增量备份没有任何影响 return。 completed
和 in-progress
都没有。我想知道 markLogic 如何获取时间戳。请协助解决这个问题。
随时从头开始提供您自己的 xquery。我可以更新我的。
我什至取出作业 ID 并在函数 xdmp:database-backup-status(())
的输出中进行搜索,但结果集中也不存在该作业 ID。
MarkLogic provides the Admin modules 以提供您试图通过其他方法获取的大部分信息。 Admin UI 模块(通常在 /opt/MarkLogic/Modules/MarkLogic/Admin/Lib 中找到)包含许多有用的代码,可以调整这些代码以获取此类详细信息。在这种情况下,我会参考 database-status-form.xqy
define function db-mount-state(
$fstats as node()*,
$fcounts as node()*,
$dbid as xs:unsignedLong)
{
let $times := $fstats/fs:last-state-change,
$ls := max($times),
$since :=
if (not(empty($ls)))
then concat(" since ", longDate($ls), " ", longTimeSecs($ls))
else ""
return concat(database-status($dbid,$fstats,$fcounts),$since)
}
define function backup-recov-state($fstats as node()*)
{
if(empty($fstats/fs:backups/fs:backup)
and
empty($fstats/fs:restore))
then
"No backup or restore in progress"
else
if(empty($fstats/fs:backups/fs:backup))
then
"Restore in progress (see below for details)"
else
"Backup in progress (see below for details)"
}
...针对您的数据库调用函数,然后从您想要的元素中提取详细信息:
let $last-full-backup := max($fstats/fs:last-backup)
let $last-incremental-backup : = max($fstats/fs:last-incr-backup
return ($last-full-backup, $last-incremental-backup)
这只是一些示例代码片段,不可执行,但它应该能让您朝着正确的方向前进。