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

Tips

パスワード有効期限をなくす

alter profile default limit password_life_time unlimited; 

tnsnames.oraの設定確認

tnsping netサービス名

上記コマンドでどのtnsnames.oraを見ているのか、接続先に物理的につながるか(ID/PASSWORDは別)が確認できる。

データベースの文字コード確認

SELECT NLS_CHARSET_NAME(NLS_CHARSET_ID('CHAR_CS')),
      NLS_CHARSET_NAME(NLS_CHARSET_ID('NCHAR_CS')) FROM DUAL;

オブジェクトの種類確認

SQL> select object_name,owner,object_type from all_objects where object_name='EMP';

日付のデフォルトフォーマット変更

SQL> SELECT SYSDATE FROM DUAL ;

SQL> ALTER SESSION SET NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';

SQL> SELECT SYSDATE FROM DUAL ;

そのユーザーのセッションのみ変更なので、システム全体としてそろえたい場合は別の方法を検討せよ

半角文字混入チェック(半角文字があるレコードのみヒットする)

SELECT * FROM テーブル WHERE 調査対象カラム <> TO_MULTI_BYTE(調査対象カラム) ;

制約確認

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なので自分のスキーマのみ!

インデックス

インデックス一覧取得

select index_name, table_owner, table_name, status from user_indexes

インデックスモニタリング

使われていないインデックスを監視する仕組み

  • モニタリング有効化
ALTER INDEX 索引名 MONITORING USAGE;
  • モニタリング状況確認
select * from v$object_usage;
  • モニタリング解除
ALTER INDEX 索引名 NOMONITORING USAGE;

トリガ

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; 

テーブル

テーブル一覧

select table_name from user_tables;

列定義変更

alter table テーブル名 MODIFY ( 列名 VARCHAR2(100));
  • 実行後はdescribeで確認
desc テーブル名

シーケンス

基礎知識

RACの場合は各ノードで通信が発生するため、キャッシュを設定して増分値も挙げておくこと

シーケンス作成

  • オプションも何も指定しないで作成
create sequence シーケンス名
  • 初期値0で1ずつ増えて、最大値が1万のシーケンス作成
create sequence シーケンス名 

  increment by 1   start with 0   maxvalue 10000

シーケンス一覧取得(定義の確認も可能)

select sequence_name from user_sequences;

現在の値を確認

  • 次に降りだされる値(キャッシュを考慮しないので下より大きめの数値が出る)
select sequence_name, last_number from user_sequences;
  • トランザクション中で利用(こっちが正確のようだ)
SELECT シーケンス名.CURRVAL FROM DUAL 

次の値を確認

SELECT シーケンス名.NEXTVAL FROM DUAL 

これを実行するとシーケンスが+されるので注意!ロールバックも効かない

インデックス

あるテーブルに存在するインデックスの確認。例:

select index_name ,table_name ,column_name from user_ind_columns where table_name = 'EMP';

プロシージャ実行

sqlplusからプロシージャ実行

execute プロシージャ名

プロシージャ定義内容確認

select text from user_source where NAME = 'プロシージャ名' order by line

プロシージャのDBMS_OUTPUTをSQLplus出力する。

set serveroutput onを実施する必要がある。

SQL> set serveroutput on
SQL> begin
  2  dbms_output.put_line('test message');
  3  end;
  4  /
test message

表領域関連

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

表領域の説明

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

表領域に関する操作

select TABLE_NAME, TABLESPACE_NAME from user_tables自分の所有するテーブルの利用している表領域
  • 以下のページに役立つ情報が満載

http://centromezzo.sakura.ne.jp/wiki/?ORACLE%2FTABLESPACE

エクスポート/インポート

  • テーブル指定
exp 接続文字列 file=好きなファイル名 tables=対象テーブル名 [statistics=none]

最後のオプションはWindowsのコマンドから実行するときによく出る「不審な統計をエクスポートしています」のエラー回避の為。

  • 複数テーブル指定
tables=TABLE1,TABLE2

インポート

imp接続文字列 file=好きなファイル名  tables=TABLE_A,TABLE_B IGNORE=Y [FROMUSER=EXPUSER] [TOUSER=IMPUSER]

大量データを投入するときはダイレクトパスインサートの利用を検討する。

セッション KILl

alter session kill session (254,18520)
Counter: 8484, today: 1, yesterday: 1

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-08-12 (月) 15:33:57