SQL Developerは、Oracleが無償で提供しているDBアクセスツール。
Javaで作られているので、実行時にはJDKが必要。
|
|
|
|
|
Oracle11gにはSQL Developer 1.1.3が付いている。
(Oracle11gではウィンドウアプリ版のSQL*PlusやSQL*Plus Worksheetが廃止になって、代わりにSQL Developerが追加された模様)
Oracle11gクライアントをインストールする際に「管理者」か「ランタイム」を選択すると、SQL Developerもインストールされる。
起動は以下のメニューから行う。
Windowsの「スタート」→「すぺてのプログラム(P)」→「Oracle - OraClient11g_home1」→「アプリケーション開発」→「SQL Developer」
Oracleのサイトからダウンロードすることも出来る。
ダウンロードしてきたzipファイルを解凍するだけ。(インストーラーは無い)
解凍したディレクトリー内にあるsqldeveloper.exeをそのまま実行すれば起動する。
久しぶりに新バージョンをダウンロードしようとしたら、以前使ってたアカウントでは「ログインが無効です」とか出てサインオンできなかった…。[2011-01-14]
パスワードをメールで通知してもらったら、覚えていたのと同じものだったのに、なぜだ。
仕方ないので新アカウントを登録したが、アカウントはメールアドレスになったようだ。
また、パスワードは3種類以上の文字の組み合わせ(英大文字・英小文字・数字など)でないと駄目なようだ。
(エラーメッセージを見てもそんなことは分からない。不便すぎる!)
初回実行時に、java.exeの場所を指定するダイアログが開く。
インストールされているJDKのjava.exeを指定する。
例: C:\Program Files\Java\jdk1.6.0\bin\java.exe
バージョン2.1.1のQL Developerを実行したら、エラーのダイアログが出た。[2011-01-14]
メッセージは「Unable to create an instance of the Java Virtual Machine Located at path:
C:\Program Files\Java\jdk1.6.0_22\jre\bin\client\jvm.dll」。
なんでも、起動時のJavaVMのヒープが足りなくてこのようなエラーが出るらしい。
(インストールしたディレクトリーの直下にあるsqldeveloper.exeでなく、「インストール場所\sqldeveloper\bin」の下にあるsqldeveloper.exeをコマンドプロンプトから実行するとエラー原因が表示される)
「インストール場所\sqldeveloper\ide\bin\ide.conf」というファイルのAddVMOptionを640Mから512Mくらいに下げると起動できる。
#AddVMOption -Xmx640M AddVMOption -Xmx512M AddVMOption -Xms128M
参考: seraphyさんのOracle SQL Developer が起動できない場合の設定変更
SQL Developerを起動すると、下部の「Logging Page」にエラーメッセージが出ていて気になる。[2008-12-15]
Level | Sequence | Elapsed | Source | Message |
---|---|---|---|---|
× | 96 | 0 | o.jdbc.driver.OracleDriver | Error while registering Oracle JDBC Diagnosability MBean. |
これが出ていても動作上特に害は無いようだが。
これは、JDBCドライバーのバージョンがちょっと古い為に起きているものらしい。JDBCドライバーだけ別途ダウンロードしてくれば解消する。
参考: OTN Discussion ForumsのError starting SQL Developer
メニューバーの「Tools」→「Preferences」で「Preferences(選択)」ダイアログが開く。
左ツリーから選択したい項目を選び、右ペインで設定を変更する。
左ツリー | 右ペイン項目 | 設定内容 | 更新日 | |
---|---|---|---|---|
Environment | Look and Feel | 「Windows」にすると、ウィンドウの外観が変わる(笑) (SQL Developerの再起動が必要) きっとSwingのルック&フィール機能を使用しているのだろう。 |
2008-11-30 | |
Database | NLS Parameters | Date Format | 「YYYY/MM/DD HH24:MI:SS」にしておくと、 Date型の項目を表示した際に「2008/12/14 12:34:56」の形式で表示される。 |
2008-12-14 |
Database | ObjectViewer Parameters | Automatically Freeze Object Viewer Windows | チェックを入れると、テーブル毎に新しいタブ(シート)が開くようになる。 (個々のタブで「Freeze View」を有効にするのと同じ) |
2008-12-14 |
まず、データベースへ接続(ログイン)する必要がある。
以下の方法で「New / Select Database Connection」ダイアログを開き、設定する。
設定名 | 内容 | 例 |
---|---|---|
Connection Name | コネクションの名前。適当に付けてよい。 | ora92-scott |
Username | 接続するユーザー名 | scott sys as sysdba |
Password | パスワード | |
Role | defaultまたはSYSDBA | default |
Connection Type | とりあえずBasicで。 | Basic |
Hostname | 接続先のIPアドレス | 192.168.x.y |
Port | 接続先のポート | 1521 |
SID | 接続するSID | ora92 |
sysで接続したい場合、以下の様に設定する。
「Test」ボタンを押すと接続テストを行う(失敗するとエラーメッセージが表示される)。
「Connect」ボタンを押すと接続する。
既存の接続設定を確認・変更したい場合は、Connectionsツリー内のコネクション名を右クリックして「Properties」。
既存の接続設定をコピーして新しい設定を作りたい場合(ユーザーだけ変えるとか)は、以下のようにする。[2008-12-16]
設定した接続情報(コネクション名)がツリー構造で表示される。
Connectionsツリーを閉じてしまった場合は、メニューバーの「View」→「Connections」で復活できる。
「Connections」ビュー内のコネクション名を右クリックして「Connect」すると、DBに接続する。(ワークシートが表示される。)
「Connections」ビュー内のコネクション名を右クリックして「Open SQL Worksheet(S)」する、もしくはツールバーのボタンを押すと、ワークシートがその都度増える。[2008-12-14]
各接続情報の下には、各種オブジェクトの一覧が出る。[2008-12-16]
オブジェクト種類 | 内容 | 関連 |
---|---|---|
Tables | テーブル | user_tables |
Views | ビュー | user_views |
Indexes | インデックス(索引) | user_indexes |
Packages | パッケージ | |
Procedures | プロシージャー | user_procedures |
Functions | ファンクション(関数) | user_procedures |
Triggers | トリガー | user_triggers |
Types | ユーザー定義型 | user_types |
Sequences | シーケンス(順序) | user_sequences |
Materialized Views Materialized Views Logs |
マテリアライズドビュー マテリアライズドビューログ |
user_mviews |
Synonyms Public Synonyms |
シノニム | user_synonyms |
Database Links Public Database Links |
DBリンク | user_db_links |
Directories | ||
XML Schemas | ||
Other Users | 他ユーザーのオブジェクト | all_users |
それぞれのオブジェクト種類名(テーブルやビュー等)の部分を右クリックすると、その種類に応じたメニューが表示される。
新規オブジェクトの作成の他、一覧表示されるオブジェクトを絞り込むフィルター機能(Apply Filter)が共通で存在する。
(このフィルターは、SQL Developerを終了して次回起動した場合にも保存されている)
また、テーブル等の一覧が開いている時にテーブル名を1文字ずつキーボードから入力することにより、(テーブル名の先頭が合致している、)一覧上のそのテーブルに移動する(その行が選択される)。[2009-01-19]
ただし、移動する度にそのテーブルのシートが開いてしまうのでちょっと不便かも…。
(Freeze Viewでテーブル毎にシートを表示するように指定している場合、シートがぽこぽこ増えてしまう!)
→フィルターでなく、オブジェクト名(の一部)を指定してオブジェクトを探す方法
(自分が所有者である)テーブル一覧が表示されるツリー。[2008-12-16]
個々のテーブル名をクリック(あるいはダブルクリック)することでテーブルのシート( オブジェクトビューアーウィンドウ)が開き、データを見たりテーブル構造を変更したりすることが出来る。
個々のテーブル名を右クリックするとメニューが出てテーブル構造や権限等を変更することが出来る。
変更する際には その変更の為のSQLも表示されるので、確認できて便利。
メニュー | 説明 | |
---|---|---|
Edit | 「Edit Table」ダイアログが開く。 テーブル名を変えたり項目を追加削除したりプライマリキーを変更したり、それらを行うDDLを生成したり出来る。 |
|
Table(T) | Rename | テーブル名を変更する。 |
Copy | テーブルのデータを他のテーブル(新しい名前を付ける)へコピーする。(実態はCREATE TABLE〜SELECT) 他ユーザーへのコピーも可能だが、その場合は自分にCREATE ANY TABLE権限が必要。 →権限を付与する方法 |
|
Drop | テーブルを削除(DROP)する。 | |
Truncate | テーブル内のデータを削除(TRUNCATE)する。 | |
Lock | ||
Comment | ||
Parallel | ||
Logging | ||
No Parallel | ||
Count Rows | テーブル内のデータ数(count(*))を表示する。 | |
Column(C) | Comment | |
Add | 項目(列)を追加する。 | |
Drop | 項目(列)を削除する。 | |
Normalize | ||
Constraint(A) | Enable Related Foreign Keys | |
Disable Related Foreign Keys | ||
Enable all | そのテーブルに付いている全ての制約を有効にする。(PL/SQL使用) | |
Disable all | そのテーブルに付いている全ての制約を無効にする。(PL/SQL使用) | |
Enable Single | 制約を選択し、その制約を有効にする。 | |
Disable Single | 制約を選択し、その制約を無効にする。 | |
Drop | 制約を削除する。 | |
Add Check | チェック制約を追加する。 | |
Add Primary Key | プライマリキー制約を追加する。 | |
Add Foreign Key | 外部キー制約を追加する。 | |
Add Unique | ユニークキー制約を追加する。 | |
Index(I) | Create Index | インデックス(索引)を作成する。 |
Drop | インデックス(索引)を削除する。 | |
Rebuild | ||
Privileges(P) | Grant | 他ユーザーに対し、該当テーブルのアクセス権限を付与する。 ただし自分に“権限を付与する”権限が必要。 sysユーザーのOther UsersツリーのTablesからテーブルを指定し、そこで権限を付与する方がいいかも。 |
Revoke | 他ユーザーから、該当テーブルのアクセス権限を削除する。 | |
Statistics(S) | Validate Structure | |
Gather Statistics | ||
Storage(O) | Shrink Table | |
Row Movement | ||
Compress | ||
No Compress | ||
Move | ||
Move Tablespace | ||
Cache | ||
No Cache | ||
Trigger(R) | Create | |
Create(PK from Sequence) | ||
Enable All | ||
Disable All | ||
Disable Single | ||
Enable Single | ||
Drop | ||
Import Data(D) | Excel | Excelファイルからデータをインポートする。 |
Export Data(X) | データをエクスポートする。出力先はファイルやクリップボード。→全オブジェクトの一括エクスポート | |
TEXT | データをTSV(タブ区切り)形式でエクスポートする。拡張子はtxt | |
CSV | データをCSV(カンマ区切り)形式でエクスポートする。拡張子はcsv | |
INSERT | データをINSERT文の形式でエクスポートする。拡張子はsql | |
LOADER | データをSQL*Loaderのコントロールファイル形式(SQL*Loaderでロードできる)でエクスポートする。拡張子はldr | |
XML | データをXML形式でエクスポートする。拡張子はxml | |
HTML | データをHTML形式(table・tr・tdタグを使ってブラウザーで表示できる形)でエクスポートする。拡張子はhtm | |
XLS | データをExcelファイルにエクスポートする。拡張子はxls |
シノニム一覧が表示されるツリー。[2008-12-16]
USER_XXXやV$XXXといったテーブル(ビュー)はpublic synonymで作られているので、このツリーで参照する。
(パブリックシノニムは無茶苦茶数が多いので、フィルターを上手く使おう)
(自分以外の)ユーザー一覧が表示されるツリー。[2008-12-16]
sysユーザーなら、各ユーザーのパスワード変更・アカウントロック解除や権限・ロールを確認・変更することが出来る。
例えばあるユーザーにCREATE ANY TABLE権限(他ユーザーのテーブルも作る事が出来る)を与えるには、以下のようにする。
自分以外のユーザーが保持しているオブジェクト(テーブル等)は、そのテーブルを参照できる権限(SELECT等)が無いと一覧に表示されない。
そのテーブルに対するSELECT権限があれば、テーブル名を右クリックして「Table(T)」→「Copy」により、テーブルをコピーしてくることが出来る。
→テーブルの権限を付与する方法
接続すると、SQL文やコマンドが実行できるようになる。
操作 | キー | 説明 |
---|---|---|
Enter SQL Statement | SQL文やコマンドを入力する。その後、F9やF5で実行する。 | |
Execute Statement | F9 | SQL文を実行する。SQL文は1つだけ書ける。末尾のセミコロンは不要。 SELECT文の場合、実行結果はResultsに表形式で表示される。 |
Run Script | F5 | SQL文やコマンドを実行する。複数書くことが出来る。 実行結果はScript Outputにテキストで表示される。 |
Commit | F11 | コミットする。 |
Rollback | F12 | ロールバックする。 |
Cancel | Ctrl-Q | たぶん、実行が長いSQLを途中でキャンセルする。 |
SQL History | F8 | 今まで実行したSQLの履歴を一覧表示するダイアログを開く。 |
Execute Explain Plan | F6 | SQLの実行計画をExplainに表示する。 |
Autotrace | F10 | SQLの実行状態(?)をAutotraceに表示する。SELECT_CATALOG_ROLEが必要。 |
Clear | Ctrl-D | 書かれているSQL・コマンドを消去する。 |
シート | 内容 |
---|---|
Results | 実行(F9)されたSELECT文の結果を表形式で表示する。 |
Script Output | 実行(F5)されたスクリプトの結果を表示する。 |
Explain | 実行計画を表示する。 |
Autotrace | SQLの実行状態?を表示する。 |
DBMS Output | DBMS_OUTPUT.put_line()の出力有無設定。 |
OWA Output |
SQL文やコマンド等の入力エリア。ここに入力した後、F9やF5で実行する。
SQL*Plusのdescコマンドやshow
user等も実行できる。
しかしSQL*Plusの全コマンドが実行できるわけでもないらしい。
Autotraceを実行しようと思ったら、SELECT_CATALOG_ROLE権限を付与する必要がある。
権限が無いと、以下のようなエラーが発生する。
Failed to access V$MYSTAT. Please obtain read catalog privilege from your database administrator: "grant SELECT_CATALOG_ROLE to SCOTT"
DBMS_OUTPUT.put_line()の出力指定を行う。
SQL*PlusでDBMS_OUTPUT.put_line()の実行結果を表示する為には、set
serveroutput onを実行しておく必要がある。
(そうでないとコンソールに結果が表示されない)
SQL DeveloperでもただDBMS_OUTPUT.put_line()を実行しただけでは、Script
Outputに結果は表示されない。
しかし「set serveroutput on」を実行(F5)しようとしてもエラーになる(スキップされる)だけ…。
そこで
DMBS Outputシートのボタンを押すと「set serveroutput on」が実行され、Script
Outputにput_line()の結果が表示されるようになる。
もう一度ボタンを押すと「set serveroutput off」が実行され、表示されなくなる。
DBMS Output | Enter SQL Statement | Script Output |
---|---|---|
set serveroutput on |
EXEC DBMS_OUTPUT.put_line('abc') |
anonymous block completed abc |
serveroutputをonにする。 | 実行(F5)する。 | 結果が出力される。 |
Connectionsツリー内のコネクション名の左側にある「+」マークをクリックするとツリーが開き、その中のTablesの下にあるテーブル名をクリックすると、テーブルのシート(オブジェクトビューアーウィンドウ)が開く。[2008-12-14]
まずテーブルの情報をタブで選ぶ。デフォルトはColumnsになっている。
Columns | テーブルの項目と属性。 |
Data | テーブルの内容(データ)。レコードを表示したり更新したり削除したり追加したり出来る。 |
Constraints | そのテーブルに付いている制約。 |
Grants | そのテーブルにアクセスできる権限。 |
Statistics | 統計情報? |
Column Statistics | |
Triggers | トリガー情報。 |
Dependencies | そのテーブルを使っている関数・プロシージャーやビュー。 |
Details | テーブルの詳細情報。 |
Partitions | パーティション情報。 |
Indexes | そのテーブルに作られているインデックス(索引)。 |
SQL | そのテーブルを生成する為のDDL(CREATE文)…だと思うのだが、いつまで待っても表示されない。 |
シートのテーブル名の部分で右クリックして「Split Document」を選ぶと、シートを分割することが出来る。[2008-12-17]
データを見ている場合は、分割したシートそれぞれでソートやフィルター定義が出来るので、ちょっと便利。
また、上下スクロールバーの上の部分と左右スクロールバーの左の部分にちょびっとある棒をドラッグ&ドロップする(あるいはダブルクリックする)ことで、縦にも横にも分割できる。
テーブル名を右クリックして「Unsplit Document」を選ぶと、1つに戻る。
複数のタブ(ワークシート)が並んでいる時は、テーブル名を右クリックして「New Tab Group」を選ぶと、タブとタブを離せる。[2008-12-17]
2つ以上のタブ(ワークシート)の内容を同時に見られるので、ちょっと便利。
また、シート名の部分をドラッグすることによってもタブグループを分割することが出来る。
(下の方でドロップすれば上下分割になる)
分割している状態で「Collapse Tab Groups」を選ぶと 元に戻る。
テーブルのデータを表示するシート(ビュー/ウィンドウ)。[2008-12-14]
操作 | 説明 |
---|---|
Freeze View | ビュー(シート)を固定する。 固定にしておくと、Connectionsツリーで別テーブルを選択した際、そのテーブルは新しいシート(ビュー)で表示される。 (固定していない場合は、そのシートが使い回される) →デフォルトで常に固定にする設定 |
Refresh | データを再度取り直す(表示し直す)。 |
Insert Row | レコードを追加する。 (「レコード(record)」はどちらかといえばファイルで使う用語で、DBでは「ロー(row):行」を使う) どこかの行を選択していて「Insert Row」を押した場合、そこに追加される行が増える。 どこも選択していない場合は一番上に追加される行が増える。 一番下の行の一番右の項目でTabキーを押すと、一番下に追加される行が増える。 (いずれにしても見た目だけの問題で、DB内に保持される場所を指定できるわけではないのだが) |
Delete Selected Row(s) | レコードを削除する。 Shiftキーを押しながら2つ目の行を選べば、範囲選択できる。 データ部(一番左の行番号以外の場所)でCtrlキーを押しながら行を選ぶと、複数選択できる。 (複数選択はちょっと分かりづらいので、わざわざ使わなくていいかも。 どうせコミットするまで実際には削除されないんだから、何度か削除操作をすればいいだけの話) |
Commit Changes | 変更(追加・削除・更新)をコミットする。 |
Rollback Changes | 変更(追加・削除・更新)をロールバックする。 |
Sort | ソート項目を指定する。 ここでソート条件を指定しない限り、表示されるデータの順序は適当(バラバラ)。 (シート上の項目名をクリックしただけでもソートできた方が便利なんだけどなー。 ワークシートでExecute Statement(F9)で実行した結果の場合は項目名の左側の「AZ」をダブルクリックするとソートできるのに) |
Filter | フィルター(表示データの選択条件)を指定する。 Filterの右側の「Enter Where Clause」にWHERE条件を書いてEnterキーを押すと、その条件で表示される。 |
Actions | テーブル名を変更したりテーブルを削除(drop)したりといった色々な操作を行う。 |
レコードを右クリックして「Single Record View」を選ぶと、1レコードだけを表示するダイアログが開く。
項目が縦に並んでデータ部の横幅も広いので、場合によっては便利かも。
テーブルのレコード数(count(*))が知りたいなら、データ部を適当に右クリックして「Count Rows」を実行するとよい。
データをクリックして(選択して)値を入力すると、既存のデータの末尾に追加されてしまう。
データをダブルクリックして(あるいはF2キーを押して)からだと上書き変更になる。
(普通は逆じゃないか…?)
Tabキーで移動した直後はクリックされた状態と同じ。
値をNULLに更新したい場合は、文字列を何も入力しない(全て削除する)。
数値のエリアに文字列を入れた場合や桁数オーバーの場合でも、コミットするまではエラーにならない。
(コミットの際に実際のUPDATE文が実行される為、そこで初めてチェックされる)
シート上で行全体を選択(一番左の行番号をクリック)してCtrl+C(メニューバーのEdit→Copy)し、別の行全体を選択してCtrl+V(メニューバーのEdit→Paste)すると、データを複写できる。
また、Insert Rowで追加した行にペーストすることで、新しいデータに貼り付けることも出来る。
(同一の行を増やすなら、増やしたい行で右クリックして「Duplicate Row」を実行する方が分かり易いか?)
行の中の個別項目を選択してからペーストする場合、ペースト時に選択されていた項目に貼り付けられる。
(複数の項目を間隔を空けて選択していた場合でも、貼り付け時は連続した項目(選択されていた項目から右へ順番に)に貼り付けられる)
オブジェクト(テーブルとか)を名前から探すには、「Find DB Object」ビューが使える。[2008-12-17]
「Apply Filter」がいちいちダイアログで条件を指定し直さないといけないのに対し、このビューはオブジェクト名(の一部分)で1つずつ探したい場合に便利。
入力例 | 取得結果 |
---|---|
E% |
Eで始まるオブジェクト一覧 |
hishidama.% |
hishidamaユーザーが所有しているオブジェクト一覧 |
「Recent Objects」バーをクリックすると、最近シートを開いたオブジェクトの一覧が表示される。[2008-12-17]
ここでオブジェクトをクリックする事でもシートを開ける。
複数オブジェクトのDDL(とデータ)をエクスポート(ファイルへ出力)することが出来る。[2008-12-17]
(Oracle10gのexpと違って、ハッシュパーティションのDDLも正しく出力される)
なお、実行した際にエラーがあると、ダイアログ自体が閉じてしまって訂正できない。最初からやり直し!不便だ…
テーブル1つだけのデータをエクスポートするなら、Export Dataの方が便利。
Export DDLによってエクスポートしたファイルは、SQLファイルとして実行できる。[2008-12-17]
ただ、データ数が多いとかなり時間がかかる。(終わるとは思えないほど。なにせINSERT文を1つずつ実行していって、最後にまとめてコミットなので。)
そういう時は素直にexpを使う方がいいかも。