マンガでよめる痔のこと・薬のこと

テーブルへの最終アクセス時刻(またはカレントユーザの前回ログイン時刻)の取得を行いたいのですが可能でしょうか?
共有サーバなのでバイナリログは使用できません。
MySQLのバージョンは5.0.22ですが4系で使える方法もご存じでしたら教えていただけると嬉しいです。
お願いいたします_ _

このQ&Aに関連する最新のQ&A

A 回答 (1件)

ユーザー管理用のテーブルを別途作成し、timestamp型


にするか、datetime型でcurtimeしてやるかのいずれか
ですかねぇ?
単純に「テーブルへの最終アクセス時刻」という
とアクセスを調べるためのアクセスも、アクセスなので
どのアクセスが有効でどれが無効というケース分けが
必要になるので、それよりは別管理にするほうが
わかりやすいでしょう

この回答への補足

ご回答ありがとうございます。すみません説明不足でした;
前回のアクセスが自分のアクセスかどうか調べるために時刻を取得するので(クラッキング検知対策)、ユーザ側で操作できるような形で時刻を保存するのは避けたいです。
# 当初、SHOW TABLE STATUSのcheck_timeで実現出来るか調べていたのですが、
# Verによって挙動が違うらしく纏まった情報もなかったので結局出来ませんでした;

補足日時:2006/07/30 13:46
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

関連するカテゴリからQ&Aを探す

このQ&Aと関連する良く見られている質問

Qoracleデータベースの更新履歴

oracleデータベースの更新履歴が分かる方法について。
8iや9iで、ある指定したDBにいつアクセス(更新)されたか分かる方法はありますか?その手順含め教えてください。

Aベストアンサー

#1 のmuyoshid です。

> もう少し簡単な方法はありますでしょうか
先ずは、こちらをご覧下さい。
http://www.oracle.com/technetwork/jp/content/flashback-250772-ja.pdf

Oracle8i/9i と言う条件ではこの中で使用できるのはFlashback Query (Oracle9i) のみです。
つまり、Oracle8i 環境ではLogMiner を使用しなければ
(Trigger や監査を使って変更履歴を取得していなければ) 更新履歴を取得する事は
できません。

[注]
Flushback Query は、現在のデータにUndo 情報を適用する事によって、過去のある時点に
遡ってデータを取得するものです。
そのため、更新履歴を取得すると言う質問者様の要件とは若干異なります。

上記PDF では、Select 文にAS OF 句を指定する事でFlashback Query が使用できるように
記載されていますが、Oracle9i ではDBMS_FLASHBACK パッケージを使用します。
詳細は、アプリケーション開発者ガイドを参照して下さい。

#1 のmuyoshid です。

> もう少し簡単な方法はありますでしょうか
先ずは、こちらをご覧下さい。
http://www.oracle.com/technetwork/jp/content/flashback-250772-ja.pdf

Oracle8i/9i と言う条件ではこの中で使用できるのはFlashback Query (Oracle9i) のみです。
つまり、Oracle8i 環境ではLogMiner を使用しなければ
(Trigger や監査を使って変更履歴を取得していなければ) 更新履歴を取得する事は
できません。

[注]
Flushback Query は、現在のデータにUndo 情報を適用する事によって、過去のある時点に
...続きを読む

QOracleで流したSQLのログを取得できますか?

ASP+Oracle9iで作られたシステムがあります。
Oracleの設定などは前任者がしており、まともな引継ぎを受けないまま私が維持運用員となりました。
現在DBからあるレコードが消えてしまい(最初から作られてない可能性もあり)、顧客からクレームがついています。
状況から考えて怪しいプログラムを調査したのですが、原因不明でした。
そこで、Oracleの方で今まで流れたSQLをログとして保存していれば手がかりがつかめるのではないかと思い、情報を探しているのですが見つからないので教えて頂きたいのです。
私はOracleの知識(管理面について)が殆どなく、Oracleを使うことはできるが、Oracleの設定がどういう状況になっているか調べることもできず、資料もありません。

1.そもそもOracleにSQLをログとして保存する機能があるのか?
2.あるとすれば、保存機能が有効になっているか、保存したファイルがどこにあるかをどこで確認できるか?

以上の点についてご存知の方、どうぞ回答よろしくお願いします。

Aベストアンサー

OracleのSQL実行痕跡は以下に示すものの中にあります。
ただし、それぞれの設定レベル、保存方法によって、参照できる範囲は変わります。

1.オンラインREDOログとアーカイブログ
  オンラインREDOログはすべてのOracleデータベースに存在します。
  ですが、そのREDOログのサイズとシステムのアクセス量によって保存期間は変化します。アーカイブログ設定しておけば、古いREDOログはアーカイブとして吐き出されます。
  これらは#1の方がおっしゃったLOGMINERで実行済みSQLを調査することができます。
  アーカイブログモードになっているかどうかは、下記で確認できます。
   SQL> select log_mode from v$database;

  また、どのアーカイブログファイルを調査するかは下記を参照すれば良いと思います。
   SQL> select name,to_char(completion_time, 'yyyy/mm/dd hh24:mi') adate from v$archived_log;

2.フラッシュバック問い合わせ
  これは初期化パラメータUNDO_MANAGEMENTがAUTOに設定されており、かつUNDO_RETENTIONが保存期間として適切に設定されている場合のみ使用できます。
  やっていることは、UNDO表領域(旧RBS用表領域)の中に残っている実行履歴を参照しています。したがって、データベース設計時にフラッシュバック問い合わせを前提としていない限り、使える可能性は低いです。

3.その他
  監査を実行していれば、実行SQLを取得できる可能性があります。
  ただし、監査レベルなどを理解しておかないと、すべてのSQLが取得されていない可能性がありますので、難しいかもしれません。

OracleのSQL実行痕跡は以下に示すものの中にあります。
ただし、それぞれの設定レベル、保存方法によって、参照できる範囲は変わります。

1.オンラインREDOログとアーカイブログ
  オンラインREDOログはすべてのOracleデータベースに存在します。
  ですが、そのREDOログのサイズとシステムのアクセス量によって保存期間は変化します。アーカイブログ設定しておけば、古いREDOログはアーカイブとして吐き出されます。
  これらは#1の方がおっしゃったLOGMINERで実行済みSQLを調査することができま...続きを読む

Qupdate文で改行を入れる

こんにちは。
いつもお世話になっています。

update文を使用して、データに改行を入れたいのですが、どうすればよいでしょうか。

対象列のデータ型はVARCHAR2です。

例えばSQLPLUSから、
SPL>update 「テーブル名」set 「対象列」='あ改行い改行う改行'
を投入し、そのあと
select 「対象列」 from 「テーブル名」
とすると
SQL>あ
SQL>い
SQL>う
と出てくればよいんですが、
SQL>update 「テーブル名」set 「対象列」='あ\nい\nう\n'
としても
SQL>あ\nい\nう\n
と、「\n」が文字列としてでてきてしまいます。

SPL>update 「テーブル名」set 「対象列」='あ
2い
3う'
と投入すると、期待通りになるのですが、
そうではなく一行にまとめたいのですがどうすれば良いでしょうか。

Oracle9iを使用しています。
宜しくお願いいたします。

Aベストアンサー

こんにちわyukio200263さん
以下のSQL文でどうでしょうか?

UPDATE 「テーブル名」
SET 「対象列」= 'あ' || CHR(13) || CHR(10) ||'い'

ちょっと長くなってしまいますが、一行で可能です。

QDirコマンドでフォルダ内ファイルの合計サイズをだすには?(コマンドプロンプトにて)

いろいろ調べましたが不明な点があり、質問します。

WindowsのDOSプロンプトでdirコマンドを打つとフォルダ・ファイルの一覧が表示されますが、その中にファイルサイズが表示されています。
このサイズを合計できるコマンドはありませんか?
DIRコマンドのオプションを調べましたがそれらしいものが見当たりません。
具体的には
C:\xxx\配下に50個程度のファイルがあります。
その50個の合計サイズを知りたいです。
xxxフォルダの親フォルダにはアクセス不可です。

ずーっと悩んでいます。よろしくお願いします。

なお、OSはWindowsNTか2000で使用予定です。

Aベストアンサー

カレントドライブ、カレントフォルダを
C:\xxx\
にした状態で、

dir /s /a-d

/sパラメータででサブディレクトリすべてを検索
/a-dパラメータでディレクトリ以外のファイル(つまり属性に関係なくすべてのファイル

これを実行すると最後にファイルの個数とファイルサイズの合計を表示します。

もし、隠し属性のファイルは合計しないのであれば、

dir /s

だけで良いと思われます。

QOracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。

QSYSユーザーでログインしたい

SQL plusでSYSユーザーでログインするにはどうすればよいのでしょうか?
SYSTEMユーザーやSCOTTユーザーではログインできるのですが、SYSユーザーになる方法がわかりません。
お願いします。

Aベストアンサー

>SQL plusでSYSユーザーでログインするにはどうすればよいのでしょうか?
特別なことする必要がないと思います。
ログインできない場合いろいろな原因が考えられます。
一番可能な原因は設定によってSYSユーザーNOMAL権限でログインできない場合あります。
この場合
sqlplus sys/パスワード@接続文字列 as sysdba
で試してください。


>SYSTEMユーザーやSCOTTユーザーではログインできるのですが、SYSユーザーになる方法がわかりません。
conn sys/パスワード@接続文字列 as sysdba

Qdatapumpの実行方法について

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

datapumpの実行方法(expdp/impdp)について、ご存知の方がいらっしゃいましたら、ご教授の程お願い致します。

------------------------------
●環境
 Oracle 11g (11.2.0.3)

以下の手順で、エクスポート/インポート テストを行ったのですが、
expdpで"tables"を指定するとエラーとなり実行できませんでした。
full=y(データベース全体)は動きました。
tablesで指定するものは、"CREATE TABLE"で作成したテーブル名ではないのでしょうか。

また、テーブルスペースを削除"drop tablespace tbl01"したのですが、
expdpでデータベース全体をエクスポートしたものから、impdpしても
削除したものが戻せませんでした。
impdpのコマンドに誤りがあるのでしょうか。


●expdp実行
-----
・tablespace作成
$ sqlplus / as sysdba
SQL> create tablespace tbl01 datafile '+data/testdb/datafile/tblsp1' size 10m autoextend off;
-----
・sequence作成
SQL> create sequence seq1;
-----
・TABLE作成
SQL> CREATE TABLE TEST_TBL(USER_ID VARCHAR2(8) NOT NULL, DEPT_NO VARCHAR2(8)) tablespace tbl01;
-----
・INSERT実行(5件分)
begin
for i in 1..5 loop
INSERT INTO TEST_TBL (USER_ID, DEPT_NO) VALUES (seq1.nextval, '1234') ;
commit;
end loop;
end;
/
-----
・expdp使用する為の準備
ディレクトリの作成と read/write 権限の付与
$ sqlplus / as sysdba
SQL> create directory expdp_dir as '/u01/tpump';
SQL> grant read,write on directory expdp_dir to system;
-----
・expdb実行
$ expdp system/pass dumpfile=TEST_DIR:expdp_all.dmp logfile= TEST_DIR:expdp_all.log full=y
=====
"SYSTEM"."SYS_EXPORT_FULL_01"を起動しています: system/******** dumpfile=TEST_DIR:expdp_all.dmp logfile= full=y
BLOCKSメソッドを使用して見積り中です...
オブジェクト型DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATAの処理中です
-中略-
SYSTEM.SYS_EXPORT_FULL_01に設定されたダンプ・ファイルは次のとおりです:
/u01/tpump/expdp_all.dmp
ジョブ"SYSTEM"."SYS_EXPORT_FULL_01"が11:31:19で正常に完了しました
=====

$ expdp system/pass tables=TEST_TBL dumpfile=TEST_DIR:expdp_tbl.dmp logfile= TEST_DIR:expdp_tbl.log
=====
"SYSTEM"."SYS_EXPORT_TABLE_01"を起動しています: system/******** tables=TEST_TBL dumpfile=TEST_DIR:expdp_tbl.dmp logfile=
BLOCKSメソッドを使用して見積り中です...
BLOCKSメソッドを使用した見積り合計: 0 KB
ORA-39166: オブジェクトSYSTEM.TEST_TBLが見つかりません。
ORA-31655: ジョブに対してデータまたはメタデータ・オブジェクトが選択されていません
ジョブ"SYSTEM"."SYS_EXPORT_TABLE_01"が完了しましたが、2エラーが11:33:54で発生しています
=====

●impdp実行
$ impdp system/pass dumpfile=TEST_DIR:expdp_all.dmp logfile= TEST_DIR:impdp_all.log
=====
マスター表"SYSTEM"."SYS_IMPORT_FULL_01"は正常にロード/アンロードされました
"SYSTEM"."SYS_IMPORT_FULL_01"を起動しています: system/******** dumpfile=expdp_dir:expdp_all.dmp logfile= full=y
オブジェクト型DATABASE_EXPORT/TABLESPACEの処理中です
ORA-31684: オブジェクト型TABLESPACE:"UNDOTBS1"はすでに存在します
ORA-31684: オブジェクト型TABLESPACE:"TEMP"はすでに存在します
ORA-31684: オブジェクト型TABLESPACE:"USERS"はすでに存在します
ORA-39083: オブジェクト型TABLESPACEの作成が次のエラーで失敗しました:
ORA-01119: データベース・ファイル'+DATA/testdb/datafile/tblsp1'の作成中にエラーが発生しました。
ORA-17502: ksfdcre:4 ファイル+DATA/testdb/datafile/tblsp1の作成に失敗しました
ORA-15005: name "testdb/datafile/tblsp1" is already used by an existing alias
-中略-
※以下のORAエラーが多数発生
例:ORA-31684: オブジェクト型TABLESPACE:"UNDOTBS1"はすでに存在します
例:ORA-39151: 表"SYSTEM"."REPCAT$_PRIORITY_GROUP"が存在します。スキップのtable_exists_actionのため、すべての依存メタデータおよびデータはスキップされます
例:ORA-39111: 依存オブジェクト型OBJECT_GRANT:"SYSTEM"はスキップされ、ベース・オブジェクト型VIEW:"SYSTEM"."SCHEDULER_PROGRAM_ARGS"はすでに存在します
-中略-
オブジェクト型DATABASE_EXPORT/SCHEMA/TABLE/CONSTRAINT/REF_CONSTRAINTの処理中です
オブジェクト型DATABASE_EXPORT/SCHEMA/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
オブジェクト型DATABASE_EXPORT/SCHEMA/TABLE/POST_TABLE_ACTIONの処理中です
オブジェクト型DATABASE_EXPORT/SCHEMA/TABLE/TRIGGERの処理中です
オブジェクト型DATABASE_EXPORT/SCHEMA/POST_SCHEMA/PROCACT_SCHEMAの処理中です
オブジェクト型DATABASE_EXPORT/AUDITの処理中です
ジョブ"SYSTEM"."SYS_IMPORT_FULL_01"が完了しましたが、146エラーが20:14:48で発生しています
=====

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

datapumpの実行方法(expdp/impdp)について、ご存知の方がいらっしゃいましたら、ご教授の程お願い致します。

------------------------------
●環境
 Oracle 11g (11.2.0.3)

以下の手順で、エクスポート/インポート テストを行ったのですが、
expdpで"tables"を指定するとエラーとなり実行できませんでした。
full=y(データベース全体)は動きました。
tablesで指定するものは、"CREATE TABLE"で作成したテーブル名ではないのでしょうか。

また、テーブルスペースを削除"...続きを読む

Aベストアンサー

> SYSスキーマなどを含めてエクスポートしたいときには、
> Full=y では無理だから各スキーマ(SYS、ORDSYS等)を指定して個別で
> 行う必要があるということなのでしょうか。

SYS スキーマはシステムの持ち物なのでexp した事はありません。
その他も、Oracle Text やExpression Filter 等、Oracle の拡張機能をInstall
した際に作成されるスキーマのため、ユーザが意識的にexp/imp する事はありません。

SYSスキーマにオブジェクトを作成しなければならない理由が無いのであれば、
新しいスキーマを作成してそちらにオブジェクトを移動した方が良いです。
テーブルのデータだけで良ければ、ユーザ作成後に
Create table 新ユーザ.テーブル名 as select * from SYS.テーブル名;
とすれば、コピー可能です。


人気Q&Aランキング