0

同じサーバーに多くのデータベースがあり、それぞれに異なるタイムゾーン (太平洋、山岳、中央、東部) を表しています。現在、私のプログラムは'NOW'とのようなものを使用CURRENT_TIMESTAMPして、レコードの現在の時刻を取得しています。これは問題です。

データは、SymmetricDS を使用して、別のコンピューターからこの中央サーバーに同期されています。しかし、この中央サーバーで実行されているプログラムが、あたかもオフィスに対してローカルであるかのように書かれているという問題があります。これは、タイムスタンプを呼び出すときに、オフィスを表していない可能性があるサーバーのタイム ゾーンで実行することを意味します。その結果、特定のデータの連続性がごちゃ混ぜになっています。

プログラムを調べて、現在の時間を利用するすべての状況を書き直すことは別として、各データベースで時間を異なる方法で表現する方法を見つけたいと思います...どうにかして、各データベースのタイムゾーンを別々にオフセットします。

このトピックに関連するものをできるだけ多く読んだ後、どのような選択肢がありますか?

4

1 に答える 1

1

このタスクの手順を作成する必要があると思います。

まず、新しいテーブルから始めることができます。次の構造を使用しましょう。オフィス基本データベース

さらに、次のストアド プロシージャを作成しましょう。

create or alter procedure GETTIMESTAMP (
    IOFFICE_ID bigint)
returns (
    RTIMESTAMP timestamp)
as
begin
  RTIMESTAMP=dateadd(hour,coalesce((select TIMEDIFF from OFFICE_TIMEZONE where OFFICE_ID_=:IOFFICE_ID),0), current_timestamp);
  suspend;
end

このプロシージャは、正しい時刻を返します。オフィスが存在しない場合は、ローカル サーバーの current_timestamp が返されます。

もちろん、これをデータベースに取り込むには多少の作業が必要です。簡単にするために、データベースのメタデータを検索できます。IBExpert はシンプルな検索ダイアログを備えていますが、メタデータをエクスポートしてメモ帳で検索することもできます。メタデータの IBExpert 検索

于 2015-10-08T18:21:16.283 に答える