-Oracleを利用して行く上で必要となった知識 #contents *Tips [#gcd0b78a] **tnsnames.oraの設定確認 [#u017e3d8] tnsping netサービス名 上記コマンドでどのtnsnames.oraを見ているのか、接続先に物理的につながるか(ID/PASSWORDは別)が確認できる。 **データベースの文字コード確認 [#c78cb0f6] SELECT NLS_CHARSET_NAME(NLS_CHARSET_ID('CHAR_CS')), NLS_CHARSET_NAME(NLS_CHARSET_ID('NCHAR_CS')) FROM DUAL; **オブジェクトの種類確認 [#k5e8bfca] SQL> select object_name,owner,object_type from all_objects where object_name='EMP'; **日付のデフォルトフォーマット変更 [#sc146923] SQL> SELECT SYSDATE FROM DUAL ; SQL> ALTER SESSION SET NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'; SQL> SELECT SYSDATE FROM DUAL ; そのユーザーのセッションのみ変更なので、システム全体としてそろえたい場合は別の方法を検討せよ **半角文字混入チェック(半角文字があるレコードのみヒットする) [#ja21e6a0] SELECT * FROM テーブル WHERE 調査対象カラム <> TO_MULTI_BYTE(調査対象カラム) ; *インデックス [#ma267ad2] **インデックス一覧取得 [#bf80df62] select index_name, table_owner, table_name, status from user_indexes **インデックスモニタリング [#ke74d413] 使われていないインデックスを監視する仕組み -モニタリング有効化 ALTER INDEX 索引名 MONITORING USAGE; -モニタリング状況確認 select * from v$object_usage; -モニタリング解除 ALTER INDEX 索引名 NOMONITORING USAGE; *トリガ [#n23359f6] dbms_output.put_lineを出すために、set serveroutput on;実行する -あまり使わないけど CREATE OR REPLACE TRIGGER tst_trigger before delete or insert or update -- before/after 対象の操作 on TABLE_NAME for each row (new.STATUS = 2) -- 新しい値が2の時。beforeトリガじゃないとダメ begin IF (:old.STATUS = 1) THEN dbms_output.put_line('-------------------------'); dbms_output.put_line('ID:' || :old.ID); dbms_output.put_line('STATUS:' || :old.STATUS); END IF; end tst_trigger; *テーブル [#qdc1d055] **テーブル一覧 [#j2067c0e] select table_name from user_tables; **列定義変更 [#x234fcb9] alter table テーブル名 MODIFY ( 列名 VARCHAR2(100)); -実行後はdescribeで確認 desc テーブル名 *シーケンス [#z2f0d692] **基礎知識 [#t1cbe4b5] RACの場合は各ノードで通信が発生するため、キャッシュを設定して増分値も挙げておくこと **シーケンス作成 [#hb42f388] -オプションも何も指定しないで作成 create sequence シーケンス名 -初期値0で1ずつ増えて、最大値が1万のシーケンス作成 create sequence シーケンス名 increment by 1 start with 0 maxvalue 10000 **シーケンス一覧取得(定義の確認も可能) [#p0ca2925] select sequence_name from user_sequences; **現在の値を確認 [#ia730f42] -次に降りだされる値(キャッシュを考慮しないので下より大きめの数値が出る) select sequence_name, last_number from user_sequences; -トランザクション中で利用(こっちが正確のようだ) SELECT シーケンス名.CURRVAL FROM DUAL **次の値を確認 [#vb6e385c] SELECT シーケンス名.NEXTVAL FROM DUAL これを実行するとシーケンスが+されるので注意!ロールバックも効かない *インデックス [#a0432637] **あるテーブルに存在するインデックスの確認。例: [#ad405b69] select index_name ,table_name ,column_name from user_ind_columns where table_name = 'EMP'; *プロシージャ実行 [#tbfbdbb8] **sqlplusからプロシージャ実行 [#pa9b9bc0] execute プロシージャ名 **プロシージャ定義内容確認 [#x21a1258] select text from user_source where NAME = 'プロシージャ名' order by line **プロシージャのDBMS_OUTPUTをSQLplus出力する。 [#rdb69d5d] set serveroutput onを実施する必要がある。 SQL> set serveroutput on SQL> begin 2 dbms_output.put_line('test message'); 3 end; 4 / test message *表領域関連 [#w0487172] -以下のページに役立つ情報が満載 http://centromezzo.sakura.ne.jp/wiki/?ORACLE%2FTABLESPACE *エクスポート/インポート [#s3e71837] -テーブル指定 exp 接続文字列 file=好きなファイル名 tables=対象テーブル名 [statistics=none] 最後のオプションはWindowsのコマンドから実行するときによく出る「不審な統計をエクスポートしています」のエラー回避の為。 -複数テーブル指定 tables=TABLE1,TABLE2 **インポート [#t717658f] imp接続文字列 file=好きなファイル名 tables=TABLE_A,TABLE_B IGNORE=Y [FROMUSER=EXPUSER] [TOUSER=IMPUSER] 大量データを投入するときはダイレクトパスインサートの利用を検討する。 **セッション KILl [#a995555d] alter session kill session (254,18520) #counter