スポンサードリンク
カテゴリー:"運用"

Oracle 10g で 「ORA-01031」 エラーでオブジェクトがコンパイルできなかったので

久しぶりに Oracle のテスト用データベースを作ったら、一部のオブジェクトが

ORA-01031: 権限が不足しています。

というエラーを出してコンパイルできずにハマったので、覚え書きです。

ちなみにテストDBは新規にデータベースを作って、本番サーバーからエクスポートしたデータをインポートして作っています。

とりあえず詳しく調べていくと、どうやらコンパイルできないオブジェクトは他のユーザー(スキーマ)のデータを参照しているんですね。

だったら、他のユーザーのオブジェクトへの参照権限を付与すればOKのはず。と以下の SQL を実行したところ、うまくいきました。

まず、参照先のユーザー(USER1)でログインして、参照元のユーザー(USER2)に権限を付与します。ここではテーブル(TABLE1)への参照(SELECE)権限を付与しています。

> GRANT SELECT ON USER1.TABLE1 TO USER2 WITH GRANT OPTION;

これで USER2 でログインしなおして、エラーなっていたオブジェクトを再コンパイルすればOKです。

後から考えたら、インポートする時に権限をインポートしないようにしたのが原因と思われますが・・・、権限をインポートしたらしたで、いろいろあったりするからなぁ。難しいところです。

参照リンク
 ・ORA-01031 - オラクル・Oracle エラー FAQ
 ・ORA-01031: 権限が不足しています。 | 技術情報 | 株式会社コーソル
 ・ビュー(VIEW)に対するアクセス権限(GRANT)の付与の仕方についてアドバイスください - Database Expert - @IT
 ・GRANT Oracle® Database SQL言語リファレンス 11gリリース2(11.2)

「さくらのレンタルサーバ」 のディスク容量が倍増してました

 さくらインターネットが、「さくらのレンタルサーバ」 と 「さくらのメールボックス」 の契約毎に利用できるディスク容量を増強したそうです。

 しかも新規契約についてのみにあらず、既存の契約者についても容量が UP するんだそうです。

 というわけで、自分の借りているスタンダードプランのコントロールパネルを確認したところ、きっちり 30GB 使えるようになっていました。ありがたや。

 僕がさくらのレンタルサーバーを借りてもう随分になりますが、実は容量の拡張はこれが2回目だったりします。

 最初の契約時(2008年)には 3GB だったのが途中で 10GB に増えて、今回で 30GB まで使えるようになりました。5年で10倍かぁ。

 しかしここまでの容量になると、もう大抵のことはコレでいいんじゃね? って気がしてきますよね。

 確か契約上、サービスの提供を伴わないファイル置き場にするのは NG だったような気がするんですが、ちょっと大きめのデータを扱う Webサービス なんかも、安心して置けるようになったように思えます。

参照リンク
 ・さくらのレンタルサーバのプラン概要・機能比較 | さくらインターネット
 ・さくらのメールボックス(メールサーバ) | レンタルサーバはさくらインターネット
 ・「さくらのレンタルサーバ」、料金据え置きでディスク容量を増強 -INTERNET Watch

Oracle 11g に 「ORA-28001」 エラーでログインできなくなったので

会社の Oracle 11g にいきなりログインできなくなったと思ったら、

ORA-28001:パスワードが期限切れです。

ですってぇ!?

急いで調べてみたところ、Oracle 11g からはデフォルトでパスワードの有効期限が180日に設定されているそうなんです。知らんかった。

というわけで、パスワードの有効期限を無期限にする方法をメモメモです φ(..)。

まずはデータベースに sysdba 権限で接続し、以下のコマンドを入力します。

alter profile default limit password_life_time unlimited;
alter user [ユーザID] identified by [パスワード];
alter user [ユーザID] account unlock;

1行目では 「default」 という名前のプロファイルのパスワードの期限を無期限にします。特に設定していなければ、各ユーザーにはこのプロファイルが割り当てられているようです。

あとは2行目でユーザーのパスワードを再設定して、3行目でロックを解除します。

2行目のパスワードの再設定は必要ないような気がしましたが、現在パスワード自体に期限が設定されているので、ここで無期限のパスワードとして再度設定する必要があります。

3行目のロックの解除については、状況によっては必要ないかもしれません。実は 1行目>3行目>2行目 の順で実行したので (・・。)ゞ

ついでにユーザーに対してパスワードの期限を設定する方法(alter user で何とか出来ないか)がないか探してみたのですが、見つけられませんでした。残念。

参照リンク
 ・開発備忘録 ORA-28001:パスワードが期限切れです。
 ・Oracle11g パスワードの有効期限の変更方法 - エムイズム - つぶやきブログ

Oracle 10g R2 で複数スキーマのデータを一気にインポートしよう

Oracle 10g R2(10.2.0.1.0) で複数のスキーマ(ユーザー)のデータを一気にインポートいけれど、エクスポートファイルの全データをインポートしたいわけではない(full=y は使いたくない)場合の覚え書きです。

まず、一般的な imp コマンドの書き方としては、以下のような感じになります。

imp インポート権のあるユーザ名/パースワード file=エクスポートファイルのパス log=ログファイルのパス fromuser=エクスポート元のユーザー名 touser=インポート先のユーザー名 rows=y ignore=y

より実際的な例としては、

imp SYSTEM/PASSWD file=C:\Temp\exp.dat log=C:\Temp\exp.log fromuser=user1 touser=user2 rows=y ignore=y

となります。この場合、exp.dat 内の user1 スキーマのデータが user2 スキーマにインポートされます。

上記の例だと、fromuser,touser ともにスキーマ名を1つずつ指定しているわけですが、一度に複数のスキーマについてインポートしたい場合は、fromuser,touser をカンマ区切りで指定して以下のようにします。

imp SYSTEM/PASSWD file=C:\Temp\exp.dat log=C:\Temp\exp.log fromuser=user1,user3,user5 touser=user2,user4,user6 rows=y ignore=y

これで user1 のデータが user2 に、user3 のデータが user4 に、user5 のデータが user6 にインポートされます。

Oracle 10g R2 をインストールしたら、SYSTEMユーザーがロックされていたので

 久々に Oracle 10g Release 2 (10.2.0.1.0) のインストールしたんですが、インストール直後の状態で SYSTEM ユーザーがロックされてて焦りました。

 このバージョンの Oracle はこれまでも何度かインストールした経験があるのですが、 SYSTEM ユーザーってロックされてたかなぁ? 記憶が無い・・・orz

 とはいえ、SYSTEM ユーザーのロックを解除しないことには作業が進められないわけで、なんとかロックを解除した際の覚書です。

手順としては以下のとおり。

  1. ローカルで sqlplus を起動。
      >SQLPLUS /NOLOG
     
  2. sysdba でログイン
      >CONNECT / AS SYSDBA
     
  3. system ユーザーのロックを解除
      >ALTER USER SYSTEM ACCOUNT UNLOCK;
     
  4. sqlplus を終了

以上でリモートからも SYSTEM ユーザーで接続できるようになりました。

参照リンク
 ・ユーザのロック/アンロック by オラクル魂

パーツが無くてサーバーの修理ができませんでした

 先日、会社のサーバーの HDD が1本死にました。

 幸いというか、RAID 5 を組んでるサーバーだったので、そのままサービス停止という最悪の事態は避けられましたが、替えのサーバーを準備するのにも時間がかかります。

 というわけで、とりあえず修理するか! という話しになったわけですが、このサーバー、購入してから7年経ってたんですよ・・・orz

 当然、保守期間はとっくの昔に終わっています。だからといって、次のサーバーが準備できるまでこのままというのも心許ないですから、メーカーに修理できないか聞いてみました。

 そしたらですねぇ・・・、

HDDの在庫が無いので修理できません。

って言われちゃいました。あちゃ~。

 ちなみにサーバーの補修用部品の最低保有期間についてちょっと調べてみたのですが、どうやら法律では定められていないようで、製造終了から5~8年とメーカーによってバラバラみたいなんですよね。

 サーバーの減価償却期間が6年であることを考えると、修理用パーツは6年は保持しておいて欲しいところですが・・・。

 もっとも、今回壊れたサーバーは、それでもちょっと古すぎでしたけど(苦笑)。やっぱ、ちゃんとリプレース計画を立てとかないといけませんねぇ。反省。

さくらのVPSが更にお安くなるようです

 さくらインターネットの VPS、「さくらのVPS」 が3月29日より新プランに移行するそうで、更にお安くなるようです。

新プランの内容は以下の通り

新プラン名 初期費用 月額料金 メモリ HDD CPU
さくらのVPS 1G 0円 980円 1GB 100GB 仮想2コア
さくらのVPS 2G 1,980円 1,480円 2GB 200GB 仮想3コア
さくらのVPS 4G 5,980円 3,980円 4GB 400GB 仮想4コア
さくらのVPS 8G 9,980円 7,980円 8GB 800GB 仮想6コア

これまでのプランは以下の通りですから・・・

旧プラン名 初期費用 月額料金 メモリ HDD CPU
さくらのVPS 512 0円 980円 512MB 20GB 仮想2コア
さくらのVPS 1G 2,980円 1,480円 1GB 30GB 仮想2コア
さくらのVPS 1.5G 4,980円 1,980円 1.5GB 50GB 仮想2コア
さくらのVPS 4G 9,980円 3,980円 4GB 120GB 仮想4コア
さくらのVPS 8G 19,800円 7,980円 8GB 240GB 仮想4コア

 僕が借りている 1G のプランだと、初期費用が不要になって月額料金が 500円安くなるのかぁ。しかも HDD は増量されているじゃないですかぁ!

 そうなると気になってくるのが、「これまでのプランで借りている人はどうなるのか?」 という事なんですが、プレスリリースを見る限りでは、これまで通りのプラン内容で継続利用ができるものの、やっぱりこれまで通りの利用料金がかかるっぽいんですよね。

 継続利用ができるのは有難いのですが、新プランと同程度の料金になるように自動で利用料金の引き下げとかしてくれると嬉しいんだけどなぁ。

 まぁ、僕の場合は幸いと言いますか、借りている 1G のプランの初期費用が無料になったので、単純に乗り換えれば良いだけの話しなんですけどね。

 しかし、仮想2コアでメモリ 1GB、HDDが 100GB のサーバーが月額 980円で借りられるようになるとは、スゴイ世の中になったものだなぁ。

参照リンク
 ・「さくらのVPS」リニューアルのお知らせ(更新) | レンタルサーバはさくらインターネット

今さらFDのお世話になろうとは

TIMELY ポータブルFDD ブラック FDD-U02B

 ウチの会社、買ったPCは壊れるまで使い倒す主義なもんで、古~いPCが平気な顔して動いてたりします。

 とはいえ、寄る年波には勝てないというか、やっぱり古いPCから壊れていくんですよね。で、先日も Windows NT 4.0 で動いていたマシンが壊れました・・・orz

 そのPCってのは、あっちのDBからデータを引っ張ってきて、こっちのDBに加工して放り込むという仕事をしてたので、中にデータが溜まってたわけではなかったのですが、一時ファイルとかプログラムの実行ファイルは(出来るなら)確保しておきたいってんで、サルベージ(?)作業をしてきました。

 ちょっとアヤシイものの、一応OSは起動するのでネットワーク越しにファイルをコピーしようとしたんですが、Ping は通ってもネットワーク越しにアクセスできないんですよ。

 HDD を取り外して別のPCに繋げることも考えたんですが、それは最後の手段にしました。というのも、OSが動いている内にファイルを確保できれば、そっちの方がいいかな? と思ったからです。

 ここでいつもなら、USBメモリーの出番なわけですが、Windows NT 4.0 って USB が使えないじゃないですかぁ!

 仕方がないのでしばしの長考の後、「もしかして、FDなら出せるんじゃね?」 というところに気付いたわけですよ。なんてたって古~いPCですから、FDドライブは標準搭載です。しかも欲しいファイルのサイズを計ってみると、何とかFD1枚に収まってくれそうです。

 そうと分かれば、今度はFDのブランクメディアを探しです。見付かるかなぁ? と半信半疑で探してみると・・・、アッサリ見付かりました(笑)。どんだけ物持ちいいねん? ウチの会社(苦笑)。

 ここまで道具が揃えば、あとは作業するだけです。該当のPCのFDドライブが生きていることを祈りつつコピー! しかる後、FDをブランクメディアと共に発見された USB接続のFDドライブを使って読み出します。

 これが何の問題もなく、あっさり完了するじゃないですか。どんだけ丈夫なのよFDって(笑)。

 それにしても、今さらFDのお世話になろうとは・・・。でも、これで使い納めかな? て言うか、できればそうあって欲しいんですけどねぇ。

サーバーを 「Amazon EC2」 から 「さくらVPS」 に引っ越しました

 これまで Amazon EC2 で運用していたサービスを、さくらVPS での運用に変更しました。目的はコストの削減で、費用的には月額で半分以下に抑えられる計算です。

ここで改めてサーバースペックを比較してみると・・・

サービスCPUメモリHDD
Amazon EC2
Small Instance
1(仮想1コア)1.7GB160GB
(10GB + 150GB)
さくらVPS 1G1(仮想2コア)1GB30GB
(20GB + 10GB)

 料金的には、Amazon EC2 Small Instance が1時間当り 0.085ドルで、1ヶ月を30日として計算すると月額では 61.2ドルになり、1ドル 80円で換算すると 4896円になります。これに加えて、通信したデータ量によっては課金される場合があります。

 対して さくらVPS 1G は初期費用 2980円がかかるものの、月額 1480円の明朗会計で通信量による課金もありません。

 つか、そもそも僕には Amazon EC2 Small Instance でもオーバースペックだったんですよね。メモリも HDD もほとんど使ってなかったし(苦笑)。

 それにしても、ちょっと前までは個人の財布で借りられる(仮想)専用サーバーって、Amazon EC2 くらいしかありませんでしたが、その後いろいろなサービスが出てきて、目的に応じて選べるようになって、いい時代になったものだよなぁ。

参考リンク
 ・VPS(仮想専用サーバ)のさくらインターネット
 ・Amazon EC2 インスタンスタイプ
 ・Amazon EC2 Pricing

Oracle 10g が「ORA-00257」エラーで止まったので

いろいろ忘れていて対処に手間取ってしまったので、自分用にメモメモ。

とりあえず詳しいエラー内容を確認すると、

ORA-00257: アーカイブ・エラーです。解除されるまで内部接続のみにしてください。

原因:
ARCHプロセスがREDOログをアーカイブしようとして、エラーを受け取りました。問題がすぐに解決されない場合、データベースはトランザクションの実行を停止します。アーカイブ先のデバイスで、REDOログ・ファイルを格納する領域が不足している可能性があります。

処置:
アーカイバ・トレース・ファイルを確認して、問題の詳細な説明を調べてください。また、初期化パラメータARCHIVE_LOG_DESTに指定されたデバイスが、アーカイブに対して適切に設定されていることを検証してください。

ORA-00000~ORA-00830 より引用

とのことだったので、とりあえず下記のSQLで現在のログモードを確認。

SQL> SELECT LOG_MODE FROM V$DATABASE ;

結果は ARCHIVELOG でしたので、とりあえずはアーカイブログモードで動いているようです。ちなみに上記SQLの結果は、ARCHIVELOG | MANUAL | NOARCHIVELOG のいずれかになります。

次に、フラッシュリカバリ領域の空き状況(使用率)を確認します。

SQL> SELECT * FROM V$RECOVERY_FILE_DEST;

NAME           SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------- ----------- ---------- ----------------- ---------------
L:/oracle/log   4294967296 4119674880                 0              63

上記SQLの結果から、領域の最大サイズを示す SPACE_LIMIT と、使用済みの領域サイズを示す SPACE_USED を比べます。と、ここで空き容量がほとんど無くなっていることが判明・・・orz

ここからは RMAN で接続して作業です。ちなみに RMAN で接続するためのコマンドは以下の通り(いや、自分が忘れてたので)。また、USER/PASS の部分は、お使いの環境に合わせて置き換えてください。

rman target USER/PASS nocatalog

とりあえず、Oracle が認識しているファイルで、既に無くなっているファイルが無いか確認してみます。

RMAN> CROSSCHECK ARCHIVELOG ALL;

もしそんなファイルがあった場合は、上記コマンドの後で

RMAN> DELETE EXPIRED ARCHIVELOG ALL;

としてやると、無くなっていたファイル分の領域が未使用分として認識されます。ここまでやって問題がなければ、古いアーカイブログを削除するか、フラッシュリカバリ領域を拡張するしかありません。

古いアーカイブログを削除する場合は、OSのコマンド(もしくは操作)で削除するのではなく、やっぱり RMAN から行います。そうしないと、Oracle がファイルが無くなったことを認識できないので、消えたファイルのサイズが空き容量として認識されません。

もし、OSから直にアーカイブログファイルを削除してしまった場合は、上の 「CROSSCHECK ~」 と、「DELETE EXPIRED ~」 のコマンドで、Oracle に空き容量を再認識させてください。

というわけで、7日前より古いログを削除する場合のサンプルは以下の通り。

RMAN> DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-7' ;

また、フラッシュリカバリ領域を拡張する場合は、SQLで

SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=4G SCOPE=BOTH ;

とすると、合計で 4G のサイズを割り当ててくれます。

今回は、最終的にフラッシュリカバリ領域を拡張する事で対応しました。それにしても、ドライブに空き容量があって本当によかった。

参照リンク
 ・ORA-00000~ORA-00830
 ・ORA-00257 - オラクル・Oracle エラー FAQ
 ・Oracle / フラッシュリカバリ領域-ARCHIVELOGモード | WEBレシピ
 ・フラッシュバックリカバリの基礎知識 (1/3) - @IT
 ・アーカイブログの削除 (OSTL)

スポンサードリンク

プロフィール


  • 書いてる人:夢界 陸

    名古屋在住のおっさん。
    プログラミングやガジェットの話など、 日々の興味を徒然と綴っています。



    Twitterやってます @mukairiku



    運営サイト
    www.mukairiku.net

アクセスランキング


ブログ内検索

Licenses

  • Creative Commons License

OTHER


  • このブログのはてなブックマーク数

    ブログパーツ
Blog powered by TypePad

スポンサードリンク