忍者ブログ
忘れっぽい開発者の備忘録。基本的に自分用メモです。
[1] [2] [3] [4] [5] [6
2017.12.18,Mon
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2011.02.01,Tue
■概要
テーブルの列を追加する。
 
■構文
ALTER TABLE テーブル名
ADD ( 列名  NUMBER(指定バイト数) DEFAULT 0 NOT NULL
         ,  列名 VARCHAR(指定バイト数)
          ); 

■使用例
※使用テーブル
product_mst
id product price
1 書籍 1000
2 CD 3000

※目的
product_mstにinsert_date(日付型)とflg(数値型)とmemo(文字型)を追加する。

※SQL
ALTER TABLE product_mst
ADD ( insert_date DATE 
         , flg NUMBER(1) DEFAULT NOT NULL
         ,  memo VARCHAR(256)
          ); 







※結果
product_mst
id product price insert_date flg memo
1 書籍 1000 ( NULL ) 0 ( NULL )
2 CD 3000  ( NULL ) 0 ( NULL )
 
基本的にはCREATE文の列指定部分とあんまり変わらない感じです。
PR
2011.01.28,Fri
■概要
データベースのバックアップを取る。
データの量がかなり多い場合ならこちらの方がおすすめ。

■構文
※exp
# exp user/password file=exp.dmp TABLES=(table1);

※expパラメータ
FULL データベース全てをexpする
全体をexpしたくなければ指定しない。
(例)# exp A/B@C file=exp.dmp FULL=y
user/password ユーザIDとパスワード。
DBリンクを付けることも可能。
(例)# exp A/B@C file=exp.dmp FULL=y;
tables expするテーブル名を指定する。
複数指定させることも可能。
(例)# exp tables=table1;
      # exp tables=(table1,table2);
query 条件が指定できる。
その際は条件を「\"」で囲まなければならない。 (制御文字ではなく通常の文字として認識させるため)
(例)# exp tables=table1 query=\" rownum < 5 \";
file 出力するdumpファイル名称を指定。 (例)# exp user/password file=exp.dmp TABLES=(table1);

 まだ色々ありますが、とりあえず必要なのはこれぐらい?

imp
expコマンドで出力したexp.dmpをインポートする。
# imp user/password file=exp.dmp

※impパラメータ
だいたい上のexpパラメータと同じ。

■注意点
上位バージョンでexpしたdumpファイルは下位バージョンではimp出来ない。
下位バージョンでexpしたdumpファイルは同バージョン以上でimp出来る。
ということになっていますので、実行環境は気をつけましょう。

私は上位バージョンからDBリンクを使用して下位バージョンにアクセスし、
そこからダンプしようとして怒られました。

ちなみに、その怒られた内容↓
EXP-00056: Oracleエラー942が発生しました。
ORA-00942: 表またはビューが存在しません。
EXP-00000: エラーが発生したためエクスポートを終了します。

2011.01.28,Fri
■Oracleのテーブルサイズ使用量を確認
あくまで概算レベル。らしい。だからあまり使えないかもしれないです。
 明確に出すには面倒くさい計算を自分でしないといけなさそうです。

SELECT segment_name
              , SUM(bytes)
FROM user_segments
GROUP BY segment_name
;
 
ちなみにですが、このままだと大量にSELECTされます。
使用量を知りたいテーブル名称をWHERE句に入れるのもいいかもしれません。
2011.01.28,Fri
 ■セッション情報を取得
 
SELECT sid
     , serial#
     , username
     , machine
     , osuser
     , program
     , status
     , 'alter system kill session ''' || sid || ',' || serial# || ''';' AS id
FROM v$session
WHERE username IS NOT NULL
;
 
■セッションを削除する
上記SQLの取得結果項目「id」をキーにして実行する。 
「id」が'121,19456'だった場合
 
alter system kill session '121,19456';
 
削除を実行する場合は、大事なセッションを消さないように注意してください。
2011.01.28,Fri
■概要
テーブルAとテーブルBを結合条件で結合させ、テーブルAにテーブルBのレコードがなければINSERT、
レコードがあればUPDATEを行う。

■構文
MERGE INTO テーブルA
USING テーブルB ON ( 結合条件 )
WHEN MATCHED THEN
UPDATE SET 項目
WHEN NOT MATCHED THEN
INSERT ( 項目)
VALUES ( 項目)
;










■使用例
※使用テーブル
product_mst
id product price
1 書籍 1000
2 CD 3000
update_mst
updt_id updt_product updt_price
8 書籍 1500
9 DVD 5000

※目的
product_mstとupdate_mstを結合させ、update_mstに存在するレコードがproduct_mstに存在しない場合、product_mstにデータを挿入し、product_mstに存在する場合は更新する。

※SQL
MERGE INTO product_mst AS a
USING update_mst AS ON ( a.product = b.updt_product )
WHEN MATCHED THEN
UPDATE SET a.price = b.updt_price
WHEN NOT MATCHED THEN
INSERT ( a.id, a.product, a.price )
VALUES ( b.updt_id, a.updt_product, a.updt_price )
;










※結果
product_mst
id product price
1 書籍 1500
2 CD 3000
9 DVD 5000
update_mst
updt_id updt_product updt_price
8 書籍 1500
9 DVD 5000


■注意事項

・MERGE文はoracle9iから組み込まれたoracle独自のSQL文のため、バグが多い。
少なくともoracle9i環境でやるのはやめた方が良いかも。
・MERGE文でUPDATEできるのは、ON句で参照していない列のみ
※キーが更新されないため 
カレンダー
11 2017/12 01
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
ブログ内検索
Template by mavericyard*
Powered by "Samurai Factory"
忍者ブログ [PR]