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

JetTruncateLog

関数
バックアップ済みのトランザクションログを切り捨てる。
DLLESENT.dll呼出規約winapi

シグネチャ

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

INT JetTruncateLog(void);

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

公式ドキュメント

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

戻り値

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

戻り値コード

説明

JET_errSuccess

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

JET_errBackupAbortByServer

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

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

JET_errClientRequestToStopJetService

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

JET_errInstanceUnavailable

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

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

JET_errInvalidBackupSequence

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

JET_errInvalidParameter

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

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

JET_errNoBackup

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

JET_errNotInitialized

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

JET_errRestoreInProgress

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

JET_errRunningInMultiInstanceMode

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

JET_errTermInProgress

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

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

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

要件

要件 値

クライアント

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

サーバー

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

ヘッダー

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

ライブラリ

ESENT.lib を使用します。

DLL

ESENT.dll が必要です。

関連項目

Extensible Storage Engine Files
JetBeginExternalBackup
JET_ERR
JET_INSTANCE
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 JetTruncateLog(void);
[DllImport("ESENT.dll", ExactSpelling = true)]
static extern int JetTruncateLog();
<DllImport("ESENT.dll", ExactSpelling:=True)>
Public Shared Function JetTruncateLog() As Integer
End Function
Declare PtrSafe Function JetTruncateLog Lib "esent" () As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

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

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

var (
	esent = windows.NewLazySystemDLL("ESENT.dll")
	procJetTruncateLog = esent.NewProc("JetTruncateLog")
)

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

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

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

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

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