• ベストアンサー

VB.NET2003でOraclの情報を取得する方法

いつもお世話になってます。 自分で探した結果では取得ことができませんでした。 そこで、ここにいる皆様の力を借りたく、投稿いたしました。 【ツール】Microsoft Visual Studio .NET 2003 【FramWork】.NetFramWork1.1 【データベース】Oracle10gかoracleXE VB.NET2003のコード上でOraclデータベースに存在する各表領域の更新日を取得したいのですが、でるるのでしょうか。 できるのであればその方法をご教授いただきたいと思っています。 ※参考URLを載せていただけると幸いです。

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

  • ベストアンサー
回答No.3

>今回知りたいのは表領域自体の更新日 あぁなるほどです。 >B.CREATEDとB.LAST_DDL_TIMEは同じ日付時間でした~テーブルにデータが追加、変更、削除された時に更新されている。 いいえ、違うと思いますよ。 http://oracle.na7.info/8_2ex.html CREATED:オブジェクト作成時のタイムスタンプ LAST_DDL_TIME:オブジェクト最終更新時のタイムスタンプ ですよ。データの追加/更新/削除のタイミングには関係ないと思います。 おそらくCREATEDLAST_DDL_TIMEがそちらの環境で同じなのは、ALTERを使用しないで、DROPとCREATEでメンテナンスをしているからではないでしょうか? SQL(1):テーブルの作成 CREATE TABLE TBL1 (FLD1 VARCHAR2(1) NOT NULL) SQL(2):テーブルの構成変更 ALTER TABLE TBL1 ADD (FLD2 VARCHAR2(1) NOT NULL) というようなメンテナンスをしていたら、作成日と更新日は異なるはずです。 なので、DBからオブジェクトをDROPするときにPURGEオプションを指定しなければ、全てDBA_OBJECTSを見たら、情報が残っています。 PURGEされていたら、跡形も残らないと思いますが、、、、 以上の事から、TABLESPACE「SCOTT」の最終更新日を取得するには ------------------------------------ SELECT * FROM ( SELECT LAST_DDL_TIME FROM DBA_OBJECTS WHERE OWNER = 'SCOTT' ORDER BY LAST_DDL_TIME DESC ) A WHERE ROWNUM = 1 ------------------------------------ っていうようにしたらよいと思いますが、どうでしょう?

kazuhisa01
質問者

お礼

1050YEN様。 二度目の回答ありがとうございます。 >ALTERを使用しないで、DROPとCREATEでメンテナンスをしているからではないでしょうか? DROP→CREATEでメンテしているデータベースで結果を取得していました。 言われてみると確かに同じでなければ可笑しいですよね。 PURGEオプションは何も指定していないようです。 教えて頂いたSQL・・・うまく取れました。 ありがとうございます。 実行した結果から見てたぶんあっていると思いますが、 OWNERの部分を使用しているユーザ名にすればいいという理解で間違ってませんよね。 OracleXEの場合はインスタンス名を入れても大丈夫っぽいですね。 そのあたりは詳しく調べてみます。 本当に助かりました。

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

その他の回答 (2)

回答No.2

オラクルの掲示板にて http://otn.oracle.co.jp/forum/message.jspa?messageID=8099711 USER_OBJECTSからCREATEDとLAST_DDL_TIMEを取得したらいいみたいですね。 ただし参考URLのままだと、完全に消されていないゴーストのテーブルまで情報として引いてくるきそうなので、 ・USER_OBJECTSとUSER_TABLESの結合 ・USER_TABLES.DROPPED = 'NO' を加えると、もっとよいかもしれませんね。 SELECT A.TABLE_NAME ,B.CREATED ,B.LAST_DDL_TIME FROM USER_TABLES A INNER JOIN USER_OBJECTS B ON A.TABLE_NAME = B.OBJECT_NAME AND A.DROPPED = 'NO' AND B.OBJECT_TYPE = 'TABLE'

kazuhisa01
質問者

お礼

回答ありがとうございます。 1050YEN様に教えて頂いたURLとSQLを参考に実行してみました。 取得後の結果を見るとB.CREATEDとB.LAST_DDL_TIMEは同じ日付時間でした。 その日付時間からすると、テーブルにデータが追加、変更、削除された時に更新されている。 これは今後の知識として勉強となりました。 が、今回知りたいのは表領域自体の更新日なので少し違っているようです。 質問内容がわかりにくくて申し訳ありません。 何かわかりましたら、また、アドバイスの方お願いいたします。

すると、全ての回答が全文表示されます。
  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.1

表領域すなわちTABLESPACEの表構造には 更新日が含まれていないので直接ORACLEに アクセスしても無理だろうと思います。 下記 表構造 SQL> DESC DBA_TABLESPACES 名前 NULL? 型 ----------------------------------------- -------- ------------ TABLESPACE_NAME NOT NULL VARCHAR2(30) BLOCK_SIZE NOT NULL NUMBER INITIAL_EXTENT NUMBER NEXT_EXTENT NUMBER MIN_EXTENTS NOT NULL NUMBER MAX_EXTENTS NUMBER PCT_INCREASE NUMBER MIN_EXTLEN NUMBER STATUS VARCHAR2(9) CONTENTS VARCHAR2(9) LOGGING VARCHAR2(9) FORCE_LOGGING VARCHAR2(3) EXTENT_MANAGEMENT VARCHAR2(10) ALLOCATION_TYPE VARCHAR2(9) PLUGGED_IN VARCHAR2(3) SEGMENT_SPACE_MANAGEMENT VARCHAR2(6) DEF_TAB_COMPRESSION VARCHAR2(8) RETENTION VARCHAR2(11) BIGFILE VARCHAR2(3)

kazuhisa01
質問者

お礼

回答ありがとうございます。 直接Oracleにアクセスしても取得できないのは調べていてなんとなくわかったのですが、 fortranxp様の回答から無理と言う事が確信できました。

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

関連するQ&A