Win32 API 日本語リファレンス
ホーム › Storage.Jet › JetEndExternalBackup

JetEndExternalBackup

関数
外部バックアップセッションを終了する。
DLLESENT.dll呼出規約winapi

シグネチャ

// ESENT.dll
#include <windows.h>

INT JetEndExternalBackup(void);

パラメーターなし。戻り値: INT

公式ドキュメント

JetEndExternalBackup 関数は、外部バックアップセッションを終了します。この関数は、オンライン (VSS ベースではない) バックアップを正常に実行するために呼び出す必要がある一連の API 要素のうち、最後の API 要素です。

戻り値

この関数は JET_ERR データ型を返し、その値は次のリターンコードのいずれかです。発生しうる ESE のエラーの詳細については、Extensible Storage Engine Errors および Error Handling Parameters を参照してください。

リターンコード

説明

JET_errSuccess

操作は正常に完了しました。

JET_errNotInitialized

セッションに関連付けられているインスタンスがまだ初期化されていないため、操作を完了できません。

JET_errClientRequestToStopJetService

JetStopService の呼び出しによって、セッションに関連付けられているインスタンス上のすべての動作が停止したため、操作を完了できません。

JET_errInstanceUnavailable

Windows XP: この戻り値は Windows XP で導入されました

セッションに関連付けられているインスタンスで、データの整合性を保護するためにすべてのデータへのアクセスを取り消す必要がある致命的なエラーが発生したため、操作を完了できません。

JET_errTermInProgress

セッションに関連付けられているインスタンスがシャットダウン処理中であるため、操作を完了できません。

JET_errRestoreInProgress

セッションに関連付けられているインスタンスで復元操作が進行中であるため、操作を完了できません。

JET_errNoBackup

外部バックアップが進行中でないため、操作は失敗しました。

JET_errBackupAbortByServer

Windows Server 2003: この戻り値は Windows Server 2003 で導入されました。

現在の外部バックアップが JetStopBackup の呼び出しによって中止されたため、操作は失敗しました。

errBackupAbortByCaller

Windows XP: この戻り値は Windows XP で導入されました。

呼び出し元が、JetStopBackup でその意図を通知することなく、バックアップシーケンスの途中でバックアップを終了しました。このエラーは、Windows Server 2003 以降のバックアップクライアントにおけるバグに起因します。Windows XP では、外部バックアップシーケンスを意図的に終了した場合にこのエラーが返されます。

JET_errRunningInMultiInstanceMode

実際には既に複数のインスタンスが存在しているにもかかわらず、1 つのインスタンスのみがサポートされるレガシーモード (Windows 2000 互換モード) でエンジンを使用しようとしたため、操作は失敗しました。

この関数が成功した場合、外部バックアップは成功しています。成功は、バックアップの種類 (JetBeginExternalBackup で指定) に応じた適切なファイル (データベースやログなど) がすべてバックアップエンジンから取得されたことを示します。バックアップされたファイルは、ハードリカバリー (JetExternalRestore) によって復旧できます。

この関数が失敗した場合、通常、外部バックアップは終了します。失敗は、クライアントまたはアプリケーションの使用方法の誤りによってバックアップが無効であることを意味します。バックアップシーケンスが成功したことを確認するため、この API のリターンコードを必ずチェックしてください。

解説

エンジンがイベントをログに記録するように構成されている場合、外部バックアップの結果を示すイベントがログに記録されます。

バックアップシーケンスが正しい順序で完了しなかった場合や、JetEndExternalBackup の呼び出しが成功しなかった場合、以降の増分バックアップにアプリケーションが想定していたよりも多くのデータが含まれる可能性があります。

外部バックアップ API のシーケンスの詳細については、JetBeginExternalBackup を参照してください。

Windows Vista より前のバージョンでは、ログの切り捨てが行われなかった場合、エンジンはそのバックアップをコピーバックアップと見なしていました。しかし、そのバックアップは、切り捨てが行われなかった通常のバックアップである可能性もあります (たとえば、デタッチされたデータベースが存在する場合)。JET_bitBackupTruncateDone オプションを使用すると、このことをエンジンに通知し、適切なデータベースヘッダーの変更を行わせることができます。

要件

要件 値

クライアント

Windows Vista、Windows XP、または Windows 2000 Professional が必要です。

サーバー

Windows Server 2008、Windows Server 2003、または Windows 2000 Server が必要です。

ヘッダー

Esent.h で宣言されています。

ライブラリ

ESENT.lib を使用します。

DLL

ESENT.dll が必要です。

関連項目

Error Handling Parameters
Extensible Storage Engine Errors
JetAttachDatabase
JetBeginExternalBackup
JetCloseFile
JET_ERR
JetExternalRestore
JetGetAttachInfo
JetGetLogInfo
JetOpenFile
JetReadFile
JetStopBackup
JetStopService
JetTruncateLog

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp)

各言語での呼び出し定義

// ESENT.dll
#include <windows.h>

INT JetEndExternalBackup(void);
[DllImport("ESENT.dll", ExactSpelling = true)]
static extern int JetEndExternalBackup();
<DllImport("ESENT.dll", ExactSpelling:=True)>
Public Shared Function JetEndExternalBackup() As Integer
End Function
Declare PtrSafe Function JetEndExternalBackup Lib "esent" () As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

JetEndExternalBackup = ctypes.windll.esent.JetEndExternalBackup
JetEndExternalBackup.restype = ctypes.c_int
JetEndExternalBackup.argtypes = []
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('ESENT.dll')
JetEndExternalBackup = Fiddle::Function.new(
  lib['JetEndExternalBackup'],
  [],
  Fiddle::TYPE_INT)
#[link(name = "esent")]
extern "system" {
    fn JetEndExternalBackup() -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("ESENT.dll")]
public static extern int JetEndExternalBackup();
"@
$api = Add-Type -MemberDefinition $sig -Name 'ESENT_JetEndExternalBackup' -Namespace Win32 -PassThru
# $api::JetEndExternalBackup()
#uselib "ESENT.dll"
#func global JetEndExternalBackup "JetEndExternalBackup"
; JetEndExternalBackup   ; 戻り値は stat
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
#uselib "ESENT.dll"
#cfunc global JetEndExternalBackup "JetEndExternalBackup"
; res = JetEndExternalBackup()
; INT JetEndExternalBackup()
#uselib "ESENT.dll"
#cfunc global JetEndExternalBackup "JetEndExternalBackup"
; res = JetEndExternalBackup()
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	esent = windows.NewLazySystemDLL("ESENT.dll")
	procJetEndExternalBackup = esent.NewProc("JetEndExternalBackup")
)

r1, _, err := procJetEndExternalBackup.Call()
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // INT
function JetEndExternalBackup: Integer; stdcall;
  external 'ESENT.dll' name 'JetEndExternalBackup';
result := DllCall("ESENT\JetEndExternalBackup", "Int")
●JetEndExternalBackup() = DLL("ESENT.dll", "int JetEndExternalBackup()")
# 呼び出し: JetEndExternalBackup()
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

extern "esent" fn JetEndExternalBackup() callconv(std.os.windows.WINAPI) i32;
proc JetEndExternalBackup(): int32 {.importc: "JetEndExternalBackup", stdcall, dynlib: "ESENT.dll".}
pragma(lib, "esent");
extern(Windows)
int JetEndExternalBackup();
ccall((:JetEndExternalBackup, "ESENT.dll"), stdcall, Int32,
      (),
      )
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
int32_t JetEndExternalBackup(void);
]]
local esent = ffi.load("esent")
-- esent.JetEndExternalBackup()
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('ESENT.dll');
const JetEndExternalBackup = lib.func('__stdcall', 'JetEndExternalBackup', 'int32_t', []);
// JetEndExternalBackup()
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("ESENT.dll", {
  JetEndExternalBackup: { parameters: [], result: "i32" },
});
// lib.symbols.JetEndExternalBackup()
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
int32_t JetEndExternalBackup(void);
C, "ESENT.dll");
// $ffi->JetEndExternalBackup();
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
// WINAPI(stdcall): x64 では呼出規約が統一されるため問題なし。x86 では __stdcall 対応のラッパが必要な場合あり。
import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;

public interface Esent extends StdCallLibrary {
    Esent INSTANCE = Native.load("esent", Esent.class);
    int JetEndExternalBackup();
}
@[Link("esent")]
lib LibESENT
  fun JetEndExternalBackup = JetEndExternalBackup() : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。
import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef JetEndExternalBackupNative = Int32 Function();
typedef JetEndExternalBackupDart = int Function();
final JetEndExternalBackup = DynamicLibrary.open('ESENT.dll')
    .lookupFunction<JetEndExternalBackupNative, JetEndExternalBackupDart>('JetEndExternalBackup');
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function JetEndExternalBackup: Integer; stdcall;
  external 'ESENT.dll' name 'JetEndExternalBackup';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "JetEndExternalBackup"
  c_JetEndExternalBackup :: IO Int32
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let jetendexternalbackup =
  foreign "JetEndExternalBackup"
    (void @-> returning int32_t)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library esent (t "ESENT.dll"))
(cffi:use-foreign-library esent)

(cffi:defcfun ("JetEndExternalBackup" jet-end-external-backup :convention :stdcall) :int32)
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $JetEndExternalBackup = Win32::API::More->new('ESENT',
    'int JetEndExternalBackup()');
# my $ret = $JetEndExternalBackup->Call();
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。