Oracle:接続時に「ORA-01109:データベースがオープンされていません。」エラーが出た場合の原因と対応方法

DBクライアントソフトなどでOracle DBへ接続時に「ORA-01109:データベースがオープンされていません。」が表示された場合の原因と対応方法についてメモしておきます。

「ORA-01109:データベースがオープンされていません。」の原因

  • 文字通り接続しようとしているDBがオープンされていないのが原因となります。今回接続先を「ORCLPDB」に指定していましたがそこがオープンされていないようです。
  • 念のためSQL Plusを起動して「show pdbs」コマンドでプラガブル・データベース(PDB)のオープン状態を確認するとやはりオープンされていませんでした。

「ORA-01109:データベースがオープンされていません。」の対処方法

  1. SQL Plusで「alter pluggable database ORCLPDB open;」コマンドを実行し、ORCLPDBをオープンします。
  2. 「show pdbs」コマンドでプラガブル・データベース(PDB)のオープン状態を確認します。
  3. これでORCLPDBのオープンだけなら完了していますが、このままPCを再起動するとまた再びクローズ状態に戻ってしまいます。ですので最後に現在オープンされている全てのPDBを自動起動(オープン)するように「alter pluggable database all save state;」コマンドで保存します。

 

SQL:文字列や数値項目へ埋め込み文字を挿入して桁数を揃える方法

SQLでゼロ埋めスペース埋めして桁数を揃えたい場合にはLPAD関数やRPAD関数を使用することで取得可能となります。DBMSによっては使用出来ないものもあります。

関数\DBMSMySQLPostgreSQLSQL ServerOracle
LPAD
RPAD
 

書式は「LPAD(列名,バイト数,’埋め込み文字’)」、「RPAD(列名,バイト数,’埋め込み文字’)」で指定します。第三引数の埋め込み文字を省略すると半角スペースが埋め込まれます。

サンプルではOracleでの使用例となります。

サンプルテーブル

  • 「GOODS」テーブル

LPAD関数の使用例1

  • 項目「GOODS_CODE」を10桁でゼロ埋めするSQL(クエリー)
  • 実行結果

LPAD関数の使用例2

  • 項目「GOODS_CODE」を10桁で全角「*」埋めするSQL(クエリー)
  • 実行結果
    以下のように埋め込み文字へ全角文字を指定すると1文字=2バイト扱いで埋め込まれます。

RPAD関数の使用例1

  • 項目「GOODS_CODE」を10桁でゼロ埋めするSQL(クエリー)
  • 実行結果

RPAD関数の使用例2

  • 項目「GOODS_CODE」を10桁で全角「*」埋めするSQL(クエリー)
  • 実行結果
    RPADでも以下のように埋め込み文字へ全角文字を指定すると1文字=2バイト扱いで埋め込まれます。

Excel:空白(空欄・未入力)セルの数をカウントする方法

Excelで空白(空欄・未入力)セルをカウントするにはCOUNTBLANK関数を使用することで簡単に取得可能です。COUNTBLANK関数は空白セルの有無や数をカウントしたい場合に利用できます。

数値として 0 (ゼロ) を含むセルはカウント対象外です。

空白(空欄・未入力)セルの数をカウントする例

COUNTBLANK関数は「COUNTBLANK(範囲)」で指定します。

以下の例ではB10セルの書式へ「=COUNTBLANK(B2:B8」を指定してB2~B8セルまでの空白セル数を取得しています。

SQL:WHERE句内で「(+)」を指定する意味

SQLを見てるとたまにWHERE句内で「(+)」と記載されているのを見かけることがあります。

この「(+)」はOracle独自で記載が可能となる外部結合演算子といって、「g.GOODS_CODE = gt.GOODS_CODE(+)」のように指定するとLEFT OUTER JOINと同じ結果を取得することが出来ます。

サンプルテーブル

  • 「GOODS」テーブル
  • 「GOODS_TYPE」テーブル

外部結合演算子を利用したクエリー(SQL)例

通常の左外部結合でのクエリー(SQL)例

実行結果

外部結合演算子、左外部結合どちらも同じ結果となります。

 

「.com」ドメインは今後も毎年値上がりする可能性大!

本日、レンタルサーバー会社からドメイン料金改定(要はドメイン料金値上がり)のお知らせが届いてました。。

こんなところにも値上がりの波が!?

とメールを見てみるといきなり3割以上も値上がりしてます。。

ドメイン料金なので1年で2614円と考えれば大した金額でもないのですが、突然何故?と思っているとメール文中に「上位組織から提示されるドメイン料金の上昇」と記載されています。

上位組織?と思って調べてみたら

「.com」ドメインのレジストリ管理企業であるVerisignha社(ベリサイン社)は
2020年1月3日にICANNにより公開された「.comレジストリ契約の修正に関する発表」により、
2020年から2029年までの10年間、年間7%・最大70%値上げを行う権利を認められてるとの事。
上記に基づき、Verisign社は2021年9月1日から約7%の卸価格値上げを決定しています。

というのが背景となってました。

メール見てそのまま1年更新でいいかあ程度に考えてましたが、今後も毎年値上げが実施される可能性大というのも考慮すると今のうちに複数年契約した方が良いと判断して最大の5年契約に変更しました。

今後も「.com」ドメインを長期使用予定の方は契約年数を見直したほうがお得かも

Oracle:ユーザー作成時に「ORA-65096」エラーが出た場合の原因と対応方法

Oracleのインストール後にSQL*Plusなどでユーザー作成しようとした際、「ORA-65096」エラーが発生した場合の原因と対応方法についてメモしておきます。

「ORA-65096:共通ユーザーまたはロール名が無効です」の原因

  • ルートコンテナにローカルユーザーを作成しようとした場合に発生するエラーとなります。
    ルートコンテナには共有ユーザー(common user) と呼ばれる特殊なユーザーしか作成することはできません。
    Oracle 11gまでと違いOracle 12c以降からは一つのインスタンスには一つのコンテナ・データベース(CDB)と、プラガブル・データベース(PDB)と呼ばれる子DBが存在しています。sysなどのユーザーでログイン直後はコンテナ・データベース(CDB)に接続されている状態となっているため、そのままローカルユーザーを作成しようとしてもエラーが発生してしまうということになります。

「ORA-65096:共通ユーザーまたはロール名が無効です」の対処方法

原因が分かってしまえば対応はシンプルです。接続先がコンテナ・データベース(CDB)であるのがまずいのであればプラガブル・データベース(PDB)に変更してしまえばいいだけです。

  1. まずは「show con_name;」で現在接続されているデータベースを確認します。
  2. 次に「select name, open_mode from v$pdbs;」でPDBの名前と現在のOPEN_MODEを確認します。
  3. PDBの名前が「ORCLPDB」というのがわかったのでデータベースの接続先を「ORCLPDB」へ変更します。
  4. もう一度「show con_name;」を実行して接続先が変更されていることを確認します。
  5. 接続先がPDBへ変更されたのでもう一度ユーザー作成を実行すると正常に実行されます。

 

エクスプローラー操作が格段に楽になるファイルマネージャーアプリ「One Commander」

「One Commander」はファイルマネージャーアプリでWindows標準のエクスプローラーを利用している方には一度は試してもらいたいソフトの代表格です。使用したら恐らく標準のエクスプローラーには戻れませんw

そういえば標準のエクスプローラーだとWindows11でようやくタブ化されたとか。。

「One Commander」のダウンロード

覚え書き.comから「One Commander 3.5.11」をダウンロード

  • バージョン:3.5.11.0
  • ファイルサイズ:43.5M

「One Commander」の主な機能・特徴

  • デュアルパネル、サイドバイサイドのファイルブラウジング
  • エクスプローラーのタブ化や改装表示が可能
  • ファイル作成日の色分け表示
  • 動画、画像、PDF、ソースコードファイルなどのプレビュー表示
  • お気に入り(BookMark)のグループ化
  • File Automatorというツールでファイル名の一括変換や画像ファイルのjpegなどへの一括変換なども可能

ライセンス

  • Shareware ※非商用利用は無料

サポート

  • Windows10、Windows11

 

Twitter:API Key、API Key Secret、Access Token、Access Token Secretの確認方法

Twitterで開発者アカウント取得後、「API Key」、「API Key Secret」、「Access Token」、「Access Token Secret」を確認する手順をメモしておきます。

※事前にTwitterの開発者アカウント取得済を前提としてます。

「API Key」、「API Key Secret」の確認方法

  1. TwitterのDeveloper Pottalページへアクセスします。
    ⇒TwitterのDeveloper Portalページへ
  2. DEVELOPMENT APPの鍵アイコンを選択します。
  3. API Key and Secretの「Regenerate」を選択します。
  4. 確認画面で「Yes,regenerate」を選択します。
  5. API Key と API Key Secretが表示されるのでCopyボタンを選択すればコピー出来ます。

「Access Token」、「Access Token Secret」の確認方法

※「API Key」、「API Key Secret」の確認方法の1~2までは同じ手順です。

  1. Access Token and Secretの「Regenerate」を選択します。
  2. 確認画面で「Yes,regenerate」を選択します。
  3. Access Token と Access Token Secretが表示されるのでCopyボタンを選択すればコピー出来ます。

WordPressで記事の更新時に「更新が失敗しました。返答が正しいJSONレスポンスではありません。」と表示されたり新規投稿画面を開こうとしても「Security check failed」と表示された原因

本日WordPressで作業していたら以下のような事象が発生しました。

  • WordPressで記事を更新しようとしても以下のように「更新が失敗しました。返答が正しいJSONレスポンスではありません。」と表示されて更新出来ない
  • 新規で投稿や固定ページを追加しようとしても「Security check failed」と表示されて新規投稿用の画面が表示されない

先日まで投稿できてたのに何故!?

と思いエラーメッセージでググっても「クラシックエディタに変更してみる」とか「パーマリンク設定を基本にする」などは見つかりましたが今ひとつ根本的な解決手段じゃないなあと本日行った作業を思い出してみるとそういばプラグインいくつか更新したな。。と思い出し本日更新したプラグインを一つずつ無効化して確かめてたら。。

プラグイン「WP to Twitter」の更新が原因でした!!

これを無効化したら全て正常に動作したので私の場合は「プラグインの更新で不具合があった」というのが根本原因でした。。

やっぱりプラグイン更新時は動作確認必須だなあと再認識(^_^;)

WP to Twitterのページを見るとバージョン「3.6.0」に更新すると発生します。

サポートフォーラムを見てもまだこの件については何も記載されてないようなのでもう少し対応待つ必要ありそうです。

Wp to Twitterのプラグインページへ

 

今回は更新したプラグインで不具合があったのが原因でしたが、調べていると他の原因でも「更新が失敗しました。返答が正しいJSONレスポンスではありません。」のメッセージが表示されることがあるようです。まずは正常に更新出来ていた時期~エラーが発生した時期までに更新したことを思い出して一つずつ原因を潰すのが一番近道かなあと思います。あと定期的なバックアップも大事!

他に考えられる原因や対処方法

  • レンタルサーバー側でなんらかのセキュリティなどの機能が追加されたのが影響した
  • 「.htaccees」の編集で記載ミスがあった。もしくは自動で中身がクリアされてしまっていた。
  • ブラウザのキャッシュをクリアしたら直った
  • サーバーのWAFをOFFにしたら直った

 

SQL:TRIM関数を使って任意の文字や文字列を削除する方法

trimは通常、文字列の前後の半角スペースを削除して取得する場合に使用する場合が多いと思いますが、引数へLEADING、TRAILING、BOTHを指定することで任意の文字や文字列を削除して取得することが出来ます。

サンプルテーブル

  • 「goods」テーブル

TRIMに引数「LEADING」を指定した場合

TRIMに引数「LEADING」を指定することで文字列の先頭にある任意の文字や文字列を削除することが出来ます。

  • クエリー(SQL)例
  • 実行結果

TRIMに引数「TRAILING」を指定した場合

TRIMに引数「TRAILING」を指定することで文字列の末尾にある任意の文字や文字列を削除することが出来ます。

  • クエリー(SQL)例
  • 実行結果

TRIMに引数「BOTH」を指定した場合

TRIMに引数「BOTH」を指定することで文字列の先頭と末尾にある任意の文字や文字列を削除することが出来ます。

  • クエリー(SQL)例
  • 実行結果

「駑馬十駕」 IT系情報を中心に調べた事をコツコツ綴っています。

モバイルバージョンを終了