Symfoware

Symfowareについての考察blog

Oracle NoSQL DatabaseへJavaでデータの登録、検索、削除

Oracle NoSQL Databaseをインストールしてみました。
Debian squeezeにOracle NoSQL Databaseをインストールする


別の端末から、データの登録や検索を行うプログラムを作成してみます。


設定の変更



データベースの設定を行うとき「localhost」と指定していましたが、
どうやら別の端末から接続する時は、これでは都合が悪いようです。

一旦、データフォルダを削除し、以下の内容で設定をやり直しました。


# /opt/kv-1.1.100/bin/kvctl runadmin -port 5000 -host localhost
kv-> configure mystore
kv-> plan -execute -name "Deploy DC" deploy-datacenter "Boston" "Savvis"
1
kv-> plan -execute -name "Deploy n01" deploy-sn 1 192.168.1.4 5000 "comment"
2
kv-> plan -execute -name "Deploy admin" deploy-admin 1 5001
3
kv-> addpool BostonPool
kv-> show topology
dc=[dc1] name=Boston
sn=[sn1] dc=dc1 192.168.1.4:5000 status=RUNNING

kv-> joinpool BostonPool 1
AllStorageNodes: sn1
BostonPool: sn1

kv-> plan -execute -name "Deploy the store" deploy-store BostonPool 1 300
4




「192.168.1.4」がテスト端末のIPアドレスです。
DNSが正しく設定されている場合は、端末名のほうがよいと思います。






依存しているjarファイル



データベースへの接続に必要なjarファイルは、lib/kvclient-1.1.100.jarのみでした。
これをコピーして、ビルドパスに含めておきます。






サンプル



簡単な登録、検索、削除を行うサンプルはこんな感じになりました。


package sample;

import oracle.kv.KVStore;
import oracle.kv.KVStoreConfig;
import oracle.kv.KVStoreFactory;
import oracle.kv.Key;
import oracle.kv.Value;
import oracle.kv.ValueVersion;


public class MainProccess {
    
    public static void main(String[] args) throws Exception {
        KVStore store = null;
        String storeName = "mystore";
        String hostName = "192.168.1.4";
        String hostPort = "5000";
        
        //キーストアを作成
        store = KVStoreFactory.getStore(new KVStoreConfig(storeName, hostName + ":" + hostPort));
        
        //登録するキーとデータ
        String keyString = "TestKey";
        String valueString = "日本語のテストデータ";
        
        //データの登録
        store.put(Key.createKey(keyString), Value.createValue(valueString.getBytes()));
        
        //データの取得
        ValueVersion valueVersion = store.get(Key.createKey(keyString));

        System.out.println(keyString + " " + new String(valueVersion.getValue().getValue()));
        
        //データの削除
        store.delete(Key.createKey(keyString));
        
        valueVersion = store.get(Key.createKey(keyString));
        if (valueVersion == null) {
            System.out.println("valueVersion is null.");
        } else {
            System.out.println(keyString + " " + new String(valueVersion.getValue().getValue()));
        }
        
        store.close();        
    }
}





実行結果。

TestKey 日本語のテストデータ
valueVersion is null.






テーマ:データベース - ジャンル:コンピュータ

  1. 2011/10/30(日) 00:00:52|
  2. Oracle
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Debian squeezeにOracle NoSQL Databaseをインストールする

Oracle NoSQL Databaseがダウンロードできるようになりました

ダウンロードして、Debianで動かして見ます。


Javaのインストール



Oracle NoSQL DatabaseはJavaで動作するので、事前にopenjdkをインストールしておきます。


# apt-get install openjdk-6-jdk



※今回は、jdkをインストールしましたが、jreでもOKのはず。


インストール後、「java -version」を実行して、以下のような内容が表示されれば
Javaのインストールは完了しています。


# java -version
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8.9) (6b18-1.8.9-0.1~squeeze1)
OpenJDK Client VM (build 14.0-b16, mixed mode, sharing)









Oracle NoSQL Database, Enterprise Editionのダウンロード



以下のURLから、Oracle NoSQL Databaseをダウンロードできます。
http://www.oracle.com/technetwork/database/nosqldb/downloads/index.html

まだCommunity Editionは準備中のようですので、今回はEnterprise Editionを
ダウンロードしました。

「Accept License Agreement」をチェックして、kv-1.1.100.tar.gzをクリック。

05_001_20111029225901.png


オラクルのアカウント入力を求められます。
アカウントを持っていない場合は、「サインアップ」からアカウントを作成して入力。

05_002_20111029225900.png


ユーザー名、パスワードを入力して「サインイン」をクリックすると、ダウンロードが始まります。






インストールと起動



ダウンロードしたkv-1.1.100.tar.gzを/optに保存しました。
ファイルを解凍します。


# cd /opt/
# tar zxf kv-1.1.100.tar.gz




以下、解凍したフォルダのdocにあるAdminGuide/install.htmlを参考に、
動作を確認しました。

クライアントのバージョンを確認すると、「11gR2.1.1.100」でした。


# java -jar /opt/kv-1.1.100/lib/kvclient-1.1.100.jar
11gR2.1.1.100




データを格納するフォルダを作成します。
今回は、「/opt/kv-1.1.100/data」としました。


# mkdir /opt/kv-1.1.100/data





kvctlを使用して、初期化を行います。


# /opt/kv-1.1.100/bin/kvctl makebootconfig \
-root /opt/kv-1.1.100/data \
-port 5000 \
-admin 5001 \
-harange 5010,5020





データベースを起動。


# /opt/kv-1.1.100/bin/kvctl start -root /opt/kv-1.1.100/data




javaのjpsコマンドを使用して、起動を確認します。


# jps -m
6944 ManagedService -root /opt/kv-1.1.100/data -class Admin -service BootstrapAdmin.5000 -config config.xml
6980 Jps -m
6896 StorageNodeAgentImpl -root /opt/kv-1.1.100/data -config config.xml




※jspは実行しているJavaのプロセスを表示するコマンドです。
http://www.ne.jp/asahi/hishidama/home/tech/java/application.html#jps
知りませんでした。



通信できるか確認します。


# /opt/kv-1.1.100/bin/kvctl ping -port 5000
SNA at hostname: debian, registry port: 5000 is not registered.
    No further information is available




エラーっぽい内容ですが、これでOKだそうです。
起動できていないときは、こんな内容になるみたいです。


Could not connect to registry at localhost:5000
Connection refused to host: localhost; nested exception is:
java.net.ConnectException: Connection refused







管理ツールによる設定



起動してすぐにデータベースが使用可能となるわけではありません。
データの配置場所や、レプリケーションメンバーの設定が必要なようです。

※今回は、一台の端末で起動確認を行ったので、レプリケーションメンバーの
指定は行っていません。


以下のコマンドで管理ツールを起動。


# /opt/kv-1.1.100/bin/kvctl runadmin -port 5000 -host localhost
kv->





「mystore」という名前で設定を開始します。


kv-> configure mystore




まず、「Boston」という名前のDatacenterを定義。
「Savvis」はコメントです。


kv-> plan -execute -name "Deploy DC" deploy-datacenter "Boston" "Savvis"
1




定義した内容を表示して見ます。


kv-> show plans
   1 Deploy DC                SUCCEEDED
kv-> show topology
dc=[dc1] name=Boston





自分自身を、Boston Datacenterのノードとして追加。

kv-> plan -execute -name "Deploy n01" deploy-sn 1 localhost 5000 "comment"
2





管理用ポートの追加。

kv-> plan -execute -name "Deploy admin" deploy-admin 1 5001
3




「BostonPool」という名前のStorage Node Poolを追加します。

kv-> addpool BostonPool
kv-> show topology
dc=[dc1] name=Boston
 sn=[sn1] dc=dc1 localhost:5000 status=RUNNING

kv-> joinpool BostonPool 1
AllStorageNodes: sn1
BostonPool: sn1






Replication Nodesを定義。

kv-> plan -execute -name "Deploy the store" deploy-store BostonPool 1 300






状態を確認すると、以下のような表示になっていると思います。


kv-> show plans
   1 Deploy DC                SUCCEEDED
   2 Deploy n01             SUCCEEDED
   3 Deploy admin             SUCCEEDED
   4 Deploy the store         SUCCEEDED





これで設定は完了です。
「quit」で管理ツールを終了します。

kv-> quit








付属のサンプルプログラム



付属のサンプルプログラムをコンパイルして、実行して見ます。


「/opt/kv-1.1.100」に移動してコンパイル。

# cd /opt/kv-1.1.100
# javac -g -cp lib/kvclient-1.1.100.jar examples/hello/*.java




実行。

# java -cp /opt/kv-1.1.100/lib/kvclient-1.1.100.jar:/opt/kv-1.1.100/examples \
hello.HelloBigDataWorld \
-host localhost -port 5000 -store mystore

Hello Big Data World!




とりあえず、動いているようです。





管理画面



http://localhost:5001/で管理画面にアクセスできます。

05_003_20111029225900.png





停止



以下のコマンドで、停止します。


# /opt/kv-1.1.100/bin/kvctl stop -root /opt/kv-1.1.100/data








全然理解出来ていませんが・・・今度、データを登録するサンプルを書いてみます。




テーマ:データベース - ジャンル:コンピュータ

  1. 2011/10/29(土) 23:00:36|
  2. Oracle
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Oracle テーブル単位でのバックアップ、リストア(exp,imp)

Oracleでテーブル単位にバックアップを取得(exp)したり、
バックアップからリストア(imp)するときのコマンドメモ書き


テーブル単位のバックアップ

exp system/[password]@[DB名] file=[出力するファイルのフルパス] rows=y tables=([スキーマ名].[テーブル名])



テーブル単位のリストア

imp system/[password]@[DB名] file=[リストアに使用するファイルのフルパス] fromuser=[出力したときのスキーマ] touser=[リストアするときのスキーマ] tables=([テーブル名]) ignore=y



ignore=yをつけておかないと、create tableを実行したときのエラーで
止まってしまいます。
※テーブルごと削除して、インポートするのが作法なのかも。


コマンドの例

exp system/password@SAMPLEDB file=C:\backup\tbl1.dmp rows=y tables=(SC_SAMPLE.TBL1)

imp system/password@SAMPLEDB file=C:\backup\tbl1.dmp fromuser=SC_SAMPLE touser=SC_SAMPLE tables=(TBL1) ignore=y






テーマ:データベース - ジャンル:コンピュータ

  1. 2010/02/04(木) 12:15:02|
  2. Oracle
  3. | トラックバック:0
  4. | コメント:1
  5. | 編集

sqlplusを使用してテキストファイルに記載されたSQLを実行する

テキストファイルに記載したINSERT等のSQL文を一括で実行したいときがあります。
sqlplusを使用すれば、テキストファイルに記載したSQLを一括で実行することが可能です。


sqlplusを起動して、
@[SQL文を記載したファイルのフルパス]
としてやればOK

イメージはこんな感じ。


Oracle Database 10g Release 10.2.0.2.0 - Production
に接続されました。
SQL>@c:\sql\all_inst.txt



注意点として、sqlplusは自動的にトランザクションを開始するようで、
明示的にcommit;を実行してやらないとデータを確定してくれません。


もう一つの方法としてコマンドプロンプトを起動して
cd c:\sql
と、カレントディレクトリをSQL文を記載したテキストファイルが置いてある
ディレクトリに移動してから、sqlplusを起動。

start [SQL文を記載したファイル名]
としてやることでも実行できました。


Oracle Database 10g Release 10.2.0.2.0 - Production
に接続されました。
SQL>start all_inst.txt




ちょっとはまったのは、列数が多いテーブルのinsert文を一行で書いている
テキストを実行しようとするとエラーになってしまいました。

sqlplusから実行するときは、一行の文字数が2500以下である必要があります。
改行して、一行を2500文字以下にしてやれば、無事実行することができました。




テーマ:データベース - ジャンル:コンピュータ

  1. 2010/02/03(水) 12:14:33|
  2. Oracle
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

リモートのOracle 10gにOracle XE Clientで接続する

製品版のOracle 10gにOracle XE Clientをインストールした
クライアントから接続できるか試してみました。

Oracle XE Clientのダウンロードとインストールはこちら。

Oracle Database 10g Express Edition ODBCドライバのインストール


まず、リスナー名の確認を行います。
[スタート]-[Oracle-OraDB10g_home1]-[コンフィグレーションおよび移行ツール]-[Net Manager]
を開いて、対象のデータベースに登録されているサービス名を確認。

04_01_20100111171305.png


例だとSAMPLEDBに対して、SAMPLEDB.sv01というサービス名が設定されることが確認できます。


ODBC接続の設定はこんな感じ。

04_02_20100111171304.png

TNSサービス名に
[サーバーのIP]/[Net Managerで確認したサービス名]
と設定するのがミソ。


sqlplusコマンドからは、こんな感じで接続できます。


C:\>sqlplus system/password@192.168.1.1/SAMPLEDB.sv01

SQL*Plus: Release 10.2.0.1.0 - Production on 月 1月 11 16:12:56 2010

Copyright (c) 1982, 2005, Oracle. All rights reserved.



Oracle Database 10g Release 10.2.0.2.0 - Production
に接続されました。
SQL>




最初、TNSサービス名っていう意味がわからなくてはまりました。



テーマ:データベース - ジャンル:コンピュータ

  1. 2010/02/02(火) 12:12:05|
  2. Oracle
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
次のページ