• ベストアンサー

変更のあったテーブルを見つける

データーベースにあるテーブル全てをモニターして、色々な処理が終わった後に変更があったテーブルのみを調べるにはどうしたらいいでしょうか。何か特別なプログラムが必要ですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

「変更」とおっしゃっているのが、DDLレベル(CREATE,ALTER etc)の話なのか、DMLレベル(INSERT,UPDATE,DELETE)なのかによって方法は全然変わります。 DDLレベル(CREATE,ALTER etc)ならディクショナリを見ればわかります。 ORACLEなら DBA_OBJECTS、SQL Server なら sysobjects、MySQL なら INFORMATION_SCHEMA など。 DMLレベル(INSERT,UPDATE,DELETE)だと、「あらかじめ何かを仕込んでおかないと、後から確認する術はない」と考えておいた方がよいです。 仕込んでおくのは何かと言うと、 ・一般的にはINSERT,UPDATE,DELETE時に履歴テーブルへのINSERT  (トリガーでINSERTする場合やアプリケーション側でINSERTする場合など様々) ・アプリケーション側で変更時にログに出力 ・他にはORACLEであれば AUDIT などの機能 などが上げられます。

one-eyed
質問者

お礼

AUDITでうまくできました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • データベースで変更の多いテーブルの設計

    データベースを設計しています。 あるテーブルに関して、項目(列)が50個くらいあるのですが、これらのうち20個くらいの列が頻繁に変更があり、データの履歴が必要になるため、テーブルを再設計しようと考えています。 現在は変更があるたびにテーブル全体を別テーブルにコピーして、寄せています。 このような場合、何かよい設計方法はあるでしょうか?

  • ベーステーブル情報について

    Visual Basic6で作った、データベースを扱うプログラムをWindows95で使用していたのですが、WindowsXP(Profassional)のパソコンに変えたら、「更新に必要なベーステーブル情報が足りません」のエラーが出て止まってしまいます。 Data Environmentを使ってデータベースに接続しているのですが、すべてのプログラムでエラーになります。 解る方、回答のほど、よろしくお願い致します。

  • データベースのテーブル設計について

    データベースのテーブル設計で、数項目のみのデータをひとつのテーブルにしていますでしょうか? すべてデータベース内で管理するという一貫性はあると思うのですが、たかだか数項目なのでどうかなとも思ってしまいます。 かといって、数項目のみのデータをプログラム内(たとえば構造体)で管理するというのも、管理が必要な要素が散らばるし、再コンパイルも必要になってきます。 このあたりどのようにすればよいのかなといつも判断に悩んでいます。 みなさんはどのように判断、設計していますでしょうか?ご意見お教えください。

  • テーブルの列名を変更したい

    お世話になります Oracleデータベースで テーブルの列名を変更したいのですが、 どのような方法があるでしょうか? 入っているデータを消したくないので、 テーブルを作りなおすという方法はあまりとりたくありません もしかして、Create Tableしなおさないと無理? よろしくお願いします。

  • マスタテーブルの変更履歴について

    データベースについて質問させていただきます。 例えば、飲食店で発行されるレシートには以下が記載されています。 ・店舗名、電話番号、担当者名 ・購入した商品名、値段、会計 これらを後に会社の業務で画面にレシートのような情報を表示したり、データの分析に使う場合、データベースを作成すると思います。 そのデータベースとしては、 以下のようなものが必要だと、私は考えました。 ・店舗テーブル…属性:店舗コード、店名、電話番号、住所など ・従業員テーブル…属性:従業員ID、名前、所属の店舗コード ・顧客テーブル…顧客ID、顧客名、住所、電話番号 ・商品テーブル…属性:商品ID、商品名、単価 ・売上履歴テーブル…属性:購入履歴ID、商品ID、個数、購入日時、顧客ID、購入した店舗コード、従業員ID これらを踏まえて、以下の質問をさせていただきます。 ・マスタの更新や別途、変更履歴テーブルが必要なのか…商品テーブルは日々属性の情報が変更されると思います。例えば、不況によって、単価が変わるなど。これをマスタテーブルの単価だけ変更する対応だとすると、購入履歴テーブルは商品テーブルを利用するので、単価の変更前に購入した履歴も値段が変更されてしまいます。この対応策として、別途、商品マスタの履歴テーブルを作って購入日時などを元に正しい単価を判断するような感じで対応すると良いのでしょうか? ・テーブルの作成や検索の都度、毎回結合するのか…例えば、Aさんの購入履歴を画面に表示する場合、画面にAさんの名前を入力して検索ボタンを押すと、購入履歴テーブルから必要なレコードを取り出して、Aさんの購入履歴を画面に表示するイメージをしています。この際、購入履歴テーブルは、商品IDを元に商品テーブルと結合したり、他には顧客テーブルと従業員テーブルとも結合する必要があります。検索をする際は、毎回テーブル結合を行うのでしょうか?それならば、見にくいイメージがありますが、購入履歴テーブルの顧客IDを名前にしておいたり、従業員IDを従業員の名前にしておくと、テーブルの結合が必要なくて良いのではないでしょうか? 大変文章が長く、また、読みにくいもので申し訳ございません。 たくさんの回答、よろしくお願いいたします。

  • アクセスでテーブルの変更内容をフォームに反映させるには?

    アクセス超初心者です。 テーブルを作って、その後フォームを作りました。 フォームの内容が足らなかった為、テーブルに戻って編集しました。 しかし、テーブルの変更内容がフォームに反映されません。 顧客管理のデータベースを作りたかったのですが。。 例えば、テーブルで「氏名」という項目が足らなかったとして、追加したとします。それを保存します。その後、フォームの顧客管理を開けても、反映されません。編集後、どうすればフォームに反映されるのでしょうか。。(T_T) 宜しくお願いします。

  • MySQLのテーブルタイプの変更について

    phpMyAdminを使用して MyISAMのテーブルをInnoDBのテーブルに変更する処理を行ったのですが #1114 - The table '#sql-413b_41af4' is full とエラーになってしまい変更することができませんでした。 この場合、MyISAMのテーブルをInnoDBのテーブルに変更する ことは不可能なのでしょうか。 もし変更の手段をご存知の方がいらっしゃいましたら、 教えていただけませんでしょうか。宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • MSアクセス:別のコンピュータにコピーする時の、リンク元テーブルの場所の変更

    アクセスのデータベースを自分のパソコンで作っています。完成後プロジェクトで使う共同のパソコンにコピーするつもりでいすのですが、テストをしようと思いリムーバブルディスクにコピーした時に気づいたことがあります。 このプログラムは2つのテーブールのデータを併記してプリントするために、それぞれのテーブルを”ファイル”-”外部データの・・”-”テーブルのリンク”でテーブルを作り、クエリでひとつにまとめレポートでプリント、の手順で作りました。問題は、プログラムをファイルごと(元のテープルも含む)ディスクにコピーした後も、参照元のテーブルが”¥・・・¥デスクトップ¥・・・¥”となっていて、ディスク上の元テーブルを変更してもプログラムのテーブルやクエリに反映されません。 別のコンピュータに移したときに参照元のテーブルの在りかを変更する方法はありますか(私のコンピュータのデスクトップから、新しいコンピュータのデスクトップ)?それとも、プログラムは実際に使うパソコンで作らなければいけないのでしょうか?

  • アクセス2000でのリンク先テーブルの変更方法

    アクセス2000を使っています。 データーベース分割ツールを使って、テーブルを分割し、テーブルをサーバー側においてデータベースを使っています。 サーバー側のテーブルを、自分のパソコンのテーブルに移したいのですが、フォーム/クエリ側でサーバー側のテーブルをリンクしているのでテーブルを移せません。どうしたらいいのでしょうか?  やはり、一度、全てのテーブルをインポートしてから、分割し直さなければならないのでしょうか?  誰か教えて下さい。

  • テーブル内の文字の大きさを変更したい

    下記のプログラムでテーブルを作成し、 function createTable($values) { $count = $values["count"]; $date = mktime(0, 0, 0, $values["date"]["m"], $values["date"]["d"], $values["date"]["Y"]); $table = new HTML_Table(array("border" => 1 , "class" => "bordered")); while ($count--) { $row = createHeaderRow($date); $table->addRow($row["contents"], $row["attributes"], "TH"); foreach (getRooms() as $room) { $row = createRow($date, $room); $table->addRow($row["contents"], $row["attributes"]); } $date += 24 * 60 * 60; } return $table; } それを別のプログラムの <?php $table ->display(); ?>の部分で、テーブルを読み出しているのですが、 フォントを変更したい場合、どこでどう書けばテーブル内の文字の大きさを変更できるのでしょうか "TH"の部分で太字になったりを指定できるみたいなのですが、font size等を入れてみましたが変更できませんでした どうかよろしくお願いします

    • ベストアンサー
    • PHP