2011年12月31日土曜日

応用情報処理 受験メモ

10月に受験した応用情報がこないだ結果返ってきて、まあ受かってたのでメモ。


<勉強期間>
期間としては8月〜10月でしたが、実質1ヶ月くらい。
→8月は週1しか勉強してないというやる気の無さ。でも、また同じ試験を受けたいとは全く思えなかったので9月中旬くらいから週2くらいに勉強時間を増やしました。

<勉強法>
○午前試験
ひたすら暗記。つかったのはこちら。

徹底攻略ポケット 応用情報技術者試験 午前対策 (ITプロ/ITエンジニアのための徹底攻略ポケット)

とにかくハードウェアやシステム監査などの知識がひどすぎました。
だいたい2~3周くらいしましたが、上2つのテーマのところは何度やっても覚えられず。
情報処理試験の午前は過去問から相当数出題されるというのを信じてとにかく何度も問題といたり、問題眺めたりしてました。

○午後試験

応用情報技術者 午後問題の重点対策〈2012〉 (情報処理技術者試験対策書)

私が選択しようと思っていたのは

  • マネジメント系
  • ネットワーク
  • データベース
  • セキュリティ
  • ソフトウェア開発

このへんでした。
問題集を全部解く気にはなれなかったし時間もそんななかった、けど受かりたいっていう贅沢な考えをしていたので、とにかく上記5つのテーマを解きまくりました。
解きまくったといっても結局1周しかできず。。。
「こういうかんじで問題出るのねー」で終わりました。


<試験>
○午前試験
かなり見覚えがある問題ばかり。
自信を持って解けたのもありましたが、「これ問題見た事はある。でも解き方忘れた」みたいなのが多くて、手応えは微妙。

○午後試験
ネットワークが難し過ぎて断念。正確には、覚えてなけりゃできない問題が出てきて、覚えてなかったので断念。
そのかわりマネジメントをもう一個余計にといて切り抜ける。。


<試験後>
各予備校とかが模範解答だしてて、午後がボーダーラインすぎてどうしようと大騒ぎ。
結果は、
○午前試験→76%
○午後試験→65%
で合格してました。


<振り返り>
市販の問題集(=つまり過去問ってことなんだけど)やればどうにかなる。
次はDBでも受けようかしら。


<全然関係ない話>
試験に申し込むのが若干遅く、家から1時間くらいのところに飛ばされました。電車では30分もかからないのにとにかく歩く歩く。。。
生まれて初めて「女子大」に足を踏み入れましたが、もうキャンパスの雰囲気がCan-Canなかんじでぽかんとしてしまいました。

Bronze DBA 11g 受験メモ

先日、Bronze DBA 11g を受けてきました。
んで、合格したので、Oracle Master Bronzeが取れたので、先日の記事と同様、どんなかんじで勉強してきたのかをメモ程度に残します。

<勉強期間>
実質1ヶ月くらい。
→電車の中とか、家に帰ってきてからとか。休みの日とかも。

<勉強法>
SQLは自分で書いたことがあったのでいきなり問題演習でOKだったのですが、DBAというかDBを管理したり自分でインストールしたり設定したりしたことが一切無かったので、まずは教科書を読んでとにかく勉強勉強。
実際に触れたことがないので、教科書を読むだけでは辛いかなと最初は思っていたのですが、勉強していくうちに色々知識がつながっていったのでどうにかなりました。
読んだのはこちら。

やさしく学ぶオラクルマスター Bronze DBA 11g

バックアップ系の知識がいまいちだったので補足として以下の本も読んだりしました。

Bronze Oracle Database【DBA11g】編(試験番号:1Z0-018J)(DVD付) (オラクルマスター教科書)

一通り読み終わったら(=読みながらノートとかにもメモしつつ)問題演習です。問題集はこちら。

徹底攻略 ORACLE MASTER Bronze DBA11g問題集 [1Z0-018J]対応 (ITプロ/ITエンジニアのための徹底攻略)

だいたい2周〜3周くらいしました。最初は正答率30%くらいで残念すぎる結果でしたが、何度も解いてくうちに7割〜9割できるようになりました。
ちなみに最後についている模擬試験は合格ラインは60%で、結果は65%くらい。なかなかぎりぎり。


<試験>
どっからどうみても見覚えがある問題ばかり。
SQL基礎のときは難しぎて泣きそうになりましたが、DBA 11gはかなり問題集通り。
試験時間は75分だったのですが、30~40分くらいで一通り問題を解き終えて、30分かけて見直して試験終了。

正答率77%で合格でした。


<振り返り>
市販の問題集やればどうにかなる。

2011年11月12日土曜日

11g SQL基礎Ⅰ 受験メモ

というわけで、今日は11g SQL基礎Ⅰを受けてきました。


Oracle Master Bronze ( Oracle Database 11g)を取得するためには
  • 11g SQL基礎Ⅰ
  • Bronze DBA 11g
の両方に合格せねばならず、Bronze取りたかったので今回はSQL基礎。どんなかんじで勉強してきたのかをメモ程度に残します。

<勉強期間>
実質1ヶ月くらい。
→電車の中とか、家に帰ってきてからとか。休みの日とかも。

<勉強法>
SQLの参考書を読みながら、問題を解く。シンプルです。使ったのはこれです。
1周といて、間違えたものをもう一回。

徹底攻略ORACLE MASTER Bronze 11gSQL 基礎I問題集[1Z0-051J]対応 (ITプロ/ITエンジニアのための徹底攻略) [単行本]


あとOracleではないですけど、OSSのDBに触れる機会があったのでそこでSQLを書いたりしてたのも、結構役立ちました。
SQLの構文とかは、やはり単なる暗記では飲み込みが悪いと思います。自分で打って、エラーを返されることで(笑)、身に付きます。
ただ、ルール的なものは座学で頑張りました。例えば、「SQL関数のネストはどのくらいのレベルまでいけるか」とか「V$ビューとはなんぞや」とか。
それで試験前日に模擬試験を解いてみる。合格ラインは60%で、結果は70%くらい。


<試験>
はじまって10秒で「ん?」ってなりました。
。。。模擬試験と違うぞと。
まず問題に出てくるSQLが長い。
要は、問題集でやってきたような1問1問が複合されて出てくるので問題集より難しく見えたというかんじでした。
とりあえずポチポチ押して回答をすすめて、最後10分を残して一通り終了。見直しは結局7問くらいしか終わらず、試験終了。


結果は合格。合格ライン60%の、正答率60%。ぎりっぎりでした。


<振り返り>
問題集はたぶんどれを使っても同じだと思います。どれも「これじゃ足りません」っていうレビューが1つくらいはついてるし(笑)
そういう前提で勉強すると良いかなと思いますー。

2011年9月8日木曜日

JBoss+PostgreSQLでコネクションプーリング

JBossとPostgreSQLでコネクションプーリングしてみました。
Javaです。

まずは、JBossのほうに設定。deployディレクトリに設定ファイルであるpostgres-ds.xmlを入れます。
このdsファイルは、docファイルに各種データベース用のサンプルがあるので、例えばMySQLとつなぎたいとかOracleとつなぎたいという場合でも簡単にできます。

postgres-ds.xml

<datasources>
  <local-tx-datasource>
    <jndi-name>PostgresDS</jndi-name>
    <connection-url>jdbc:postgresql://localhost:5454/test</connection-url>
    <driver-class>org.postgresql.Driver</driver-class>
    <user-name>postgres</user-name>
    <password>postgres</password>
    <metadata>
         <type-mapping>PostgreSQL 7.2</type-mapping>
      </metadata>
  </local-tx-datasource>
</datasources>


ではではJavaで実装。
ちょっとクラス分けしてみました。
まずはコネクションを取得するためのクラス。

ConnectionManager.java

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class ConnectionManager {
 /**
  * コネクションを取得するメソッド
  * @return Connection
  * @throws SQLException
  * @throws NamingException
  */
 public Connection getConnection() throws SQLException, NamingException {
  InitialContext icx = new InitialContext();
  //postgres-ds.xmlに書いたJNDI名を書く。
  //JBossを起動したときにコンソールに表示されるので、それを書くと尚確実。
  DataSource ds = (DataSource) icx.lookup("java:PostgresDS");
  Connection conn = ds.getConnection();
  return conn;
 }

}


こちらはちゃんと実行できるかどうかのテスト用Servlet。

ConnectionGetSample.java

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ConnectionGetSample extends HttpServlet {

 private static final long serialVersionUID = 1L;

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  // 準備
  ConnectionManager cm = new ConnectionManager();
  Connection conn = null;
  PreparedStatement ps = null;
  ResultSet rs = null;

  // SQL文(ここではテストでpostgresユーザーを出すSQLにしてみる)
  String sql = "select * from pg_user";

  try {
   // コネクション取得。
   // ConnectionManagerクラスでthrowしてるExceptionを
   // こっちでcatchする。
   conn = cm.getConnection();

   // SQL実行
   ps = conn.prepareStatement(sql);
   rs = ps.executeQuery();

   // 結果取得→出力
   while (rs.next()) {
    System.out.println(rs.getString(1));
   }

  } catch (SQLException e) {
   e.printStackTrace();
  } catch (NamingException e) {
   e.printStackTrace();
  } finally {
   // クローズ処理
   if (rs != null) {
    try {
     rs.close();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
   if (ps != null) {
    try {
     ps.close();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
   if (conn != null) {
    try {
     conn.close();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
  }

 }

}




で、できました。

2011年8月20日土曜日

PostgreSQLでポート番号変更

PostgreSQLを起動しようとして、以下なメッセージが出た場合、ポート番号がかぶってます。


$ pg_ctl start
server starting

$ LOG:  could not bind IPv6 socket: Address already in use
HINT:  Is another postmaster already running on port 5432? 
If not, wait a few seconds and retry.
LOG:  could not bind IPv6 socket: Address already in use
HINT:  Is another postmaster already running on port 5432? 
If not, wait a few seconds and retry.
LOG:  could not bind IPv4 socket: Address already in use
HINT:  Is another postmaster already running on port 5432?
 If not, wait a few seconds and retry.
WARNING:  could not create listen socket for "localhost"
FATAL:  could not create any TCP/IP sockets

何回も言われてるますが、5432が使われてるとか。
PostgreSQLはデフォルトではポート番号5432を使うようになってます。かぶってたら違う番号を使うように設定します。

設定はだいたいpostgresql.confというファイルで行います。
最初、portが指定されているところは#でコメントアウトされてますので、#を外して5432以外の番号を指定してあげるだけでOKです。
ここでは5433にしてみました。


$ cd /Library/PostgreSQL/9.0/data //ディレクトリ移動
$ vi postgresql.conf //以下のように編集




では、起動やってみます。

$ pg_ctl start
server starting


できたー!

PostgreSQLのセットアップその2

先の記事で、軽くいい加減なPostgreSQLのインストールを紹介したので、もうちょっと色々設定してみます。

「ターミナルからサーバー起動&停止ができるようにする」ってことしました。

*ここではHogeユーザーがPostgreSQLの実行ユーザーとしてます。セキュリティの観点からroot権限のユーザーだとPostgreSQlは実行できないようになってるのでお気をつけ。

(1)パスを設定する
環境設定ファイルの.bash_profileファイルを開きます。

//ファイルのあるディレクトリに移動
$ cd ~

//ファイルあるか確認
$ ls -a

.
..
.DS_Store
.RData
~~中略~~
.bash_history
.bash_profile
.bashrc

//ファイルを編集
$ vi .bash_profile

//以下の行を追加して上書き
export PATH=$PATH:/Library/PostgreSQL/9.0/bin
export PG_HOME=/Library/PostgreSQL/9.0
export PGDATA=$PG_HOME/data
export PG_LIB=$PG_HOME/lib

//ファイルを再読み込みして設定を反映させる
$ source .bash_profile


PATHにサーバー起動コマンドが入っているディレクトリ(ここでは/Library/PostgreSQL/9.0/bin)を追加することで、どこからでも起動や停止ができるようしています。

また、サーバーを起動する場合には、データベースに格納するデータなどをどのディレクトリに保存するかを設定してあげる必要があります。
それがPGDATAの環境変数で指定してあげた場所です。もちろんこれも任意の場所です。



(2)PostgreSQLのディレクトリの所有者をHogeさんにしてあげる。
コマンドを実行するためには、そのコマンドが入ったディレクトリをPostgreSQLの管理ユーザーの所有物にしなければ!というわけで、しました(これしないと、Permission deniedとかいって怒られます)
この作業はroot権限のユーザーではないとできないので、一度rootになってから、コマンド実行します。


//rootになる。パスワードを求められるので入力。
$ sudo su - 

//PostgreSQLがはいったディレクトリをHogeさんの所有物にする。
# chown -R Hoge /Library/PostgreSQL/9.0 

# ls -l //確認
total 16
-rw-------   1 Hoge  daemon   230 Aug 20 01:15 .bash_history
drwx------   3 Hoge  daemon   102 Aug 20 01:09 Library
drwxr-xr-x  32 Hoge  daemon  1088 Jun  4 19:08 bin
drwxr-xr-x   7 Hoge  daemon   238 Jun  4 19:07 doc
drwxr-xr-x  29 Hoge  daemon   986 Jun  4 19:08 include
drwxr-xr-x   3 Hoge  daemon   102 Jun  4 19:07 installer
drwxr-xr-x  32 Hoge  daemon  1088 Jun  4 19:08 lib
drwx------  19 Hoge  daemon   646 Aug 20 01:10 olddata
drwxr-xr-x   3 Hoge  daemon   102 Jun  4 19:07 pgAdmin3.app
-rwxr-xr-x   1 Hoge  daemon   373 Jun  4 19:09 pg_env.sh
drwxr-xr-x  14 Hoge  daemon   476 Jun  4 19:09 scripts
drwxr-xr-x   5 Hoge  daemon   170 Jun  4 19:07 share
drwxr-xr-x   3 Hoge  daemon   102 Jun  4 19:07 stackbuilder.app
drwxr-xr-x   3 Hoge  daemon   102 Jun  4 19:09 uninstall-postgresql.app

# exit //元にもどる
logout


厳密にやるなら、パーミッションを700(所有者以外には一切触らせない)とかにすべきなのかもですがローカルで使うだけなので特に設定はしませんでした。


(3)PGDATAフォルダ作成
もともとインストーラーでインストールする時点でこのフォルダは設定してあるのですが、改めて作成します。
私の場合は、現在あるdataフォルダのバックアップをとってから削除をしました。その後、「文字コードUTF8で日本語対応」なデータベースがつくれるような設定をdataフォルダにしてあげました。


//ディレクトリをコピー
$ cp -R /Library/PostgreSQL/9.0/data/ /Library/PostgreSQL/9.0/cdata/ 

//削除
$rm -rf /Library/PostgreSQL/9.0/data/  

$ ls //確認
Library				pgAdmin3.app
bin				pg_env.sh
doc				scripts
include				share
installer			stackbuilder.app
lib				uninstall-postgresql.app
cdata


//initdbというコマンドで、dataディレクトリを作成。
//いろいろ出てくるけど、最後にSuccessって出てくればOK

$ initdb -E UTF8 --no-locale 

creating directory /Library/PostgreSQL/9.0/data ... ok
creating subdirectories ... ok

~中略~
Success. You can now start the database server using:

postgres -D /Library/PostgreSQL/9.0/data
or
pg_ctl -D /Library/PostgreSQL/9.0/data -l logfile start


以上で設定完了です。では、やってみます。

■サーバーの稼働状態を確認します(pg_ctl status)

$ pg_ctl status
pg_ctl: no server running

■サーバー起動(pg_ctl start)

$ pg_ctl start
server starting

■サーバー停止

$ pg_ctl stop
waiting for server to shut down....
LOG:  received smart shutdown request
LOG:  autovacuum launcher shutting down
LOG:  shutting down
LOG:  database system is shut down
done
server stopped

できたー!






2011年7月31日日曜日

crontabメモ

crontabの使い方メモ。

■crontabとは?

設定した時間になったら、設定したコマンドを実行する子です。

■crontabの設定例

crontabに-eオプションをつけることで、設定ができます。
実行すると、画面が切り替わります。初めて設定する場合は白紙?な画面。
以降は、viエディタなかんじで記述します。
設定項目は左から「分」「時」「日」「月」「曜日」「実行コマンド」で書く。


$crontab -e

//(例1)毎時10分になると「hello」と出力。
10 * * * * echo "hello"

//(例2)毎日12時になると「iitomo」と出力
00 12 * * *  echo "hello"

//(例3)2分おきにdateコマンドを実行して、ログファイルに出力
*/2 * * * * date >> /Users/dateLog.log


■crontabの確認


crontab に -lオプションをつける。

$ crontab -l
*/2 * * * * date >> /Users/dateLog.log

//実行確認
$ ls
dateLog.log

$ view dateLog.log
Sun Jul 31 15:14:01 JST 2011
~
~
~
~
~
~
~
~
~
~                                                     
"dateLog.log" [readonly] 1L, 29C

■実行するユーザーを限定したいとき

-u オプションをつけてユーザーを限定します。

//user1さんの設定するcrontabを表示する
$crontab -u user1 -l


以上!