2011年9月9日金曜日

AndroidでSocket通信を行うとPermission denied

Androidアプリケーションでsocketプログラミングを行う際、そのままだとconnect時にPermission deniedが発生して接続できません。
これを回避するためには、AndroidManifest.xmlにuses-permissionを追加すればOKです。

追加するコードは以下の通り

AndroidManifest.xmlを直接編集して追加すれば問題無いですが、折角なのでeclipseを利用した追加方法を紹介します。

[環境]
Mac OSX Version 10.6.8
Eclipse IDE for java Developers Version:Indigo Build id:20110615-0604

【eclipseでのuses-permission追加手順】

  • Package Explorer で AndroidManifest.xmlをダブルクリックして開きます。
  • Manifest編集画面が表示されるので、Permissionsタブを選択します。
  • Addボタンを押下すると、Permission追加用ダイアログが表示されるので、Uses Permissionを選択して OKを押下します。
  • Attributes for Uses Permission の Name に android.permission.INTERNET と入力します。(コンボボックスから選択してもOK)
  • 保存して、AndroidManifest.xmlタブを開いて、追加した uses-permission が表示されていれば終了です。

2011年8月25日木曜日

Googleマップの埋め込み方法

Google マップをホームページやブログなどに埋め込むときのふきだしを消す方法です。

←マーカー表示必要、吹き出し表示不要

<手順>
1.Googleで地図を検索



2.赤色のマーカーを右クリックして「ここからのルート」を選択


3.赤色のマーカーが緑色になるので、この状態で、右上にある「このページのリンク」をクリック


4.「埋め込み地図のカスタマイズとプレビュー」をクリックすると、地図のサイズもカスタム可能
  あとは、HTMLを貼り付けるだけ


以上


Oracle11gメモリ簡易チューニングメモ

前置き:メモですので、間違いがあるかもしれません。


<初期値について>

MEMORY_TARGET = 0
10gのメモリ管理仕様になる。

MEMORY_TARGET > 0 AND SGA_TARGET > 0 AND PAG_AGGREGATE_TARGET > 0
SGA_TARGET + PAG_AGGREGATE_TARGET <= MEMORY_TARGET <= MEMORY_MAX_TARGET

MEMORY_TARGET > 0 AND SGA_TARGET > 0 AND PAG_AGGREGATE_TARGET = 0
PAG_AGGREGATE_TARGET = MEMORY_TARGET - SGA_TARGET

MEMORY_TARGET > 0 AND SGA_TARGET = 0 AND PAG_AGGREGATE_TARGET > 0
SGA_TARGET = min(MEMORY_TARGET - PAG_AGGREGATE_TARGET , SGA_MAX_SIZE)

MEMORY_TARGET > 0 AND SGA_TARGET = 0 AND PAG_AGGREGATE_TARGET = 0
SGA_TARGET = MEMORY_TARGET*60%
PAG_AGGREGATE_TARGET = MEMORY_TARGET*40%

以上のMEMORY_TARGET > 0 の場合は必要に応じてSGAおよびPGAを削減または増大する。

10g補足

SGA_TARGETを使用することによって、データベースで割り当てられる共有メモリー領域のサイズを正確に制御する。
起動時にSGA_TARGETをSGA_MAX_SIZEより大きい値に設定すると、そのSGA_TARGETに対応してSGA_MAX_SIZEが増加する。

PGA_AGGREGATE_TARGETを使用すると、すべての専用セッションの作業領域のサイズ設定が自動的に行われ、これらのセッションについてはすべての*_AREA_SIZEパラメータが無視される。ある時点での、インスタンスのアクティブな作業領域で使用可能なPGAメモリーの合計は、パラメータPGA_AGGREGATE_TARGETから自動的に導出される。

この量は、PGA_AGGREGATE_TARGETの値から、システムの他の構成要素により割り当てられたPGAメモリー(たとえば、セッションにより割り当てられたPGAメモリー)を差し引いた値に設定される。
結果として、PGAメモリーは、特定のメモリー要件に基づいて個々のアクティブな作業領域に割り当てられる。

初期化パラメータWORKAREA_SIZE_POLICYは、セッション・レベルおよびシステム・レベルのパラメータで、
設定できる値はMANUALまたはAUTOの2つのみです。デフォルトはAUTOです。
データベース管理者は、PGA_AGGREGATE_TARGETを設定して、次にメモリー管理モードを自動から手動に切り替えます。

SQLチューニングの備忘録


前置き:SQLチューニングをまとめてみました。メモですので、間違いがあるかもしれません。

SQLチューニングは、処理時間・アクセスする必要のあるデータ・ブロック数を減らすことを目的とします。
結果、データベース・バッファ・キャッシュがより効率的になり、キャッシュ・ミスの場合でも必要なデータ・ファイルへのI/Oは小さくなる。システム負荷を低減することが可能です。

用語:オプティマイザとは、表へどのような経路でアクセスし、どのような順番、方法で結合するか実行計画を効率的に決定するのがオプティマイザの役割。Oracle 10gからはコストベースのオプティマイザのみがサポート対象。
統計情報は、DBMS_STATSパッケージもしくはANALYZEコマンドで取得します。

<レコードアクセス方法>

1.全表スキャン
2.ROWIDスキャン
3.索引スキャン
がある。
索引スキャンでは、「索引ブロックの読み込み+データ・ブロック」の読込みとなる。
検索したいレコード件数が、レコード全体の5~15%程度までの場合は、索引スキャンの方が効率的といわれています。

<結合方法>

1.ネステッド・ループ結合
ネステッド・ループ結合を効率化するためには、レコード数がより少ない方を外部表とする。
レコード数に大差がない場合には、結合条件列の索引スキャンがより効率的な方を内部表とする。

2.ソート/マージ結合
結合対象が多く、なおかつ結合条件が等価条件ではない場合に使用する。

3.ハッシュ結合
結合条件に等価条件が指定され、大量のレコードなど表の大部分を結合する場合に有効な結合方法。

<SQLチューニングが必要なもの>

1.1実行当たりの実行時間が長いSQL
2.ディスク読み取りブロック数が多いSQL
3.バッファの読み取り数が極端に多いSQL
4.実行回数が極端に多いSQL

<対象SQLの取得方法>

動的パフォーマンスビューより、取得します。
主にV$SQL、V$SQL_TEXT、V$SQL_PLANの3つとなります。共有SQL領域に保持されているSQLの情報を表示します。
V$SQL_TEXTを参照することで完全なSQLを取得することが可能。

↓全文を取得するSQLの例

set pages 100 feed off timing off echo off lines 140
SELECT sql_text
FROM v$sqltext
WHERE hash_value=?
and address='?'
ORDER BY piece;

<SQLの記述を統一する>

実行されるたびに条件の値が異なるSQLを実行しているアプリケーションでは、
リテラル値部分を変数化し、SQLの記述を統一する。

<SQL対処例>

■NULL値の検索
‐列名 IS NULL ‐NULL値を別のデータに置き換える
‐ビットマップ索引を使用する

■暗黙の型変換
‐比較するデータ型を列のデータ型に合わせる

■索引列に対して、関数や算術を実施
‐関数索引を使用する(Oracle 9i以上で使用可能)

■LIKEの中間一致、後方一致
‐できるかぎり使用を控える

■!=、<>の使用
‐inで置き換える(可能な場合)

★複合索引の有効利用は、検索性能を向上させるうえで、利用できる機会が多い。

■件数の多い表同士を結合し、全レコード出力する場合
ネステッド・ループ結合→不向き
ソート/マージ結合→結果を結合列でソートして出力する場合に有効。
双方の結合列にNOT NULL制約が指定されており、索引が存在する場合、非常に効率的
ハッシュ結合→システム・リソースに余裕がある場合には最適

■一方の表に絞り込み条件を指定して表を結合し、少数のレコードを出力する場合
ネステッド・ループ結合→目安として索引を使用して表の15%以内の絞り込みであれば最適
ソート/マージ結合→不向き
ハッシュ結合→目安として索引を使用して表の15%以上の絞り込みで、なおかつ等価条件があれば使用を検討

★結合条件が等価条件でないためにハッシュ結合を行えない場合以外は、大量の結合処理では、まずハッシュ結合!

■更新系
‐MERGE文を利用する
‐ダイレクトロードインサートを利用する
‐パラレルDMLを利用する

★パラレルDMLを利用するには以下の手順で設定が必要

1.初期化パラメータ「PARALLEL_MAX_SERVERS」に適切な値を設定する

2.パラレルDMLを実行するセッションでパラレルDMLの利用を可能にする
SQL> alter session enable parallel dml;

3.パラレルDMLのSQLを実行する

SQL> DELETE FROM lineitem;


↓確認
SQL> SELECT table_name,degree

  2  FROM user_tables

  3  WHERE table_name='LINEITEM';



TABLE_NAME                     DEGREE

------------------------------ --------------------

LINEITEM                                1
DEGREEが「1」の場合、パラレル度が設定されていません。

4.パラレルDMLの実行を確認

SQL> SELECT * FROM v$pq_sesstat;


<その他>

・駆動表を意識してSQLを書く
・NOT IN ではなく NOT EXIST を使う
・where 条件には '%値%' はなるべく使わない
・EXPLAINやTRACEの使い方
・Where句の解析順序とインデックスの作成順
・Like文の使い方の注意
・Where句の左辺での関数使用の禁止
・ヒント文の使い方に注意
・外部結合しまくりのSELECT句はできるかぎり書かない。
・FROM句にテーブル名をいっぱい書かない。
・半角カタカナ使わない。
・GOTOは使わない。
・暗黙カーソルでの問合せは使わない。
・SQL構文は、すべて大文字で記述したほうがパフォーマンスがよくなる。
また、PL/SQLについてもすべて大文字で記述したほうがよい。

以上。

2011年8月10日水曜日

Windows Mobile 6 開発環境構築

【用意するもの】


【構築手順】

  • Visual Studio 2005 Professional (Standardでも可) をインストール
  • Visual Studio 2005 SP1 をインストール
  • .NET Compact Framework 2.0 SP1 をインストール
  • Microsoft ActiveSync4.5 をインストール
    ・ActiveSyncは別バージョンを同居させることが出来ないらしいので、古いバージョンがある場合は先にアンインストールしておくこと。
  • Windows Mobile 6 SDK をインストール
    ・SDKにはStandardとProfessionalの二種類がありますが、違いは開発ターゲットのOSです。参考)Windows Mobile 6 の開発者向け新機能
    ・Windows Mobile 6 SDKをインストールする時に 01〜04 の中でインストールされていないものを検出して警告を出してくれるので、先に何が足りないかを確認しておくといいかもしれません。
  • Windows Mobile 6 日本語版エミュレータ をインストール
    ・必須ではありません。SDKには英語版のエミュレータが含まれているため動作させることは可能ですが、日本語は文字化けします。

【プロジェクトの作成例】

  • [ファイル]→[新規作成]→[プロジェクト]→[Visual C++]→[スマートデバイス]→[Win32 スマートデバイスプロジェクト]を選択し、プロジェクト名を入力して[OK]を押下
  • ウィザードが起動したら[次へ]を押下し[プラットフォーム]画面で[インストール済 SDK]から[Windows Mobile 6 Professional (またはStandard) SDK]を選択して次へ
  • [アプリケーションの設定]画面で必要に応じた設定を行い[完了]ボタンを押下


・ビルド時にlibbmtd.pdbで警告LNK4099が出る件について
無視して問題ないらしいです。
http://support.microsoft.com/kb/934632/ja

2011年8月9日火曜日

またまた、いまさらOracle9i

Oracle9i カーソル・エラーについて

■カーソル数不足によるエラー

【エラーの内容】

[エラー番号] ORA-01000
[エラーメッセージ] 最大オープン・カーソル数を超えました。
[エラー原因] ホスト言語プログラムがオープンしようとしているカーソルの数が多すぎます。1ユーザー当たりのカーソルの最大数は、初期化パラメータOPEN_CURSORSによって決定されています。
[エラー処置] プログラムを変更して、使用するカーソルの数を減らしてください。繰り返しエラーが発生する場合は、Oracleを停止して、OPEN_CURSORSの値を大きくしてから、Oracleを再起動してください。

PL/SQLストアド・プロシージャで使用するカーソルは、検索結果のみをクライアント側で取得できるので、非常に効率的です。
但し、プログラミング時にカーソルの使い方を正しく意識していないと、「ORA-01000」エラーとなるケースがあります。

OPEN_CURSORSの値を増やせば、確かに上記のエラーが発生する確率を減らすことはできます。しかしながら、逆にリソースを多く消費するようになり、Oracleのパフォーマンスが全体的に低下させてしまいます。

カーソルというもの自体リソースを多く消費するものなので、大量に使用するというのはアプリケーションの仕組み的にやはり好ましくありません。
上記のエラーを回避するにはOPEN_CURSORSの値を増やすよりも、むしろアプリケーションで必要以上にカーソルを使用するようなロジックになっていないかどうかをまず見直すことのほうが大事です。

ただ、現状長年動作しているプログラムですので、スレッドなどを使用しているマルチタスクのアプリケーションや、アプリケーション修正時の2次障害を考えると、アプリケーション側での対応は難しい状況と認識しています。ですので、初期化パラメータファイル(init.ora)の 「OPEN_CURSORS」の値を変更することになるかと思います。その際に変更値の指針が必要です。

初期化パラメータ「OPEN_ CURSORS」のデフォルト値はOracle8i以前では「50」、Oracle9iとOracle 10gでは「300」がデフォルトの値です。


<以下確認用>
SQL>SHOW PARAMETER OPEN_ CURSORS
リスト1 初期化パラメータ「OPEN_ CURSORS」を確認

変更に当たって、カーソルがどの程度開かれているかを確認

「V$OPEN_CURSOR」で確認できます。このビューは、各ユーザー・セッションが
現在すでにオープンして解析しているカーソルを示します。
SQL>DESC V$OPEN_CURSOR
列名 データ型 格納されているデータの内容
SADDR RAW(4 | 8) セッション・アドレス
SID NUMBER セッション識別子
USER_NAME VARCHAR2(30) セッションにログインしているユーザー
ADDRESS RAW(4 | 8) HASH_VALUE とともに使用され、セッションで実行されているSQL 文を一意に識別する
SQL_TEXT VARCHAR2(60) オープン・カーソルに解析されるSQL文の最初の60文字

V$OPEN_CURSOR動的パフォーマンスビュー
セッションごとに使用されるカーソルの数をユーザー名をキーにして検索します。
「OPEN_CURSORS」の値近くまで増大している場合、値を変更する必要があります。
SQL>
SELECT
  SID AS セッションID,
  USER_NAME AS ユーザ名,
  COUNT(SID) AS カーソル数
FROM V$OPEN_CURSOR
WHERE USER_NAME = '[ユーザ名]'
GROUP BY SID,USER_NAME;
    
SELECT s.sid,username,
 (SUM(DECODE(name,'opened cursors cumulative',value,0))) "OPENED CURSOR", --セッション開始以降のオープン・カーソル合計数
 (SUM(DECODE(name,'opened cursors current',value,0))) "CURRENT CURSOR" --現行オープン・カーソル数
FROM v$session s,v$sesstat se,v$statname sn
WHERE se.sid = s.sid
 AND se.statistic# = sn.statistic#
 AND name in ('opened cursors cumulative','opened cursors current')
 AND username is not null
 --and s.sid=142
GROUP BY s.sid,username
ORDER BY "OPENED CURSOR" desc,"CURRENT CURSOR" desc;
<カーソルクローズについての参考>

次のSQLを実行した場合,その時点で開いているカーソルはすべて閉じられます。
また,暗黙的ロールバックありのエラーが発生した場合にも,カーソルはすべて閉じられます。
・定義系SQL(クライアント環境定義PDCMMTBFDDLにYESを指定している場合)
・PURGE TABLE文
・COMMIT文
・DISCONNECT文
・ROLLBACK文
・PREPARE文(クライアント環境定義PDPRPCRCLSにYESを指定している場合)
・内部DISCONNECT(DISCONNECT文を実行しないでUAPを終了する)

ただし,ホールダブルカーソルは,COMMIT文を実行した場合は閉じられません。
PURGE TABLE文を実行し,ホールダブルカーソルで開いている表が検査保留状態に設定された場合,ホールダブルカーソルは閉じられます。
ALLOCATE CURSOR文 形式2で手続きが返却した結果集合の組に割り当てられたカーソルに対してCLOSE文を実行した場合,
現在参照している結果集合の次の結果集合が存在するときは,現在参照している結果集合は閉じられます。カーソルは次の結果集合を参照し,
次のリターンコードが設定されます。

SQL連絡領域のSQLCODE領域に121
SQLCODE変数に121
SQLSTATE変数に'0100D'
また,このときカーソルは開いた状態となります。

一方,次の結果集合が存在しない場合は,現在参照している結果集合は閉じられ,次のリターンコードが設定されます。
SQL連絡領域のSQLCODE領域に100
SQLCODE変数に100
SQLSTATE変数に'02001'
また,このとき拡張カーソル名はどのカーソルも識別しなくなります。

2011年8月5日金曜日

Sea-NACCS:輸出許可情報

某サイトのSea-NACCSゲートウェイサーバについて、
輸出許可情報に関する追加設定をしました。

◎対象電文
-------------------------------------------------------------------------------------------------------------
 業務コード 非同期電文  電文内容
-------------------------------------------------------------------------------------------------------------
 VAN    SAT0240   バンニング情報登録(コンテナ単位)
 VAE    SAT0240   バンニング情報登録(輸出管理番号単位)
 VAA    SAT0250   バンニング情報追加
 VAC    SAT0250   バンニング情報取消(管理番号あり)
 VAC    SAT0260   バンニング情報取消(管理番号なし)
 VAD    SAT0250   バンニング情報訂正
-------------------------------------------------------------------------------------------------------------
 EDC    SAE4080   輸出申告
 EAC    SAE4510   輸出許可内容変更申請
-------------------------------------------------------------------------------------------------------------

あとはアプリがちゃんと取込んでくれたらOK!
北京の皆さん、テスト、テスト、テストー。。。たのみますよ!(^^)v

以上

Oracle9i初期設定ファイルについて(いまさら)

ハード障害でOracle9iの設定をしました。いまさらですが・・・


初期設定ファイルについて

初期設定ファイルは二つもある。
優先順位や編集方法を記載します。

Oracle8までは、初期設定ファイル(init*.ora)を変更して再起動の手順でOK

初期設定ファイル=pfile pfileは、テキストで編集可能。

Oracle9iからは、「サーバーパラメータファイル」が追加されました。=spfile

spfileは、バイナリでテキストで編集不可です。
全部、sql*plusからの命令で編集

例:
SQL >alter system set sga_max_size = 300M scope = spfile;

<パラメータいろいろ>

db_block_size
db_cache_size
db_name
background_dump_dest
control_files
fixed_date
instance_name
java_pool_size
large_pool_size
service_names
sga_target
sga_max_size
shared_pool_size

pfileとspfileという二つの初期設定ファイルが存在します。

<優先順位>

指定したpfile:startup pfile='[ファイル]'→spfileSID.ora→spfile.ora→initSID.ora→init.ora

<spfileとpfileの格納場所>

SQL > select value from v$system_parameter where name ='spfile'

→表示されない場合pfileが有効。

ちなみにpfile格納場所
%ORACLE_HOME%\DATABASE\INIT%ORACLE_SID%.ORA


<spfileとpfileの切り替え>

pfile → spfile
SQL> create spfile='ファイル名' from pfile='ファイル名'


spfile → pfile
SQL> create pfile='ファイル名' from spfile

※フルパス記載

初期設定ファイルを変更してサーバーを再起動しないと設定変更が反映されないものと
再起動しなくても設定変更が反映するものがあります。

SQL> create pfile='ファイル名' from spfile
pfileで、その中身を確認。設定変更が反映されているかがわかります。

以上

2011年8月4日木曜日

Office Conveni !!!

来ました、待ちに待ったオフィス♪♪♪



カップラーメンも置いて貰いました。

SKALもあるYO!!




ドリンク50円~100円


冷蔵庫 無料レンタル
(電気代は月々200~500円・・・らしい)


設置・取り外し共に無料






飲んだ分だけの支払いで良いので、損はなし!!
夏のお供が8月に到来です。待ちに待ちました。

で、そのお味は・・・・・・・・、分からなぁ~いヽ(^。^)ノ
現在、冷蔵庫の冷やし待ち。。。待ちきれず、ブログUp!!


”オフィスコンビニ”はこちら

Syntax Highlighter導入

当ブログにSyntax Highlighterを導入しました。

コードを投稿する際に使用すると以下のように綺麗に整形されて表示されます。

・使用方法はこちら
http://alexgorbatchev.com/SyntaxHighlighter/manual/installation.html
・適用可能なコード一覧はこちら
http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/

エクサーブログ開始のご挨拶

株式会社エクサー・システム・プロダクトのブログにご訪問頂き、ありがとうございます。

さて、弊社メンバーによるブログを不定期ではありますが、開始いたします。

主な目的は以下の3つです。
1)弊社仕事内容をご理解頂きたい。

2)弊社メンバーが考える「視点」についてご理解頂きたい

3)皆様のご意見を頂きたい


弊社保有するノウハウなどを絡めながら、ブログ記事を記載させて頂きます。

今後とも一層のご指導、ご支援賜りますよう、お願い申し上げます。