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

JetEndExternalBackupInstance

関数
指定したインスタンスの外部バックアップを終了する。
DLLESENT.dll呼出規約winapi

シグネチャ

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

INT JetEndExternalBackupInstance(
    JET_INSTANCE instance
);

パラメーター

名前型方向説明
instanceJET_INSTANCEin外部バックアップを終了する対象インスタンスのJET_INSTANCEハンドル。

戻り値の型: INT

公式ドキュメント

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

戻り値

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

戻り値コード

説明

JET_errSuccess

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

JET_errBackupAbortByCaller

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

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

JET_errBackupAbortByServer

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

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

JET_errClientRequestToStopJetService

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

JET_errInstanceUnavailable

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

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

JET_errNoBackup

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

JET_errNotInitialized

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

JET_errRestoreInProgress

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

JET_errRunningInMultiInstanceMode

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

JET_errTermInProgress

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

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

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

解説

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

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

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

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

要件

要件 値

クライアント

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

サーバー

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

ヘッダー

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

ライブラリ

ESENT.lib を使用します。

DLL

ESENT.dll が必要です。

関連項目

Error Handling Parameters
Extensible Storage Engine Errors
JetAttachDatabase
JetBeginExternalBackup
JetBeginExternalBackupInstance
JetCloseFile
JET_ERR
JetExternalRestore
JetGetAttachInfo
JetGetLogInfo
JET_INSTANCE
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 JetEndExternalBackupInstance(
    JET_INSTANCE instance
);
[DllImport("ESENT.dll", ExactSpelling = true)]
static extern int JetEndExternalBackupInstance(
    UIntPtr instance   // JET_INSTANCE
);
<DllImport("ESENT.dll", ExactSpelling:=True)>
Public Shared Function JetEndExternalBackupInstance(
    instance As UIntPtr   ' JET_INSTANCE
) As Integer
End Function
' instance : JET_INSTANCE
Declare PtrSafe Function JetEndExternalBackupInstance Lib "esent" ( _
    ByVal instance As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

JetEndExternalBackupInstance = ctypes.windll.esent.JetEndExternalBackupInstance
JetEndExternalBackupInstance.restype = ctypes.c_int
JetEndExternalBackupInstance.argtypes = [
    ctypes.c_size_t,  # instance : JET_INSTANCE
]
require 'fiddle'
require 'fiddle/import'

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

var (
	esent = windows.NewLazySystemDLL("ESENT.dll")
	procJetEndExternalBackupInstance = esent.NewProc("JetEndExternalBackupInstance")
)

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

extern "esent" fn JetEndExternalBackupInstance(
    instance: usize // JET_INSTANCE
) callconv(std.os.windows.WINAPI) i32;
proc JetEndExternalBackupInstance(
    instance: uint  # JET_INSTANCE
): int32 {.importc: "JetEndExternalBackupInstance", stdcall, dynlib: "ESENT.dll".}
pragma(lib, "esent");
extern(Windows)
int JetEndExternalBackupInstance(
    size_t instance   // JET_INSTANCE
);
ccall((:JetEndExternalBackupInstance, "ESENT.dll"), stdcall, Int32,
      (Csize_t,),
      instance)
# instance : JET_INSTANCE -> Csize_t
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
int32_t JetEndExternalBackupInstance(
    uintptr_t instance);
]]
local esent = ffi.load("esent")
-- esent.JetEndExternalBackupInstance(instance)
-- instance : JET_INSTANCE
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('ESENT.dll');
const JetEndExternalBackupInstance = lib.func('__stdcall', 'JetEndExternalBackupInstance', 'int32_t', ['uintptr_t']);
// JetEndExternalBackupInstance(instance)
// instance : JET_INSTANCE -> 'uintptr_t'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("ESENT.dll", {
  JetEndExternalBackupInstance: { parameters: ["usize"], result: "i32" },
});
// lib.symbols.JetEndExternalBackupInstance(instance)
// instance : JET_INSTANCE -> "usize"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
int32_t JetEndExternalBackupInstance(
    size_t instance);
C, "ESENT.dll");
// $ffi->JetEndExternalBackupInstance(instance);
// instance : JET_INSTANCE
// 構造体/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 JetEndExternalBackupInstance(
        long instance   // JET_INSTANCE
    );
}
@[Link("esent")]
lib LibESENT
  fun JetEndExternalBackupInstance = JetEndExternalBackupInstance(
    instance : LibC::SizeT   # JET_INSTANCE
  ) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。
import 'dart:ffi';
import 'package:ffi/ffi.dart';

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

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

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

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

関連項目

類似 API