アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になってます。

自分で探した結果では取得ことができませんでした。
そこで、ここにいる皆様の力を借りたく、投稿いたしました。

【ツール】Microsoft Visual Studio .NET 2003
【FramWork】.NetFramWork1.1
【データベース】Oracle10gかoracleXE

VB.NET2003のコード上でOraclデータベースに存在する各表領域の更新日を取得したいのですが、でるるのでしょうか。
できるのであればその方法をご教授いただきたいと思っています。
※参考URLを載せていただけると幸いです。

A 回答 (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
WHEREOWNER = 'SCOTT'
ORDER BY LAST_DDL_TIME DESC
) A
WHERE ROWNUM = 1
------------------------------------
っていうようにしたらよいと思いますが、どうでしょう?
    • good
    • 0
この回答へのお礼

1050YEN様。
二度目の回答ありがとうございます。

>ALTERを使用しないで、DROPとCREATEでメンテナンスをしているからではないでしょうか?
DROP→CREATEでメンテしているデータベースで結果を取得していました。
言われてみると確かに同じでなければ可笑しいですよね。

PURGEオプションは何も指定していないようです。


教えて頂いたSQL・・・うまく取れました。
ありがとうございます。

実行した結果から見てたぶんあっていると思いますが、
OWNERの部分を使用しているユーザ名にすればいいという理解で間違ってませんよね。
OracleXEの場合はインスタンス名を入れても大丈夫っぽいですね。
そのあたりは詳しく調べてみます。

本当に助かりました。

お礼日時:2007/02/28 14:59

オラクルの掲示板にて


http://otn.oracle.co.jp/forum/message.jspa?messa …

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_TABLESA
INNER JOIN
USER_OBJECTSB
ON A.TABLE_NAME = B.OBJECT_NAME
AND A.DROPPED= 'NO'
AND B.OBJECT_TYPE = 'TABLE'
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

1050YEN様に教えて頂いたURLとSQLを参考に実行してみました。
取得後の結果を見るとB.CREATEDとB.LAST_DDL_TIMEは同じ日付時間でした。
その日付時間からすると、テーブルにデータが追加、変更、削除された時に更新されている。
これは今後の知識として勉強となりました。

が、今回知りたいのは表領域自体の更新日なので少し違っているようです。

質問内容がわかりにくくて申し訳ありません。


何かわかりましたら、また、アドバイスの方お願いいたします。

お礼日時:2007/02/28 10:28

表領域すなわち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)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

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

お礼日時:2007/02/28 08:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!