-Oracleを利用して行く上で必要となった知識

#contents

*Tips [#gcd0b78a]

**パスワード有効期限をなくす [#ue854412]

 alter profile default limit password_life_time unlimited; 

**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(調査対象カラム) ;

*制約確認 [#s3e907b6]

 select
  c.table_name, c.constraint_name, c.constraint_type,
  cc.position, cc.column_name
 from user_constraints c, user_cons_columns cc 
 where c.table_name      = cc.table_name
   and c.constraint_name = cc.constraint_name
   and c.table_name = 'テーブル名'
 order by cc.table_name, cc.constraint_name, cc.position
 ;

user_constraintsなので自分のスキーマのみ!

*インデックス [#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]

-指定しないとSYSTEM表領域を消費するのでスキーマ作成時はテーブルスペースも指定すること

**表領域の説明 [#s3b8c63f]

|永続表領域|通常のテーブルが置かれる|
|一時表領域|JOINなどのワーク|
|UNDO表領域|トランザクション時のログ|

**表領域に関する操作 [#nea281e2]

|select  TABLE_NAME, TABLESPACE_NAME from user_tables|自分の所有するテーブルの利用している表領域|

-以下のページに役立つ情報が満載

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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS