http://www.thatjeffsmith.com/のaboutによるとProduct Manager for Oracle, working on the SQL Developer team
という方が主にSQL Developerについて書かれているブログがあります。詳しい経緯は不明ですがSQL DeveloerのTipsについて30日間連続で書き続けるという、ひとりAdvent Calendarのようなチャレンジをしておられます。このエントリではそのチャレンジに敬意を表すると同時に、テキトー翻訳をしていきます。
このエントリではTipsの1から15まで訳しています。
なお、下記翻訳文中の「私」は特に断りが無い限り引用元のJeff Smith氏のことを指します。また、画像はすべて同氏のブログに張られているものを参照しています。
30 SQL Developer Tips in 30 Days, Day 1: Help with WHERE Clauses
9月、私は二つの異なる力技を披露するチャレンジを行うことにしました。
私のブログは週に一度か二度ポストするだけになりつつあり、週に平均三つは書きたいと考えています。なので、このミニ・ブートキャンプにより、望ましい頻度に戻していきたいと思います。
その辺の詳しい事情はともかく、Tip #1に行きます。
WHERE節をヘルパーで補完するには
これはカーソル位置に依存します。
'WHERE'とタイプしたあとヘルパーを実行するには、Ctrl+Spaceをします。
'WHERE '*1とタイプしたあとヘルパーを実行すると、
ヘルパーを実行するときにはWHEREの後ろのスペースに注意してください。
30日間TipやTrickをブログにポストしていきますが、その多くは短くて読みやすいものにしていきます。
(原文へのURL)
30 SQL Developer Tips in 30 Days, Day 2: NLS Parameters
Oracle SQL Developerの設定のうち最も重要なのがNLSパラメータです。この設定ページの項目はクエリ実行と結果セットに直接的な影響を及ぼします。
私がユーザから頂く質問のうち最も興味深いものの一つはというと……
SQL Developerで、あるクエリはXという結果になるのに、SQL*Plusや他のツールではYになるのはなぜでしょうか?
大抵の場合、NLSパラメータが異なるからだと思われます。
Windowsマシン上でOracle Clientと関連プログラムをインストールするとNLSパラメータを保存するためにWindowsレジストリへ書き込まれます。SQL DeveloperはJavaアプリケーションなのでOracle ClientやWindowsレジストリを使用しません。
レジストリの代わりに、SQL Developerはそれとは独立してNLSパラメータを保存します。クエリ結果が異なるのは、見に行く設定の場所が異なるからです。
なお、誰かをからかいたいのならNLS_SORTを変更してしまいましょう。
(原文へのURL)
30 SQL Developer Tips in 30 Days, Day 3: Syntax Highlighting
ある日のこと以下のような質問を受けました。'テーブル名のハイライトを青色にするにはどうすればよいでしょうか?'
設定のうちPL/SQL Syntax Colorsの'PLSQL Identifierを探して変更したい色を設定します。
他の例としては……
文法の破線が見づらいとき
'Disconnected Join Graphを設定します。
クラシックな黒背景・緑文字スクリーン
Default Plain text'のbackgroundを‘black'にして、それ以外は好きな設定にします。
(原文へのURL)
30 SQL Developer Tips in 30 Days, Day 4: Statement Execution
覚えておくと得するかもしれない小技です。
ステートメント実行前であっても、SQL Developerはエラーがあることを教えてくれます。ここでは文法チェックが失敗しています。赤い波線に注意して見てください。
よって、セミコロンを加えるか、もしくは……
ステートメントの実行と、スクリプトとしてのステートメントの実行の違いを知る
(原文へのURL)
30 SQL Developer Tips in 30 Days, Day 5: Connectivity Issues
Oracle Databaseに関して最もよく投稿される質問は接続に関するものです。
データベースでの作業を開始しようとしたときに、データベースに接続できないことは大変にイライラさせられます。そして、ある種の理由によりエラーメッセージは更に混乱を招くことになります。
また、問題解決を助けて作業に戻してくれるDBAが必ずしもいるわけではありません。
さらに、接続するためのデータベースを持っていないことを理解していないい人もいます。とはいえ、そうでない場合もあります。
今日のTipsは、よくある接続エラーの紹介とその意味と修正方法を示します。
前書きは以上で、以下からが本文です。
ORA-12545: Connect failed because target host or object does not exist
接続したいデータベースがどこかのマシンで起動しているとします。このマシンはネットワークアドレスと名前を持ちます。暗黙的なTNSエントリか、ベーシック接続として明示的に指定するかのどちらかで、ネットワーク情報を入力します。
まず最初に確認するのは、IPアドレスもしくはネットワーク名が正しいことです。それが正しいなら、次はサーバにPINGが通るかどうかです。コマンドラインやターミナルからPINGを打てます。PINGが通らないなら、サーバのマシンがダウンしているか、ネットワークにいないか、他の原因は色々考えられます。
ORA-12541: TNS:no listener
進捗の結果サーバマシンには到達するようにはなったものの、上記は接続リクエストに応答するサービスが無いことを示しています。大抵のデータベース接続サービスはListenerが提供します。
ありがちなハマりポイントを二つ挙げます。
- リスナーが起動および実行されていない。
- 間違ったポートを使用しようとしている。
リスナーは一つ以上のポートで接続リクエストを受け取るように設定されています。デフォルトポートは1521ですが、多くの場合1521以外が設定されており、1522だったりします。よって、正しいポートかどうかを確認します。
個人用のデータベースであれば、Listenerが起動していることを確認してください。最も手っ取り早いのはコマンドラインかシェルプロンプトでlsnrctl status
を実行します。
このコマンドはリスナーが起動しているかどうか、また、起動していればリッスンしているポートを表示します。
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
サーバとリスナーに接続できるようになった、とします。しかし、上記はデータベースとの対話をしようとしたら、リスナーが利用可能なデータベース'service'が無い、と言っています。
これは指定したSIDかSERVICEのどちらかが間違っているか、Listenerがまだデータベースのサービスを開始していないか、になります。
SIDはデータベースの一意な識別子で、ServiceはListenerがデータベース接続をサポートするために使用するもので、どちらも使用可能です。リスナーに直接アクセスが可能であれば、サービス状況を確認するためにlsnrctl status
コマンドを実行します。
[oracle@localhost dbhome_1]$ lsnrctl status LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 05-SEP-2014 09:40:01 Copyright (c) 1991, 2013, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 12.1.0.1.0 - Production Start Date 29-AUG-2014 05:45:56 Uptime 7 days 3 hr. 54 min. 5 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora Listener Log File /u01/app/oracle/product/12.1.0/dbhome_1/log/diag/tnslsnr/localhost/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=80))(PROTOCOL_STACK=(PRESENTATION=HTTP)(SESSION=RAW))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=21))(PROTOCOL_STACK=(PRESENTATION=FTP)(SESSION=RAW))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) Services Summary... Service "orcl" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Service "orclXDB" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Service "pdb1" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... The command completed successfully
pdb1
がここでは探し求めているもので、接続の詳細にこの値を入力する必要があります。
なお、12c Multitenant pluggable database (PDB)に接続しようとする場合、Service経由で参照を取得して下さい。マルチテナントデータベースのSIDコンテキストはコンテナデータベース(CDB)の参照になります。通常はPDBに接続したい場合がほとんどだと思われます。
Authentication
このポストはなんか長くなってきたので、user/password問題を書くことによってこれ以上長くしたくはありません。要点としては、
- ユーザ名とパスワードがどう考えても正しいことを確認する。
- パスワードの大文字小文字が合っていることを確認する。
SYS
として接続する場合、AS SYSDBA
オプションが必要です。- データベースサーバ上では無い場所で
SYS
に接続しようとする場合、DBがそれを許可するようにセットアップしているかの確認が必要です。
なお、100のうち95は、SYSとして接続する必要はありません。とはいえ、その辺についてははまた別の機会に。
(原文へのURL)
30 SQL Developer Tips in 30 Days, Day 6: Try the Schema Browser
いま私は友人宅に居り、パソコンを借りているので、本日のポストは短いです。
なお、画像もありません。
接続ツリーのアクティブ(接続中の)コネクションで右クリックしてスキーマブラウザを選択します。
データベースで頻繁にスキーマを参照する場合、ドロップダウンから選ぶことが出来ます。
(原文へのURL)
30 SQL Developer Tips in 30 Days, Day 7: The Array Fetch Size Preference
多くのユーザが、以下の設定が実際には何をしているのかを理解せずにいじっているようです。
JDBC標準はクエリにおけるデータベース・ラウンドトリップのフェッチ行数を指定可能で、この数値はフェッチサイズとして参照されます。 http://docs.oracle.com/database/121/JJDBC/resltset.htm#JJDBC28621
いま、あるクエリが実行すると1000レコード返してフェッチサイズが100に設定されているとすると、すべてのレコードを取得するのにデータベースへは10回アクセスすることになります。
巨大なフェッチサイズは、JDBCレイヤーを通して扱うデータ処理に必要となるリソースがより多くなります。我々は、たいていのユーザは200行以降の結果を見ることは少ないことを発見したため、よってこの値が設定の上限となっています
また、デフォルトの10よりも小さい設定はSQL Developerでは許可されていませんが、これはクエリ実行後に10行しか見れないという意味ではありません。デフォルトでは結果セットは画面のグリッドで多くの行を表示するのに10行ずつフェッチする、という意味になります。
では、この設定をチューニングする必要はあるのでしょうか?
おそらく、無いでしょう。
しかし、行がLOBなどで巨大な場合、JDBCレイヤのメモリロードを減少させるために設定値を下げるのが良いでしょう。
(原文へのURL)
30 SQL Developer Tips in 30 Days, Day 8: Use the Cart to Build Deployment Scripts
どこか別の場所へすみやかにオブジェクトを生成するために、スケジューリング可能なスクリプトを作成したいとします。
私はSQL Developerの機能紹介ためのデモ環境を即座にビルドするためにCartを使用しています。たとえば、私は以下を紹介するための'shopping list'を作成しています。
これにスクリプトを追加できます。
- Pre-Script - 環境をセットアップするために最初に実行
- 各オブジェクトごとに以下を実行
- Post-Script - 完了後にすることがあれはここで実行
Cartツールバーボタンの'Export'をクリックすると、以下のようなファイルが作成されます。
テーブルを直にいじる必要はありません
以上の操作でDDLやデータ用のスクリプトが生成可能です。データがある場合、必要ではないレコードがあればWHERE節でフィルターをかけることもできます。接続ユーザにデータ・オブジェクトを配置するようなスクリプトを作成する場合、EXPORTダイアログで'schema'オプションをOFFにしてください。これは、オリジナルのオブジェクトスキーマに含まれているデータでCREATE or REPLACE & INSERTSをしないようにします。
BLOBとSPATIAL Dataを扱うTip/Trick
SQL*Loaderエクスポートフォーマットを使用します。シンプルINSERTはこれをカットしません*8。
(原文へのURL)
30 SQL Developer Tips in 30 Days, Day 9: You Only Need to Run One Copy at a Time
ところで、助手席や後部座席に座ったときに、ドライバがあなたにクレイジーな思いをさせた恐怖体験はありますか? 私の大学以来のお友達は彼の車に4速があるとは認めようとしませんでした。彼は決して3速以上にシフトしませんでした。一応、私は、正常です。
SQL Developerのユーザが私をクレイジーな気分にさせるものがいくつかあります。彼らは一度に二つか三つクエリをコピーして実行するのです。そんなことをする必要はありません。
私が思うに、彼らがなぜそんなことをする理由は以下の通りです。
- 接続がビジーなので、別の接続かさらに別の接続でクエリを実行している
- 本番環境で何かやらかしてしまうことを恐れている
我々は上記の両シナリオを改善するような機能をツールに追加しています。
非共有ワークシート(Unshared Worksheets)
もしコネクションがビジーの場合で別のクエリを実行したい場合、ワークシートでCtrl+Shift+Nを入力します。これにより、別の新規接続でクエリを実行可能なワークシートが新たに開かれます。
色付き接続
version 4.0の新機能で、新規の接続を定義する際に、カラースキーマを割り当てることが出来ます。接続に関連付いた各エディタは、この色でハイライトされた枠線になります。
暴言*9
もちろん、お望みであれば複数のSQL Developerを立ち上げてクエリを実行することは可能です。しかし、いまや、あなたは少なくとも上記の二つのシナリオではそんなことを本当にする必要があるかどうかを知っている、と私は期待しています。
(原文へのURL)
30 SQL Developer Tips in 30 Days, Day 10: Compare Stuff Side By Side
SQL Developerでは色々なものをカンタンに比較可能にしています。たとえばトラブルシューティングをする際に、しばしば何故AがBのようにならないのか、を知る必要が出てきます。
それでは、いくつかのケースを見てみることにします。
実行計画・自動トレース
まず実行計画か自動トレースを実行し、ピンを付け、別の実行計画か自動トレースを実行します。どちらかのクエリ上で右クリックし、もう片方と比較をします。すると……
左右に並べてオブジェクトを見る
二つのホッケー統計テーブルの差異を見るにはどうすればよいでしょうか?
テーブルを開き、ピンを付け、次のテーブルを開き、ピンを付けます。二番目のテーブルのエディタタブで右クリックし、'New Document Tab Group'を選びます。
テーブル定義やその他オブジェクトを参照する
Tools > Database Diffで、二つ選択し、オブジェクトか比較したいオブジェクトを選択します。
プログラムやクエリを比較したい
プログラムやクエリのファイル -> Compareを実行します。
より詳細な情報が必要ですか?
私はすでにSQL Develoerの比較機能のすべてを過去に投稿しています。ブログの検索フォームで探している機能について調べてください。
もういっちょ:データモデルの比較
これも可能です。
これであなたはグラフィカルに比較が可能になりました。you’ll see how the coordinate system mapping points are different…just in case that’s really important to you.(※上手く訳せないのでそのまま)
(原文へのURL)
30 SQL Developer Tips in 30 Days, Day 11: Tree Trimming
ユーザの多くはDBAや開発者ではありません。こうしたユーザは、テーブルのブラウジングやクエリ実行やビジネスの決定に役立つ質問への回答に時間を浪費しています。
SQL Developerの接続ツリーは、ユーザが使用しない項目もすべて表示しています。
これを非表示にします。
Tools – Preferences – Database – Navigation Filter
なお、これはversion 4.0の新機能なので、もし存在しなければアップグレードが必要です。
(原文へのURL)
30 SQL Developer Tips in 30 Days, Day 12: Executing Script Output?
以下のボタンは御存知でしょうか? もしくは、何をするボタンなのか疑問に思ったことはありませんか?
時にはSQLを出力するSQLを書くことがあるでしょう。つまり、生成されたSQLを実行したいわけです。怠惰は美徳です*10。
SQL Developerをインストールしていれば、それはカンタンに出来ます。
(原文へのURL)
30 SQL Developer Tips in 30 Days, Day 13: Executing Very Large Scripts
大規模スクリプト、とは何でしょうか?
これは主観的な質問であり、回答はハードウェアのスペック依存になります。
昨日、私は以下の質問を貰いました。
@thatjeffsmith is there a limit to the number of lines I can paste into the code editor in SQL developer?
— louise mcscootash (@metalouise) 2014, 9月 12
SQL Develoerのコードエディターに張り付け可能な最大行数は何になるでしょうか?
この質問は興味深いものがあります。これは99%の確率で非理論的で、彼女はどうみても壁にぶつかっています*11。
また「壁」は以下のような内容でした。
@thatjeffsmith I've got an insert script generated by the Import Data tool with aforementioned 600k records but it won't open the file.
— louise mcscootash (@metalouise) 2014, 9月 12
インポートデータツールが600,000行のINSERTスクリプトを生成したのですが、ファイルを開くことは出来ませんでした。
前に述べたように環境依存なので、これに対する現実的な回答はありません。しかし、我々のエディタの設計では600,000以上もの行を扱えるようにはしていません。
まず、Notepadでファイルを開いてやりたいことと、ファイルを開いてやりたいことと、ファイルを開いて入力・クリック・スクロールしたいこと、とを比較して考えてみると、答えは自ずと出てきます。
では、こうしたINSERTを実行したい場合にはどうすればよいのでしょうか?
One More Tip
600,000行以上の更新メッセージをツールで表示する必要が無いのなら、スクリプト出力パネルを最小化することで、より高速に処理できます。
このような大規模ファイルでは、セカンダリのログファイルを出力したいことが多く、その場合にはスクリプトにSPOOLを追加することを考えてください。
(原文へのURL)
30 SQL Developer Tips in 30 Day, Day 14: Opening Objects on Double-Click
あなたが注意深いのであれば、私は"自動的な"機能の熱心な信者ではありません*12。私は必要になったときに該当の機能を使いたい人間です。ツールのデフォルト設定は接続ツリーの項目をクリックするとそれを開くようになっています。
しかし、オブジェクトをモデルやワークシートにドラッグしようとすると、SQL Developerはオブジェクトエディターを開くことで作業の流れを中断させ、私はやる気を失います。
また、あなたが太い指であるとか、クリック判定がシビアなマウスだと、意図しない事故クリックをしてしまいます。
これの変更はカンタンです。
設定!
これによって、オブジェクトはダブルクリックで開くようになり、オブジェクトをうっかり開いて作業の流れを妨げる確率が激減することになります。
(原文へのURL)
30 SQL Developer Tips in 30 Days, Day 15: Reporting
UKOUG*13 Scene Magazineの最新号にて、SQL Developerのレポート機能の使い方に関する5ページの記事を見ることが出来ます。
私は今日の投稿用の新しいTipやトピックを思いつくことが出来ました。また、手抜きのために過去記事へのリンクを張ります。
私の記事を紹介したいと思うので、それを読むには下記画像のリンクをクリックしてください。
上記ページのサマリは以下になります。
- 基本的な概要
- grid reports
- chart reports
- live preview charts
- child reports
(原文へのURL)
続きの16~30は以下。
*1:WHEREの後ろに半角スペースが一つある点が上記と異なる
*2:May we JOIN you?なので、まぁちょっと遊んだ訳にした。
*3:The 80’s refuse to die.で、古き良き時代の見た目にしたい人は何時でもいる、ってニュアンスと思われる。
*4:ぐぐってみるとDo You Even Lift?という海外版の改変コピペネタのようで、ボディビルディングの掲示板に"do you even lift?"(そんなに鍛えてどうすんの?)的な煽り?に"yo’all better shut ya fukin mouth yo bee-yotch"(おめーの口を即効で閉じるためだ)という応酬があり、それから色々あってコラ画像が拡散するようになり、ある種の煽りをするときに使用する(と思う) 詳細:http://knowyourmeme.com/memes/do-you-even-lift
*5:SID and Nancy, wait, not that Sid.が原文。おそらくSIDと人名のSid(シド)をかけたダジャレか?……とおもったらSid And Nancyという映画のタイトルがあるのね。知らなかった……
*6:http://www.oracle.com/technetwork/jp/database/options/spatialandgraph/overview/index.html
*7:http://www.oracle.com/technetwork/jp/database/options/advanced-security/index-1964787-ja.html
*8:Simple INSERTs won’t cut it hereが原文。使ったことない機能だからよく分からん
*9:Rant Over. が原文。rantは不平をぶちまける、怒鳴り散らす、とか。おそらく、メチャクチャな使い方をするユーザに対する愚痴という意味合い、と察する
*10:you’re lazyが原文で、いわゆるプログラマの三大美徳のことでしょう
*11:ran into some sort of wallが原文。そのまんま訳したけど、日本語でも問題にぶつかることを、壁に当たるって言うんで、まぁタブン意味は合ってると思われ
*12:If you’ve been paying attention, I’m not a huge fan of ‘automatic’ features.が原文。前半の文がイマイチ良くわからない。
*13:http://www.ukoug.org/home/ UK Oracle User Group