開発用ユーザ、表領域、ロール、プロファイルの作成
DB作成からの続き
http://d.hatena.ne.jp/hagino_3000/20071116/1195232128
開発用データベースを作成した所から
開発者用の共用DBにユーザを作成する所まで
一応セキュリティに配慮しておく
アドバイザの言うとおりに本番でありえない危険な権限は剥奪しておく。
必要な場合はユーザ単位で権限付与してやればOK。
revoke execute on UTL_FILE from public; revoke execute on UTL_HTTP from public; revoke execute on UTL_SMTP from public; revoke execute on DBMS_RANDOM from public; revoke execute on UTL_TCP from public;
表領域の作成
開発用なので適当に、AUTOEXTENTにしておくと楽、
空きディスク容量が少ない場合はしないけど。
ここでは表領域名をPROJECTX_DEVとしています。
create tablespace "PROJECTX_DEV" logging datafile 'D:\ORACLE\ORADATA\[SID]\PROJECTX_DIV.ora' size 500M extent management local segment space management AUTO /
ユーザの作成
デフォルト表領域は上で作った奴を指定する。
ユーザ名:yukiho、パスワード:imas の例
create user YUKIHO identified by IMAS default tablespace PROJECTX_DEV temporary tablespace TEMP / grant UNLIMITED TABLESPACE to yukiho /
クォータの指定が面倒なのでUNLIMITED TABLESPACEシステム権限を付与してます。
ロール作成
スキーマを増やすときに楽なので、権限は直接ユーザに付与しないで
ロールに付与する。*1
create role "DEVELOPER" / -- 必要なシステム権限を付与 grant CREATE SESSION to DEVELOPER; grant CREATE CLUSTER to DEVELOPER; grant CREATE INDEXTYPE to DEVELOPER; grant CREATE OPERATOR to DEVELOPER; grant CREATE PROCEDURE to DEVELOPER; grant CREATE SEQUENCE to DEVELOPER; grant CREATE TABLE to DEVELOPER; grant CREATE TRIGGER to DEVELOPER; grant CREATE TYPE to DEVELOPER; grant SELECT ANY DICTIONARY to DEVELOPER; -- 作ったユーザにロールを付与する。 grant DEVELOPER to YUKIHO /
プロファイルの作成
開発中は途方も無いクエリが実行されることもしばしばあるので
リソースリミットをかけておくと安全。
他のプロジェクトと開発サーバを共用してたりする場合は特に。*2
プロファイルのリソース制限を有効化するために、パラメータを変更してやる。
alter system set resource_limit=true scope=both /
プロファイルを作成してユーザに割り当て
CREATE PROFILE "DEVELOPER" LIMIT CPU_PER_SESSION 36000 CPU_PER_CALL 6000 -- CPU時間60秒以上で中断 CONNECT_TIME 720 -- 接続12時間で切断 IDLE_TIME 60 -- 1時間のアイドルで切断 SESSIONS_PER_USER UNLIMITED -- 共用ユーザなので制限無し LOGICAL_READS_PER_SESSION 5000000 -- データブロック単位 LOGICAL_READS_PER_CALL 1000000 -- データブロック単位 PRIVATE_SGA UNLIMITED COMPOSITE_LIMIT UNLIMITED / alter user YUKIHO profile DEVELOPER /
CONNECT_TIMEとIDOLE_TIMEはゾンビセッションを夜間に殺すための設定です。
勤務時間に合わせて設定しておくのが望ましいかと。
LOGICAL_READS_PER_CALLは結合条件を書き忘れて巨大なテーブルを検索した場合(うっかりクロスジョイン)に発動してくれればいいなぁ、という気持ちで。
設定値がTEMP表領域より大きいと、先にTEMP表領域を食いつぶしてしまってエラーになります。