JP2006127088A - データ変更履歴記録システム及び方法 - Google Patents
データ変更履歴記録システム及び方法 Download PDFInfo
- Publication number
- JP2006127088A JP2006127088A JP2004313502A JP2004313502A JP2006127088A JP 2006127088 A JP2006127088 A JP 2006127088A JP 2004313502 A JP2004313502 A JP 2004313502A JP 2004313502 A JP2004313502 A JP 2004313502A JP 2006127088 A JP2006127088 A JP 2006127088A
- Authority
- JP
- Japan
- Prior art keywords
- transaction
- change
- data
- trigger
- serial number
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】データ変更履歴からトランザクションを考慮してデータの復元を行うことが低コストで行えること。
【解決手段】トランザクション開始プロシージャと、トランザクション情報取得プロシージャと、トリガーとを備え、 トランザクション開始プロシージャは、トランザクションの開始直前に、トランザクションIDと連番の初期値として0とを記録し、 トランザクション情報取得プロシージャは、トリガーによって起動され、連番を1だけインクリメントした後に、トランザクションIDと連番とを読み出してトリガーに渡し、 トリガーは、データ格納用テーブルが変更されることによって起動され、トランザクション情報取得プロシージャを起動してトランザクションIDと連番とを受け取ると、変更されたデータ格納用テーブルの変更前のレコード、又は変更後のレコード、或は両方のレコードを、トランザクションIDと連番と共に記録するデータ変更履歴記録システム。
【選択図】図1
【解決手段】トランザクション開始プロシージャと、トランザクション情報取得プロシージャと、トリガーとを備え、 トランザクション開始プロシージャは、トランザクションの開始直前に、トランザクションIDと連番の初期値として0とを記録し、 トランザクション情報取得プロシージャは、トリガーによって起動され、連番を1だけインクリメントした後に、トランザクションIDと連番とを読み出してトリガーに渡し、 トリガーは、データ格納用テーブルが変更されることによって起動され、トランザクション情報取得プロシージャを起動してトランザクションIDと連番とを受け取ると、変更されたデータ格納用テーブルの変更前のレコード、又は変更後のレコード、或は両方のレコードを、トランザクションIDと連番と共に記録するデータ変更履歴記録システム。
【選択図】図1
Description
本発明は、データをテーブル(表)で保管するリレーショナルデータベースにおいて、データの変更履歴を記録する技術に係る。
以後、リレーショナルデータベースを、データベースと略称する。
一般に、データベースにおいて、トランザクションが実行されて、データの変更がなされる都度、変更がなされた各テーブルについて、挿入(INSERT)の時は変更(挿入)後のレコード、更新(UPDATE)の時は変更(更新)前後のレコード、削除(DELETE)の時は変更(削除)前のレコードを記録するというように、各テーブル毎のデータ変更履歴を記録することは、データベーストリガーを用いれば、比較的容易に実現できる。
ここで、トランザクションとは、論理的な1つの作業単位として実行される一連のデータ変更操作のことである。このデータ変更操作は、SQL(Structured Query Language)で記述される。また、データベーストリガーとは、データ変更のプログラム等が直接呼び出すことのない特殊なストアドプロシージャであって、特定のテーブルや列に対しデータの変更を行ったとき自動で実行されるものである。ここで、ストアドプロシージャとは、データベース中に格納されたプログラムのことである。
ところで、データベーストリガーを用いて各テーブル毎のデータ変更履歴を記録する場合、一般に、以下のような問題がある。
第1に、データベーストリガーでは、実行されたデータ変更操作が、どのトランザクションに属しているか、また、トランザクション内の何番目のものかを把握することができない。このため、データ変更履歴から、トランザクションを考慮してデータの復元を行うことができない。
第2に、各テーブル毎に個別にデータベーストリガーを作成する必要がある。このため、多数のテーブルに分割されたデータベースの場合、データベーストリガーの作成コストが高くなり勝ちである。
本発明は斯かる背景技術に鑑みてなされたもので、データ変更履歴からトランザクションを考慮してデータの復元を行うことが低コストで行えるようにすることを課題とする。
本発明において上記課題を達成するために、まず請求項1の発明では、トランザクション開始プロシージャと、トランザクション情報取得プロシージャと、トリガーとを備え、
トランザクション開始プロシージャは、トランザクションの開始直前に、トランザクションIDと連番の初期値として0とを記録し、
トランザクション情報取得プロシージャは、トリガーによって起動され、連番を1だけインクリメントした後に、トランザクションIDと連番とを読み出してトリガーに渡し、
トリガーは、データ格納用テーブルが変更されることによって起動され、トランザクション情報取得プロシージャを起動してトランザクションIDと連番とを受け取ると、変更
されたデータ格納用テーブルの変更前のレコード、又は変更後のレコード、或は両方のレコードを、トランザクションIDと連番と共に記録することを特徴とするデータ変更履歴記録システムとしたものである。
トランザクション開始プロシージャは、トランザクションの開始直前に、トランザクションIDと連番の初期値として0とを記録し、
トランザクション情報取得プロシージャは、トリガーによって起動され、連番を1だけインクリメントした後に、トランザクションIDと連番とを読み出してトリガーに渡し、
トリガーは、データ格納用テーブルが変更されることによって起動され、トランザクション情報取得プロシージャを起動してトランザクションIDと連番とを受け取ると、変更
されたデータ格納用テーブルの変更前のレコード、又は変更後のレコード、或は両方のレコードを、トランザクションIDと連番と共に記録することを特徴とするデータ変更履歴記録システムとしたものである。
また請求項2の発明では、トランザクション開始プロシージャと、トランザクション情報取得プロシージャと、トリガーとを備えるシステムが実行する方法であって、
トランザクション開始プロシージャが、トランザクションの開始直前に、トランザクションIDと連番の初期値として0とを記録する工程と、
トリガーによって起動されたトランザクション情報取得プロシージャが、連番を1だけインクリメントした後に、トランザクションIDと連番とを読み出してトリガーに渡す工程と、
データ格納用テーブルが変更されることによって起動されたトリガーが、トランザクション情報取得プロシージャを起動してトランザクションIDと連番とを受け取ると、変更されたデータ格納用テーブルの変更前のレコード、又は変更後のレコード、或は両方のレコードを、トランザクションIDと連番と共に記録する工程とを含むことを特徴とするデータ変更履歴記録方法としたものである。
トランザクション開始プロシージャが、トランザクションの開始直前に、トランザクションIDと連番の初期値として0とを記録する工程と、
トリガーによって起動されたトランザクション情報取得プロシージャが、連番を1だけインクリメントした後に、トランザクションIDと連番とを読み出してトリガーに渡す工程と、
データ格納用テーブルが変更されることによって起動されたトリガーが、トランザクション情報取得プロシージャを起動してトランザクションIDと連番とを受け取ると、変更されたデータ格納用テーブルの変更前のレコード、又は変更後のレコード、或は両方のレコードを、トランザクションIDと連番と共に記録する工程とを含むことを特徴とするデータ変更履歴記録方法としたものである。
本発明は、データ変更履歴として、変更されたデータ格納用テーブルの変更前のレコード、又は変更後のレコード、或は両方のレコードを、トランザクションIDと連番と共に記録するので、トランザクションIDから、実行されたデータ変更操作が、どのトランザクションに属しているのかがわかり、連番から、実行されたデータ変更操作が、トランザクション内の何番目のものかがわかるので、データ変更履歴から、トランザクションを考慮してデータの復元を行うことができる。
また本発明では、トリガーを各データ格納用テーブル毎に個別に作成しなければならないとしても、各データ格納用テーブル毎に個別に作成される個々のトリガーは、同様の定形的な処理を行うものなので、この作成を自動的に行うことが可能であり、トリガーの作成コストを低減できるという効果がある。
以上、本発明は、データ変更履歴からトランザクションを考慮してデータの復元を行うことが低コストで行えるという効果がある。
以下に、本発明の最良の一実施形態を説明する。
1.構成
本実施形態のデータベースシステムは、データベースを備え、図1に示すように、データベース中に格納されるテーブルとして、データ格納用テーブルと、変更データ格納用テーブルと、変更履歴管理用テーブルと、トランザクション管理用テーブルと、変更テーブル管理用テーブルとを備え、またストアドプロシージャとして、トランザクション開始プロシージャと、トリガーと、トランザクション情報取得プロシージャと、トランザクション終了プロシージャとを備えるコンピュータシステムである。
本実施形態のデータベースシステムは、データベースを備え、図1に示すように、データベース中に格納されるテーブルとして、データ格納用テーブルと、変更データ格納用テーブルと、変更履歴管理用テーブルと、トランザクション管理用テーブルと、変更テーブル管理用テーブルとを備え、またストアドプロシージャとして、トランザクション開始プロシージャと、トリガーと、トランザクション情報取得プロシージャと、トランザクション終了プロシージャとを備えるコンピュータシステムである。
データ格納用テーブルは、ユーザがデータベースで管理を行いたいデータを格納するためのテーブルであって、トランザクションによる変更の対象とされるものである。データ格納用テーブルの数と、個々のデータ格納用テーブルの定義とは、ユーザがデータベースで管理を行いたいデータが、どのようなものかに依存する。
変更データ格納用テーブルは、データ格納用テーブル1つに対して1つ存在し、対応す
るデータ格納用テーブルに対して、現在までに実行されたトランザクションによって施された変更について、対応するデータ格納用テーブルの変更前又は変更後のレコードと、この変更に係る情報とを保管するためのテーブルである。変更データ格納テーブルは、項目として、対応するデータ格納用テーブルの項目と、トランザクションIDと、連番と、変更種別とを有する。トランザクションIDは、対応するデータ格納用テーブルに変更を施したトランザクションを識別する番号である。連番は、対応するデータ格納用テーブルに変更を施したのが、このトランザクションの何番目のデータ変更操作かを表す番号である。変更種別は、如何なるデータ変更操作により、対応するデータ格納用テーブルの如何なるレコードが、変更データ格納用テーブルに記録されたかを示す情報であって、その値として、挿入(INSERT)、更新(UPDATE)の前、更新(UPDATE)の後、削除(DELETE)とがある。挿入(INSERT)は、挿入(INSERT)により、対応するデータ格納用テーブルの変更(挿入)後のレコードが記録されたことを意味する。更新(UPDATE)の前は、更新(UPDATE)により、対応するデータ格納用テーブルの変更(更新)前のレコードが記録されたことを意味する。更新(UPDATE)の後は、更新(UPDATE)により、対応するデータ格納用テーブルの変更(更新)後のレコードが記録されたことを意味する。削除(DELETE)は、削除(DELETE)により、対応するデータ格納用テーブルの変更(削除)前のレコードが記録されたことを意味する。
るデータ格納用テーブルに対して、現在までに実行されたトランザクションによって施された変更について、対応するデータ格納用テーブルの変更前又は変更後のレコードと、この変更に係る情報とを保管するためのテーブルである。変更データ格納テーブルは、項目として、対応するデータ格納用テーブルの項目と、トランザクションIDと、連番と、変更種別とを有する。トランザクションIDは、対応するデータ格納用テーブルに変更を施したトランザクションを識別する番号である。連番は、対応するデータ格納用テーブルに変更を施したのが、このトランザクションの何番目のデータ変更操作かを表す番号である。変更種別は、如何なるデータ変更操作により、対応するデータ格納用テーブルの如何なるレコードが、変更データ格納用テーブルに記録されたかを示す情報であって、その値として、挿入(INSERT)、更新(UPDATE)の前、更新(UPDATE)の後、削除(DELETE)とがある。挿入(INSERT)は、挿入(INSERT)により、対応するデータ格納用テーブルの変更(挿入)後のレコードが記録されたことを意味する。更新(UPDATE)の前は、更新(UPDATE)により、対応するデータ格納用テーブルの変更(更新)前のレコードが記録されたことを意味する。更新(UPDATE)の後は、更新(UPDATE)により、対応するデータ格納用テーブルの変更(更新)後のレコードが記録されたことを意味する。削除(DELETE)は、削除(DELETE)により、対応するデータ格納用テーブルの変更(削除)前のレコードが記録されたことを意味する。
変更履歴管理用テーブルは、現在までに実行されたトランザクションに係る情報を保管するためのテーブルである。変更履歴管理用テーブルは、項目として、トランザクションIDと、変更種別と、データIDとを有し、トランザクションIDが主キーとなっている。トランザクションIDは、現在までに実行されたトランザクションを唯一に識別する番号である。変更種別は、現在までに実行されたトランザクションが施した変更の種別であって、その値として、挿入(INSERT)と、更新(UPDATE)と、削除(DELETE)とがある。データIDは、現在までに実行されたトランザクションの変更対象のデータを唯一に識別するIDである。
トランザクション管理用テーブルは、現在実行中のトランザクションに係る情報を保管するためのテーブルである。トランザクション管理用テーブルは、項目として、サーバープロセスIDと、トランザクションIDと、連番とを有し、サーバープロセスIDが主キーとなっている。サーバープロセスIDは、現在実行中のトランザクションが属するデータベースセッションを唯一に識別するIDであって、オラクル社のデータベースではセッションIDと呼ばれる。サーバープロセスIDを主キーとするのは、同一のデータベースセッションにおいて、複数トランザクションの同時実行性を保証するためである。トランザクションIDは、現在実行中のトランザクションを唯一に識別する番号である。連番は、現在実行中のトランザクションが、現在何番目のデータ変更操作を行っているかを表す番号である。但し、連番が0の場合は、まだ何れのデータ変更操作もなされていないことを表し、連番が1の場合に、最初のデータ変更操作がなされたことを表す。
変更テーブル管理用テーブルは、データ格納用テーブルの中で、現在までに実行されたトランザクションで変更されたテーブルに係る情報を保管するためのテーブルである。変更テーブル管理用テーブルは、項目として、トランザクションIDと、テーブル名とを有し、トランザクションIDと、テーブル名との組が主キーとなっている。トランザクションIDは、現在までに実行されたトランザクションを唯一に識別する番号である。テーブル名は、現在までに実行されたトランザクションで変更されたテーブルの名称である。
トランザクション開始プロシージャは、トランザクションの開始直前に起動される。トランザクション開始プロシージャは、このトランザクションが施す変更について、この変更の種別を、項目「変更種別」の値とし、この変更の種別が挿入(INSERT)の場合
は、空白(NULL)を、項目「データID」の値とし、この変更の種別が更新(UPDATE)又は削除(DELETE)の場合は、この変更の対象となるデータのデータIDを、項目「データID」の値とするレコードを、変更履歴管理用テーブルに挿入することを試み、この試みがなされると、このトランザクションのトランザクションIDが発番されて、このレコードに、発番されたトランザクションIDを、項目「トランザクションID」の値として追加したものが、変更履歴管理用テーブルに挿入される。また、変更履歴管理用テーブルにレコードが挿入された後に、トランザクション開始プロシージャは、このトランザクションが属するデータベースセッションのサーバープロセスIDを、項目「サーバープロセスID」の値とし、発番されたトランザクションIDを、項目「トランザクションID」の値とし、0を、項目「連番」の値とするレコードを、トランザクション管理用テーブルに挿入する。
は、空白(NULL)を、項目「データID」の値とし、この変更の種別が更新(UPDATE)又は削除(DELETE)の場合は、この変更の対象となるデータのデータIDを、項目「データID」の値とするレコードを、変更履歴管理用テーブルに挿入することを試み、この試みがなされると、このトランザクションのトランザクションIDが発番されて、このレコードに、発番されたトランザクションIDを、項目「トランザクションID」の値として追加したものが、変更履歴管理用テーブルに挿入される。また、変更履歴管理用テーブルにレコードが挿入された後に、トランザクション開始プロシージャは、このトランザクションが属するデータベースセッションのサーバープロセスIDを、項目「サーバープロセスID」の値とし、発番されたトランザクションIDを、項目「トランザクションID」の値とし、0を、項目「連番」の値とするレコードを、トランザクション管理用テーブルに挿入する。
トリガーは、何れかのデータ格納用テーブルに対して、挿入(INSERT)又は更新(UPDATE)或は削除(DELETE)の何れかの変更がなされると、自動起動されるデータベーストリガーである。トリガーは、トランザクション情報取得プロシージャを起動し、トランザクション情報取得プロシージャから、この変更を引き起こした現在実行中のトランザクションのデータ変更操作について、このトランザクションのトランザクションIDと、このデータ変更操作が、このトランザクションの何番目のデータ変更操作であるかを表す連番とを受け取る。そして、トリガーは、変更がなされたデータ格納用テーブルに対応する変更データ格納用テーブルに、この変更が、挿入(INSERT)によるものか、又は、更新(UPDATE)によるものか、或は、削除(DELETE)によるものかに応じて、以下のようなレコードを挿入する。まず、この変更が挿入(INSERT)による場合、変更がなされたデータ格納用テーブルに対応する変更データ格納用テーブルに挿入されるレコードは、トランザクション情報取得プロシージャから受け取ったトランザクションIDを、項目「トランザクションID」とし、トランザクション情報取得プロシージャから受け取った連番を、項目「連番」の値とし、挿入(INSERT)を、項目「変更種別」の値とし、変更がなされたデータ格納用テーブルの変更(挿入)後のレコードを含むレコードである。次に、この変更が更新(UPDATE)による場合、変更がなされたデータ格納用テーブルに対応する変更データ格納用テーブルに挿入されるレコードは2つあり、第1のレコードは、トランザクション情報取得プロシージャから受け取ったトランザクションIDを、項目「トランザクションID」とし、トランザクション情報取得プロシージャから受け取った連番を、項目「連番」の値とし、更新(UPDATE)の前を、項目「変更種別」の値とし、変更がなされたデータ格納用テーブルの変更(更新)前のレコードを含むレコードであり、他方、第2のレコードは、トランザクション情報取得プロシージャから受け取ったトランザクションIDを、項目「トランザクションID」とし、トランザクション情報取得プロシージャから受け取った連番を、項目「連番」の値とし、更新(UPDATE)の後を、項目「変更種別」の値とし、変更がなされたデータ格納用テーブルの変更(更新)後のレコードを含むレコードである。最後に、この変更が削除(DELETE)による場合、変更がなされたデータ格納用テーブルに対応する変更データ格納用テーブルに挿入されるレコードは、トランザクション情報取得プロシージャから受け取ったトランザクションIDを、項目「トランザクションID」とし、トランザクション情報取得プロシージャから受け取った連番を、項目「連番」の値とし、削除(DELETE)を、項目「変更種別」の値とし、変更がなされたデータ格納用テーブルの変更(削除)前のレコードを含むレコードである。
トランザクション情報取得プロシージャは、トリガーによって起動される。トランザクション情報収録プロシージャは、トランザクション管理用テーブルにおいて、現在実行中のトランザクションが属するデータベースセッションのサーバープロセスIDを持つレコードの連番を、1だけインクリメントした後に、このサーバープロセスIDを持つレコードから、トランザクションIDと、連番とを読み取って、それぞれ、現在実行中のトラン
ザクションのトランザクションIDとして、また、このトランザクションの現在実行中のデータ変更操作が何番目のものであるかを表す連番として、トリガーに渡す。またトランザクション情報取得プロシージャは、読み取ったトランザクションIDを、項目「トランザクションID」の値とし、変更がなされたデータ格納用テーブルのテーブル名を、項目「テーブル名」の値とするレコードを、変更テーブル管理用テーブルに挿入する。
ザクションのトランザクションIDとして、また、このトランザクションの現在実行中のデータ変更操作が何番目のものであるかを表す連番として、トリガーに渡す。またトランザクション情報取得プロシージャは、読み取ったトランザクションIDを、項目「トランザクションID」の値とし、変更がなされたデータ格納用テーブルのテーブル名を、項目「テーブル名」の値とするレコードを、変更テーブル管理用テーブルに挿入する。
トランザクション終了プロシージャは、トランザクションの終了直後に起動される。このトランザクションが施した変更について、この変更が挿入(INSERT)の場合のみ、トランザクション終了プロシージャは、トランザクション開始プロシージャによって、変更履歴管理用テーブルに挿入されたレコードの項目「データID」の値を、終了したトランザクションによって、変更対象のデータ格納用テーブルに挿入されたデータのデータIDに更新(UPDATE)する。また、トランザクション終了プロシージャは、このトランザクションが属するデータベースセッションのサーバープロセスIDを持つレコードを、トランザクション管理用テーブルから削除する。
2.処理
以下に、本実施形態のデータベースシステムが、ある一つのトランザクションを実行することでなされるデータ変更処理の流れの例を、図2のフローチャートに従って説明する。以後、この実行されるトランザクションを、当該トランザクションとも呼ぶことにする
S(STEP)1;
トランザクション開始プロシージャが起動される。
以下に、本実施形態のデータベースシステムが、ある一つのトランザクションを実行することでなされるデータ変更処理の流れの例を、図2のフローチャートに従って説明する。以後、この実行されるトランザクションを、当該トランザクションとも呼ぶことにする
S(STEP)1;
トランザクション開始プロシージャが起動される。
S(STEP)2;
トランザクション開始プロシージャは、当該トランザクションが施す変更について、この変更の種別を、項目「変更種別」の値とし、この変更の種別が挿入(INSERT)の場合は、空白(NULL)を、項目「データID」の値とし、この変更の種別が更新(UPDATE)又は削除(DELETE)の場合は、この変更の対象となるデータのデータIDを、項目「データID」の値とするレコードを、変更履歴管理用テーブルに挿入することを試み、この試みがなされると、当該トランザクションのトランザクションIDが発番されて、このレコードに、発番されたトランザクションIDを、項目「トランザクションID」の値として追加したものが、変更履歴管理用テーブルに挿入される。
トランザクション開始プロシージャは、当該トランザクションが施す変更について、この変更の種別を、項目「変更種別」の値とし、この変更の種別が挿入(INSERT)の場合は、空白(NULL)を、項目「データID」の値とし、この変更の種別が更新(UPDATE)又は削除(DELETE)の場合は、この変更の対象となるデータのデータIDを、項目「データID」の値とするレコードを、変更履歴管理用テーブルに挿入することを試み、この試みがなされると、当該トランザクションのトランザクションIDが発番されて、このレコードに、発番されたトランザクションIDを、項目「トランザクションID」の値として追加したものが、変更履歴管理用テーブルに挿入される。
S(STEP)3;
トランザクション開始プロシージャは、当該トランザクションが属するデータベースセッションのサーバープロセスIDを、項目「サーバープロセスID」の値とし、発番されたトランザクションIDを、項目「トランザクションID」の値とし、0を、項目「連番」の値とするレコードを、トランザクション管理用テーブルに挿入する。
トランザクション開始プロシージャは、当該トランザクションが属するデータベースセッションのサーバープロセスIDを、項目「サーバープロセスID」の値とし、発番されたトランザクションIDを、項目「トランザクションID」の値とし、0を、項目「連番」の値とするレコードを、トランザクション管理用テーブルに挿入する。
S(STEP)4;
当該トランザクションに含まれる最初のデータ変更操作を当該操作とし、当該操作を実行することで、当該操作が変更対象とするデータ格納用テーブルを変更する。
当該トランザクションに含まれる最初のデータ変更操作を当該操作とし、当該操作を実行することで、当該操作が変更対象とするデータ格納用テーブルを変更する。
S(STEP)5;
当該操作が変更対象とするデータ格納用テーブルが変更されると、トリガーが自動起動される。
当該操作が変更対象とするデータ格納用テーブルが変更されると、トリガーが自動起動される。
S(STEP)6;
トリガーは、トランザクション情報取得プロシージャを起動する。
トリガーは、トランザクション情報取得プロシージャを起動する。
S(STEP)7;
トランザクション情報取得プロシージャは、トランザクション管理用テーブルにおいて、当該トランザクションが属するデータベースセッションのサーバープロセスIDを持つレコードの連番を、1だけインクリメントする。
トランザクション情報取得プロシージャは、トランザクション管理用テーブルにおいて、当該トランザクションが属するデータベースセッションのサーバープロセスIDを持つレコードの連番を、1だけインクリメントする。
S(STEP)8;
トランザクション情報取得プロシージャは、トランザクション管理用テーブルにおいて、当該トランザクションが属するデータベースセッションのサーバープロセスIDを持つレコードから、トランザクションIDと、連番とを読み取る。
トランザクション情報取得プロシージャは、トランザクション管理用テーブルにおいて、当該トランザクションが属するデータベースセッションのサーバープロセスIDを持つレコードから、トランザクションIDと、連番とを読み取る。
S(STEP)9;
トランザクション情報取得プロシージャは、読み取ったトランザクションIDを、項目「トランザクションID」の値とし、当該操作が変更対象としたデータ格納用テーブルのテーブル名を、項目「テーブル名」の値とするレコードを、変更テーブル管理用テーブルに挿入する。
トランザクション情報取得プロシージャは、読み取ったトランザクションIDを、項目「トランザクションID」の値とし、当該操作が変更対象としたデータ格納用テーブルのテーブル名を、項目「テーブル名」の値とするレコードを、変更テーブル管理用テーブルに挿入する。
S(STEP)10;
トランザクション情報取得プロシージャは、読み取ったトランザクションIDと連番とを、トリガーに渡す。
トランザクション情報取得プロシージャは、読み取ったトランザクションIDと連番とを、トリガーに渡す。
S(STEP)11;
トリガーは、トランザクション情報取得プロシージャから、トランザクションIDと連番とを受け取り、当該操作が変更対象としたデータ格納用テーブルに対応する変更データ格納用テーブルに、当該操作による変更が、挿入(INSERT)であるか、又は、更新(UPDATE)であるか、或は、削除(DELETE)であるのかに応じて、以下のようなレコードを挿入する。
トリガーは、トランザクション情報取得プロシージャから、トランザクションIDと連番とを受け取り、当該操作が変更対象としたデータ格納用テーブルに対応する変更データ格納用テーブルに、当該操作による変更が、挿入(INSERT)であるか、又は、更新(UPDATE)であるか、或は、削除(DELETE)であるのかに応じて、以下のようなレコードを挿入する。
当該操作による変更が挿入(INSERT)である場合、当該操作が変更対象としたデータ格納用テーブルに対応する変更データ格納用テーブルに挿入されるレコードは、トランザクション情報取得プロシージャから受け取ったトランザクションIDを、項目「トランザクションID」とし、トランザクション情報取得プロシージャから受け取った連番を、項目「連番」の値とし、挿入(INSERT)を、項目「変更種別」の値とし、当該操作が変更対象としたデータ格納用テーブルの変更(挿入)後のレコードを含むレコードである。
当該操作による変更が更新(UPDATE)である場合、当該操作が変更対象としたデータ格納用テーブルに対応する変更データ格納用テーブルに挿入されるレコードは2つあり、第1のレコードは、トランザクション情報取得プロシージャから受け取ったトランザクションIDを、項目「トランザクションID」とし、トランザクション情報取得プロシージャから受け取った連番を、項目「連番」の値とし、更新(UPDATE)の前を、項目「変更種別」の値とし、当該操作が変更対象としたデータ格納用テーブルの変更(更新)前のレコードを含むレコードであり、他方、第2のレコードは、トランザクション情報取得プロシージャから受け取ったトランザクションIDを、項目「トランザクションID」とし、トランザクション情報取得プロシージャから受け取った連番を、項目「連番」の値とし、更新(UPDATE)の後を、項目「変更種別」の値とし、当該操作が変更対象としたデータ格納用テーブルの変更(更新)後のレコードを含むレコードである。
当該操作による変更が削除(DELETE)である場合、当該操作が変更対象としたデータ格納用テーブルに対応する変更データ格納用テーブルに挿入されるレコードは、トランザクション情報取得プロシージャから受け取ったトランザクションIDを、項目「トランザクションID」とし、トランザクション情報取得プロシージャから受け取った連番を
、項目「連番」の値とし、削除(DELETE)を、項目「変更種別」の値とし、当該操作が変更対象としたデータ格納用テーブルの変更(削除)前のレコードを含むレコードである。
、項目「連番」の値とし、削除(DELETE)を、項目「変更種別」の値とし、当該操作が変更対象としたデータ格納用テーブルの変更(削除)前のレコードを含むレコードである。
S(STEP)12;
当該操作が、当該トランザクションに含まれる最後のデータ変更操作でない場合、STEP13に進み、
他方、当該操作が、当該トランザクションに含まれる最後のデータ変更操作である場合、STEP14に飛ぶ。
当該操作が、当該トランザクションに含まれる最後のデータ変更操作でない場合、STEP13に進み、
他方、当該操作が、当該トランザクションに含まれる最後のデータ変更操作である場合、STEP14に飛ぶ。
S(STEP)13;
当該トランザクションに含まれる当該操作の次のデータ変更操作を新たに当該操作とし、当該操作を実行することで、当該操作が変更対象とするデータ格納用テーブルを変更する。その後、STEP5に戻る。
当該トランザクションに含まれる当該操作の次のデータ変更操作を新たに当該操作とし、当該操作を実行することで、当該操作が変更対象とするデータ格納用テーブルを変更する。その後、STEP5に戻る。
S(STEP)14;
トランザクション終了プロシージャが起動される。
トランザクション終了プロシージャが起動される。
S(STEP)15;
当該トランザクションが施した変更が挿入(INSERT)であった場合、STEP16に進み、
他方、当該トランザクションが施した変更が挿入(INSERT)でなかった場合、STEP17に飛ぶ。
当該トランザクションが施した変更が挿入(INSERT)であった場合、STEP16に進み、
他方、当該トランザクションが施した変更が挿入(INSERT)でなかった場合、STEP17に飛ぶ。
S(STEP)16;
トランザクション終了プロシージャは、トランザクション開始プロシージャによって、変更履歴管理用テーブルに挿入されたレコードの項目「データID」の値を、当該トランザクションによって、変更対象のデータ格納用テーブルに挿入されたデータのデータIDに更新(UPDATE)する。
トランザクション終了プロシージャは、トランザクション開始プロシージャによって、変更履歴管理用テーブルに挿入されたレコードの項目「データID」の値を、当該トランザクションによって、変更対象のデータ格納用テーブルに挿入されたデータのデータIDに更新(UPDATE)する。
S(STEP)17;
トランザクション終了プロシージャは、当該トランザクションが属するデータベースセッションのサーバープロセスIDを持つレコードを、トランザクション管理用テーブルから削除する。
トランザクション終了プロシージャは、当該トランザクションが属するデータベースセッションのサーバープロセスIDを持つレコードを、トランザクション管理用テーブルから削除する。
Claims (2)
- トランザクション開始プロシージャと、トランザクション情報取得プロシージャと、トリガーとを備え、
トランザクション開始プロシージャは、トランザクションの開始直前に、トランザクションIDと連番の初期値として0とを記録し、
トランザクション情報取得プロシージャは、トリガーによって起動され、連番を1だけインクリメントした後に、トランザクションIDと連番とを読み出してトリガーに渡し、
トリガーは、データ格納用テーブルが変更されることによって起動され、トランザクション情報取得プロシージャを起動してトランザクションIDと連番とを受け取ると、変更されたデータ格納用テーブルの変更前のレコード、又は変更後のレコード、或は両方のレコードを、トランザクションIDと連番と共に記録することを特徴とするデータ変更履歴記録システム。 - トランザクション開始プロシージャと、トランザクション情報取得プロシージャと、トリガーとを備えるシステムが実行する方法であって、
トランザクション開始プロシージャが、トランザクションの開始直前に、トランザクションIDと連番の初期値として0とを記録する工程と、
トリガーによって起動されたトランザクション情報取得プロシージャが、連番を1だけインクリメントした後に、トランザクションIDと連番とを読み出してトリガーに渡す工程と、
データ格納用テーブルが変更されることによって起動されたトリガーが、トランザクション情報取得プロシージャを起動してトランザクションIDと連番とを受け取ると、変更されたデータ格納用テーブルの変更前のレコード、又は変更後のレコード、或は両方のレコードを、トランザクションIDと連番と共に記録する工程とを含むことを特徴とするデータ変更履歴記録方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004313502A JP2006127088A (ja) | 2004-10-28 | 2004-10-28 | データ変更履歴記録システム及び方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004313502A JP2006127088A (ja) | 2004-10-28 | 2004-10-28 | データ変更履歴記録システム及び方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2006127088A true JP2006127088A (ja) | 2006-05-18 |
Family
ID=36721802
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004313502A Pending JP2006127088A (ja) | 2004-10-28 | 2004-10-28 | データ変更履歴記録システム及び方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2006127088A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7912819B2 (en) * | 2004-03-29 | 2011-03-22 | Microsoft Corporation | Systems and methods for versioning based triggers |
JP2014170574A (ja) * | 2014-04-25 | 2014-09-18 | Bank Of Tokyo-Mitsubishi Ufj Ltd | データベースサーバ |
CN115357590A (zh) * | 2022-08-10 | 2022-11-18 | 中信建投证券股份有限公司 | 针对数据变更的记录方法、装置、电子设备及存储介质 |
-
2004
- 2004-10-28 JP JP2004313502A patent/JP2006127088A/ja active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7912819B2 (en) * | 2004-03-29 | 2011-03-22 | Microsoft Corporation | Systems and methods for versioning based triggers |
JP2014170574A (ja) * | 2014-04-25 | 2014-09-18 | Bank Of Tokyo-Mitsubishi Ufj Ltd | データベースサーバ |
CN115357590A (zh) * | 2022-08-10 | 2022-11-18 | 中信建投证券股份有限公司 | 针对数据变更的记录方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101556435B1 (ko) | 데이터베이스 백업본 복구 방법 및 그 장치 | |
US9218377B2 (en) | Failure recovery and error correction techniques for data loading in information warehouses | |
US8078570B2 (en) | Versioning data warehouses | |
US9418094B2 (en) | Method and apparatus for performing multi-stage table updates | |
US7805439B2 (en) | Method and apparatus for selecting data records from versioned data | |
JP4522170B2 (ja) | リレーショナルデータベースのインデックス追加プログラム,インデックス追加装置及びインデックス追加方法 | |
US8280907B2 (en) | System and method for managing access to data in a database | |
WO2018095299A1 (zh) | 一种时序数据管理方法、设备和装置 | |
JP2016529633A (ja) | スナップショットおよびクローンの複製 | |
JP2008009809A (ja) | データベース同期処理プログラム | |
US7225206B2 (en) | System and method for reorganizing stored data | |
JP2007188497A (ja) | トランザクション処理のためのログ情報管理システムおよび方法 | |
US20050091233A1 (en) | Method and system for preserving an original table schema | |
US9009114B1 (en) | Version mapped incremental backups | |
JP5412995B2 (ja) | プログラムモデル検査におけるデータベース制御装置、データベース制御方法、データベース制御プログラム | |
US9740576B2 (en) | Database recovery after system copy | |
US20020194189A1 (en) | Method and system for activating column triggers in a database management system | |
KR101588375B1 (ko) | 데이터베이스 관리 방법 및 데이터베이스 관리 시스템 | |
US20120185451A1 (en) | Data processing method and system for database management system | |
JP2006127088A (ja) | データ変更履歴記録システム及び方法 | |
CN115858252A (zh) | 一种数据恢复方法、装置及存储介质 | |
CN111414382A (zh) | 一种基于MongoDB的慢SQL聚合展示方法和系统 | |
CA2322603C (en) | Optimizing updatable scrollable cursors in database systems | |
CN110147355B (zh) | 数据同步方法、装置及服务器 | |
JP6891533B2 (ja) | データベース装置 |