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

JetTruncateLogInstance

関数
指定インスタンスのバックアップ済みログを切り捨てる。
DLLESENT.dll呼出規約winapi

シグネチャ

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

INT JetTruncateLogInstance(
    JET_INSTANCE instance
);

パラメーター

名前型方向説明
instanceJET_INSTANCEinログを切り詰める対象インスタンスを識別するJET_INSTANCEハンドル。バックアップ済みログが削除される。

戻り値の型: INT

公式ドキュメント

JetTruncateLogInstance 関数は、JetBeginExternalBackup によって開始されたバックアップの実行中に、現在のバックアップが正常に完了した後は不要となるトランザクション ログ ファイルを削除するために使用します。

戻り値

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

戻り値コード

説明

JET_errSuccess

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

JET_errBackupAbortByServer

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

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

JET_errClientRequestToStopJetService

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

JET_errInstanceUnavailable

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

JET_errInvalidBackupSequence

バックアップ操作が正しい順序で呼び出されなかったため、失敗しました。JetTruncateLog は、対象のインスタンスに対して JetOpenFile を使用して作成されたファイル ハンドルが未解放のまま残っている場合に、このエラーを返します。

JET_errInvalidParameter

指定されたパラメーターのいずれかに予期しない値が含まれていたか、複数のパラメーターの組み合わせが予期しない結果を生じました。JetTruncateLog では、指定されたインスタンス ハンドルが無効である場合にこのエラーが発生することがあります。

JET_errNoBackup

外部バックアップが実行されていないため、操作は失敗しました。

JET_errNotInitialized

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

JET_errRestoreInProgress

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

JET_errRunningInMultiInstanceMode

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

JET_errTermInProgress

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

この関数が成功すると、現在のバックアップが正常に完了した後は不要となるトランザクション ログ ファイルの一式が削除されます。バックアップ ステート マシンは、データベース ファイルのバックアップが以降許可されない状態へ進みます。この時点以降にバックアップのために開くことができるのは、データベース パッチ ファイルとトランザクション ログ ファイルのみです。

この関数が失敗した場合でも、バックアップ ステート マシンがデータベース ファイルのバックアップを以降許可しない状態へ進むことがあります。削除されるトランザクション ログ ファイルの数が目的の数より少なくなる場合がありますが、常に古いものから新しいものの順に削除されます。

要件

要件 値

クライアント

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

サーバー

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

ヘッダー

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

ライブラリ

ESENT.lib を使用します。

DLL

ESENT.dll が必要です。

関連項目

Extensible Storage Engine Files
JET_ERR
JET_INSTANCE
JetBeginExternalBackup
JetOpenFile
JetStopBackup
JetStopService

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

各言語での呼び出し定義

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

INT JetTruncateLogInstance(
    JET_INSTANCE instance
);
[DllImport("ESENT.dll", ExactSpelling = true)]
static extern int JetTruncateLogInstance(
    UIntPtr instance   // JET_INSTANCE
);
<DllImport("ESENT.dll", ExactSpelling:=True)>
Public Shared Function JetTruncateLogInstance(
    instance As UIntPtr   ' JET_INSTANCE
) As Integer
End Function
' instance : JET_INSTANCE
Declare PtrSafe Function JetTruncateLogInstance 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

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

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

var (
	esent = windows.NewLazySystemDLL("ESENT.dll")
	procJetTruncateLogInstance = esent.NewProc("JetTruncateLogInstance")
)

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

extern "esent" fn JetTruncateLogInstance(
    instance: usize // JET_INSTANCE
) callconv(std.os.windows.WINAPI) i32;
proc JetTruncateLogInstance(
    instance: uint  # JET_INSTANCE
): int32 {.importc: "JetTruncateLogInstance", stdcall, dynlib: "ESENT.dll".}
pragma(lib, "esent");
extern(Windows)
int JetTruncateLogInstance(
    size_t instance   // JET_INSTANCE
);
ccall((:JetTruncateLogInstance, "ESENT.dll"), stdcall, Int32,
      (Csize_t,),
      instance)
# instance : JET_INSTANCE -> Csize_t
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
int32_t JetTruncateLogInstance(
    uintptr_t instance);
]]
local esent = ffi.load("esent")
-- esent.JetTruncateLogInstance(instance)
-- instance : JET_INSTANCE
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('ESENT.dll');
const JetTruncateLogInstance = lib.func('__stdcall', 'JetTruncateLogInstance', 'int32_t', ['uintptr_t']);
// JetTruncateLogInstance(instance)
// instance : JET_INSTANCE -> 'uintptr_t'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("ESENT.dll", {
  JetTruncateLogInstance: { parameters: ["usize"], result: "i32" },
});
// lib.symbols.JetTruncateLogInstance(instance)
// instance : JET_INSTANCE -> "usize"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
int32_t JetTruncateLogInstance(
    size_t instance);
C, "ESENT.dll");
// $ffi->JetTruncateLogInstance(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 JetTruncateLogInstance(
        long instance   // JET_INSTANCE
    );
}
@[Link("esent")]
lib LibESENT
  fun JetTruncateLogInstance = JetTruncateLogInstance(
    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 JetTruncateLogInstanceNative = Int32 Function(UintPtr);
typedef JetTruncateLogInstanceDart = int Function(int);
final JetTruncateLogInstance = DynamicLibrary.open('ESENT.dll')
    .lookupFunction<JetTruncateLogInstanceNative, JetTruncateLogInstanceDart>('JetTruncateLogInstance');
// instance : JET_INSTANCE -> UintPtr
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function JetTruncateLogInstance(
  instance: NativeUInt   // JET_INSTANCE
): Integer; stdcall;
  external 'ESENT.dll' name 'JetTruncateLogInstance';
import Foreign
import Foreign.C.Types
import Foreign.C.String

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

let jettruncateloginstance =
  foreign "JetTruncateLogInstance"
    (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 ("JetTruncateLogInstance" jet-truncate-log-instance :convention :stdcall) :int32
  (instance :uint64))   ; JET_INSTANCE
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $JetTruncateLogInstance = Win32::API::More->new('ESENT',
    'int JetTruncateLogInstance(WPARAM instance)');
# my $ret = $JetTruncateLogInstance->Call($instance);
# instance : JET_INSTANCE -> WPARAM
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。