2009年12月20日日曜日

[SQLServer]基礎強化メモ - データ整合性

制約や参照整合性についてのメモ。
FOREIGN KEY制約がOracleと大きく違うような気がする。
(FOREIGN KEY制約とCHECK制約は業務で使った事ない・・・)

・PRIMARY KEY
 内部インデックスが作成される。
 NULLは許可しない。
・FOREIGN KEY
 参照キー変更時の挙動をREFERENCES句で設定できる。
  削除/更新時(ON DELETE / ON UPDATE)
  →何もしない/外部キー変更/NULL設定/デフォルト値設定
   (NO ACTION / CASCADE / SET NULL / SET DEFAULT)
 
・UNIQUE制約
 内部インデックスが作成される。
 NULLは1件のみ許可する。
 VARCHAR(MAX)とスパース列には設定できない。
・NOT NULL
・DEFAULT
・CHECK
 固定値以外に、同一テーブルの別の列値に制限することもできる(組織マスタ等の自己参照テーブルなどで使用)

2009年11月18日水曜日

[SQLServer]基礎強化メモ - テーブル定義

テーブル作成についてのメモ。
一般的なテーブルは特筆すべき点なし。
一時テーブルはOracleだと[create grobal temporary table]だけど同一セッションからしか参照できなかった気がする。
他のセッションから参照できるのはSQLServer独自かもしれない。

▼一般的なテーブルの定義文
列のデフォルトはNULL。
列レベルで、インスタンスに設定された照合順序(COLLATE)を上書きすることができる。
照合順序の設定は「列 > データベース > インスタンス」の順に優先する。
--------------------------------------
<文法>
CREATE TABLE スキーマ名.テーブル名(
列名1 データ型(NULL | NOT NULL) (AS 列別名)
...
)
--------------------------------------


▼一時テーブル
一時テーブルはtempdbに作成される。
 ・ローカル一時テーブル
  →作成したセッションのみで使用できる。
 ・グローバル一時テーブル
  →すべてのセッションから参照できる。
   →グローバル一時テーブルを作成したセッションが終了すると、
    グローバル一時テーブルは消滅する。
--------------------------------------
<文法>
[ローカル一時テーブル]
CREATE TABLE #スキーマ名.テーブル名(
列名1 データ型(NULL | NOT NULL) (AS 列別名)
...
)

[グローバル一時テーブル]
CREATE TABLE ##スキーマ名.テーブル名(
列名1 データ型(NULL | NOT NULL) (AS 列別名)
...
)
--------------------------------------

2009年7月7日火曜日

[DB2]とりあえず触ってみる - ネットワーク接続に変更

Oracleで言うところのローカル接続→SQL*NET接続への変更

▼サーバの設定確認
●DB2ポート番号の確認
コマンド・ウィンドウにて以下のコマンドを発行
------------------------------------------
[Usage]
db2 get dbm cfg | find "SVCENAME"
------------------------------------------
->「TCP/IP サービス名」部分に表示された値がサービス名。

------------------------------------------
TCP/IP サービス名 (SVCENAME) = db2c_DB2
SSL サービス名 (SSL_SVCENAME) =
------------------------------------------
->この場合、db2c_DB2がサービス名となる。

「C:\WINDOWS\system32\drivers\etc\services」を開いてサービス名のポート番号を確認。
------------------------------------------
db2c_DB2 50000/tcp
------------------------------------------
->50000がポート番号であることを確認。



●DB2COMMレジストリ変数の確認
コマンド・ウィンドウにて以下のコマンドを発行
------------------------------------------
DB2COMM=TCPIP
------------------------------------------
->TCPIPと表示されればOK。



▼クライアントとしての設定
サーバに接続するためには、ノード情報を設定する必要がある。
ノードには、サーバのIPアドレスとポート番号を設定する。
ノードを作成するには、CATALOGコマンドを使用する。
●ノードの作成
コマンド・ウィンドウにて以下のコマンドを発行する。
------------------------------------------
[Usage]
db2 CATALOG tcpip NODE remote server
------------------------------------------
[Sample]
db2 CATALOG tcpip NODE MyNode remote 127.0.0.0 server 50000
------------------------------------------



●DBのカタログ
作成したノードを「カタログ」することで実際に使用可能になる。
------------------------------------------
[Usage]
db2 CATALOG DB AS AT NODE
------------------------------------------
[Sample]
db2 CATALOG DB Sample AS MyDbSample AT NODE MyNode
------------------------------------------

カタログ情報は以下のコマンドで確認することができる。
------------------------------------------
[Usage]
db2 list db directory
------------------------------------------



●カタログの削除
以下のコマンドで作成したカタログを削除できる。
・データベース情報の削除
------------------------------------------
[Usage]
db2 uncatalog database
------------------------------------------
[Sample]
db2 uncatalog database MyDbSample
------------------------------------------

・ノード情報の削除
------------------------------------------
[Usage]
db2 uncatalog node
------------------------------------------
[Sample]
db2 uncatalog node MyNode
------------------------------------------

2009年7月4日土曜日

[DB2]とりあえず触ってみる - 各種コマンドメモ

<各種コマンドメモ>
●コマンドを実行するためのツール
・コマンド・ウィンドウ
Windowsスタートメニューから起動する。
コマンドプロンプトから直接起動できないのは仕様らしい(ホント?)

・CLP(コマンド行プロセッサー)
コマンド・ウィンドウから「db2」コマンドでCLP起動となる。



#以下はコマンド・ウィンドウで実行する場合のコマンドです。
CLPで実行する場合、先頭の「db2」を削除してください。
●DB2コマンド一覧(SQLは含まない)
------------------------------------------
[Usage]
db2 ?
------------------------------------------
->Oracleで言うところのSQL*PLUSコマンドと同じっぽい



●データベースへの接続
------------------------------------------
[Usage]
db2 connect to [user using ]
------------------------------------------
->user以下を省略すると、OS認証となる。



●データベース接続状況の確認
------------------------------------------
[Usage]
db2 connect
------------------------------------------



●データベースからの切断
------------------------------------------
[Usage]
db2 connect reset
or
db2 terminate
------------------------------------------
->この2つにニュアンスの違いってあるのかなあ?
[答え]http://www-01.ibm.com/support/docview.wss?uid=std305ef4bde22d56168492575060035a024



●オートコミット解除
#デフォルトでオートコミットはON・・・恐ろしい子

・その1
オートコミット=オフでコマンド行プロセッサーを起動
------------------------------------------
[Usage]
db2 +c
------------------------------------------

・その2
SQL毎にオン/オフを切り替えて実行
------------------------------------------
[Usage]
db2 +c
------------------------------------------
->このへんの環境まわりの設定は「db2 list command」コマンドを叩いてみよう



●オートコミット状態の確認
------------------------------------------
[Usage]
db2 list command options
------------------------------------------
-> 「-c 自動コミット (ON|OFF)」で確認。



●テーブル一覧の取得
------------------------------------------
[Usage]
db2 list tables
------------------------------------------
->このへんの一覧表示系コマンドは「db2 ? list」コマンドを叩いてみよう



●テーブル定義の表示
------------------------------------------
[Usage]
db2 describe table [show detail]
------------------------------------------
-> show detailをつけると、より詳しい情報が表示される。



●データベースの作成
------------------------------------------
[Usage]
db2 create database on using codeset territory collate using
------------------------------------------
->詳しいことはこのへん参照
http://www.atmarkit.co.jp/flinux/rensai/db2_02/db2_02b.html



●エラーコードの詳細確認
------------------------------------------
[Usage]
db2 ?
------------------------------------------




●DB2コマンドの文法確認
------------------------------------------
[Usage]
db2 ?
------------------------------------------

2009年7月2日木曜日

[DB2]Express-Cインストールメモ

<はじめに>
・DB/2のデも知らないので学習用に導入した。

<導入した環境>
・Windows-32bit(XP Professional)

<手順>
1.前提条件を確認
http://www-06.ibm.com/software/jp/data/db2/v9/express-c/

2.ダウンロード
ダウンロードしたバージョンは
「1.DB2 Express-C for Windows Version 9.7 」
ちなみに要会員登録。

3.インストール
setup.exeを起動するとウィザードが立ち上がるのでポチペチ

完了。接続テストはまた今度。

2009年2月25日水曜日

[Oracle][Materialized View]元表メンテナンス時のTIPS

MLOGが付いている元表をメンテナンスする際に、2者の関係を一時的に切り離すことができる。元表に対する大量データ投入や、定義変更時に便利。
※ただし、メンテナンス完了後、Materialized Viewを完全リフレッシュする必要があるため注意。

[実装方法]
・以下のプロシージャでメンテナンス開始を宣言する。
---------------------------------------------------
DBMS_MVIEW.BEGIN_TABLE_REORGANIZATION (
tabowner IN VARCHAR2,
tabname IN VARCHAR2);
---------------------------------------------------
tabowner
再編成する表の所有者。

tabname
再編成する表の名前。


・以下のプロシージャでメンテナンス終了を宣言する。
---------------------------------------------------
DBMS_MVIEW.END_TABLE_REORGANIZATION (
tabowner IN VARCHAR2,
tabname IN VARCHAR2);
---------------------------------------------------
パラメータ 説明
tabowner
再編成する表の所有者。

tabname
再編成する表の名前。


[制限]
・メンテナンス完了後、Materialized Viewを完全リフレッシュする必要がある。
・メンテナンスを開始したセッションは、完了まで対象テーブルに対する表ロック状態を取得する。