筆者はなんちゃってDBAをしています。
個人の感想ですが、開発者に任せてもいいかなと思っていたことを、メモとして残したいと思います。
開発時にDBスキーマとかテーブル定義などデータ環境は、DBAが作ってくれますよね。
複数人での開発の場合、使うテーブルが重複して窮屈だったりします。
そのような時、テスト用の個人スキーマを準備してくれる現場もあると思います。
今回はあくまでも、そのような環境でかつテストDBを前提に記述します。
※勝手にやると怒られるかも知れないため、ルールが不明なときはDBAに確認しましょう。
DBスキーマのコピーは、データパンプ(datapump)
を使うのが一般的だとおもいますが、DBサーバーに入れないためDBAにいちいちお願いするのが面倒だったりしませんか。
そんな時、PC
からインポート(imp)/エクスポート(exp)
を使ってスキーマをコピーするとこができます。
※PCにオラクルのクライアントがインストールされている前提です。
ここで利用するツールは、下記です。
・sqlplus
・exp(エクスポート)
・imp(インポート)
#手順(sqlplus)#
まずは、個人用スキーマを準備します。
コマンドプロンプト
で実行していきます。
①SYSTEM権限でログイン
sqlplusにログインします。
sqlplus system/[パスワード]@[接続先名]
set linesize 1000 //おまじない
set pagesize 0 //おまじない
show user //おまじない
②接続確認
これからドロップする個人用のスキーマに接続している人がいないか確認します。接続中だとスキーマをドロップできないため接続を切ってもらいます。
表示されている情報で誰がつないでいるかわかります。ほとんどの場合、一人事故です。自分がアプリ立ち上げていたり、参照ツールが接続していたりします。
SELECT USERNAME,OSUSER,MACHINE,PROGRAM,status FROM V$SESSION where username = '[個人スキーマ名]';
・強制的に接続を切るには、kill
コマンドを使います。
select sid, serial#, username, program, status from v$session where username = '[個人スキーマ名]';
//SIDとシリアルNoを確認します。列名は、(sid, serial#)です。
alter system kill session '404, 116'; //(sid, serial#)をセットして実行します。
③スキーマのドロップ(削除)
個人用のスキーマを削除します。
初めて作る場合は、削除対象がないので飛ばします。
drop user [個人スキーマ名] cascade ;
④スキーマの作成
個人用のスキーマを作成します。
CREATE USER [個人スキーマ名] IDENTIFIED BY [パスワード(個人スキーマ接続用)]
DEFAULT TABLESPACE "DATA"
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON "DATA";
⑤権限付与
個人スキーマは、何ができるかを権限付与します。テスト用なので色々つけておきます。
GRANT
ALTER SESSION,
CREATE SESSION,
SELECT ANY SEQUENCE,
RESOURCE,
EXECUTE ANY PROCEDURE,
DBA,
CREATE TABLE,
CREATE MATERIALIZED VIEW
TO
[個人スキーマ名];
ここまでで、個人用スキーマの準備ができました。
exitでsqlplusを終了します。
#手順(インポート/エクスポート)#
sqlplusは、終了しましたか。
ここからが、コピーの開始です。
コマンドプロンプトでインポート(imp)/エクスポート(exp)
をします。
①エクスポート(exp)
データをPC上にエクスポート
する。
exp system/[パスワード]@[接続先] file=[PC上のパス]\[エクスポートファイル名].dmp owner=[コピー元のスキーマ名] log=[PC上のパス]\[エクスポートログファイル名].log
②インポート(imp)
エクスポート
したファイルを参照して、個人用スキーマにインポート
する。
imp system/[パスワード]@[接続先] file=[PC上のパス]\[エクスポートファイル名].dmp fromuser=[コピー元のスキーマ名] touser=[個人スキーマ名] ignore=y log=[PC上のパス]\[インポートログファイル名].log
これでコピー元のスキーマから、個人スキーマにレコードも含めてまるまるコピーできました。
できたけどアプリの実行中にエラーが出るっていう場合は、権限不足のことが多かったです。
oracleは何をするにも権限が必要なのでDBAに確認しましょう。
以上ですが、参考になれば幸いです。