2012年3月8日木曜日

SQLServer2005のトランザクションログ切捨ての結果

さて、この間の続きですが、無事ログの切捨てと圧縮はされたのでしょうか。

まずは、ログの切り捨てを妨げている原因がどうなったかを確認。
SELECT  name, log_reuse_wait, log_reuse_wait_desc FROM  sys.databases WHERE name = 'データベース名')
GO
log_reuse_wait_desc⇒NOTHING

問題は払拭されたようです。
念のため、実行中のトランザクションがあるか確認。

DBCC OPENTRAN('データベース名'')
GO
開かれたアクティブなトランザクションがありません。
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。
よし、ないです。

ではディスク容量を確認。残り15GBが50GBへ増えてました。


2012年3月6日火曜日

SQLServer2005のトランザクションログの切捨て

SQLServer2005のトランザクションログが肥大化したのでメモ。

復旧モデル:完全
ミラーリング動作モード:高パフォーマンス(非同期)
レプリケーション:スナップショットレプリケーション(パブリッシャー)

毎晩完全バックアップをとっているが、どうもトランザクションログの切捨てが行われてない模様。
というのは、データベースの圧縮をして気づいたこと。
ちなみに、自分だけかもしれないがデータベース圧縮すると、ミラーリングが停止してしまう?!(その時は再開しましょう)

まずはこれを試してみた。

「HowTo: Management Studio を使ってトランザクションログファイル (ldf) のサイズを小さくする方法」
http://blogs.msdn.com/b/jpsql/archive/2011/12/20/manegement-studio-ldf.aspx

結果、小さくならないのでその記事の中の
「この手順を実施してもトランザクションログファイルが小さくならない場合」をやってみた。

DBCC OPENTRAN(‘データベース名’) 
をやったらこうなった。

データベース 'データベース名' のトランザクション情報。
レプリケートされたトランザクション情報:
        配布された最も古い LSN       : (0:0:0)
        配布されなかった最も古い LSN : (13658:19580:1)
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。

あれ?これがログ切捨てできない原因??もう一つ試す。

SELECT  name, log_reuse_wait, log_reuse_wait_desc FROM  sys.databases WHERE name = 'データベース名'
をやったらこうなった。

| name| log_reuse_wait| log_reuse_wait_desc
KanzaiApplications, 6, REPLICATION

レプリケーションが悪さをしているようですね。

このメッセージがでないようになればよいので、いくつか試してみた。
1.「レプリケーションモニタ」から「すねてのサブスクリプションの再初期化」⇒結果変わらず
2.サブスクリプションの「同期の停止」⇒結果かわらず
3.パブリケーションを削除(ぉぃ)してから再作成⇒悪いメッセージはでなくなった。

うーん、パブリケーションとサブスクリプションを再作成すると直ったという理由がよくわかりませんが、現状はこうなりました。

DBCC OPENTRAN(‘データベース名’) 
GO
開かれたアクティブなトランザクションがありません。
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。
SELECT name, log_reuse_wait, log_reuse_wait_desc FROM sys.databases WHERE name = 'データベース名'
GO
| name| log_reuse_wait| log_reuse_wait_desc
KanzaiApplications, 2, LOG_BACKUP


これでトランザクションログが切捨てられるか、また後程。

2011年1月24日月曜日

ListViewの最後までスクロールしたら次の要素を追加で読む

GMailからデータを取得して表示するListViewを作った所、非常に遅い。
GMailから数件読んで、最後まで見たら追加で読み込むような処理を作ってみた。

要はOS2.2搭載のGMailアプリと一緒。

まさにこれ、といったサンプルがあったので。
参考
http://visible-true.blogspot.com/2010/12/listview.html
すばらしい。

2011年1月9日日曜日

Windows2008でOpenSSL

postgresqlとの通信を暗号化するために、OpenSSLで証明書を作成する。

ダウンロードは、ここから。
http://www.slproweb.com/products/Win32OpenSSL.html
・Win32 OpenSSL v1.0.0c
・Visual C++ 2008 Redistributables
・あとActivePealをGET.

OpenSSLのインストール
・http://www.adminweb.jp/apache/ssl/index1.html

※ちょっとつまずいたこと
Visual C++ 2008 Redistributablesは、日本語再配布版をインストールすると


The Win32 OpenSSL Installation Project setup has detected that the
following critical component is missing:
Microsoft Visual C++ 2008 Redistributables

Win32 OpenSSL will not function properly without this component.
It is recommended that you install the missing component before clicking
"OK" to continue.


と警告メッセージが表示される。
英語版をインストールすることで、このメッセージがでなくなった。

IIS+OpenSSLの参考
・http://flashcast.jp/blog/2008/12/openssliis.html (インストール手順とか)
・http://homepage2.nifty.com/protocol/openssl/  (証明書の作成方法とか)


AndroidからSSL接続しようとするとエラーになるので、Android側の設定を調査中・・・

2011年1月5日水曜日

Androidでメール送受信(IMAP編)

Android標準機能ではできないので、JavaMailを使う。

①必要なライブラリをダウンロード

http://code.google.com/p/javamail-android/downloads/list から
additional.jar、mail.jar、activation.jarを入手。

②Eclipse上で参照ライブラリに上3つを追加。

③AndroidManifest.xmlに、外部ライブラリの宣言を追加。


    <!-- mail.jar  -->
    <uses-library android:name="javax.mail" />
    <!-- activation.jar  -->
    <uses-library android:name="javax.activation" />
    <!-- additional.jar  -->
    <uses-library android:name="org.apache.harmony.awt" />

    <!-- インターネットに接続できる権限を追加  -->


    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

④一覧を取得するコード

import java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;

public class IMAPDemo {

 /**
  * @param args
  */
 public static void main(String[] args) throws Exception{
  String host = "imap.gmail.com";
  int port = 993;
  String user = "XXX@gmail.com";
  String password = "XXX";
  String target_folder = "INBOX";

  Properties props = System.getProperties();
  Session sess = Session.getInstance(props, null);
//  sess.setDebug(true);

  Store st = sess.getStore("imaps");
  st.connect(host, port, user, password);
  Folder fol = st.getFolder(target_folder);
  if(fol.exists()){
   for(Folder f : fol.list()){
    System.out.println(f.getName());
   }
   fol.open(Folder.READ_ONLY);
   for(Message m : fol.getMessages()){
    System.out.printf("%s - %d\n", m.getSubject(), m.getSize());
   }
   fol.close(false);
  }else{
   System.out.printf("%s is not exist.", target_folder);
  }
  st.close();
 }




参考サイト
http://androside.com/page_contents/page_android_javaMail.html
http://d.hatena.ne.jp/jbking/20080608/p1

2010年12月17日金曜日

Androidエミュレータから社内DBに接続する

Androidエミュレータから、ホストPCにある社内LANのデータベースに接続するのに
手間取ったのでメモ

・データベース:postgresql9.0

まず、エミュレータからホストPC内のpostgresは接続することはできた。
で、そのまま、ホスト名の部分を社内LANにあるDBサーバーのIPアドレスにしてみた所

DriverManager.getConnection(~  の行で
org.postgresql.util.PSQLException: The Connection attempt failed.
の例外が発生した。

ポート番号はデフォルトの5432で合っているし・・・
そういえばSQLServerでもTCP/IPを許可しないとだめだったなと思いだし、
postgresの設定を見て見る。

listen_addressは「*」となっていて、どこからの接続も許可してるみたい。
ここを細かく設定すれば、接続できるネットワークの制限が出来るのね。

次に、pg_hba.confを見て見る。

# TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD
host    all             all             127.0.0.1/32            md5

あれ?127.0.0.1って、ローカルだけしか許容してないぞ。 ということで
192.168.1.0/16 とかやってみる。

confをリロード後・・・ 無事エミュレータからつながった!

2010年12月15日水曜日

Androidの起動時にアプリを自動起動

Windowsのスタートアップのようなことをやるには。


①BOOT_COMPLETEDを受けるBroadCastReceiverをつくる
public void AutoStartReceiver extends BroadCastReceiver {
  onReceiveメソッドをオーバーライド


②ReceiverをManifestで定義する
<receiver android:name=".AutoStartReceiver ">
  <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" /> 

    <category android:name="android:intent.category.DEFAULT" />
  </intent-filter>
</receiver>