[SAP on Windows] パスワードを忘れたときは

日々のパスワード管理は大変です。NetWeaver に至っては、OS, RDBMS, SAP ユーザーと、ユーザーアカウントも多様なので、覚えるのが大変です。”sap password forgot” で検索をかけると、国を問わず、人々はパスワードを忘れているようです。忘れる以外にありがちなのは、インストール時に想定外の文字列を入力してしまった場合など。SAPinst のパスワード入力欄はコピー アンド ペーストが可能なので、ひたすらコピーでインストールを進めると、コピー元の文字列が違っていたらアウト、一発退場です。

運用環境であれば、パスワードはきっちり管理されているので問題ないとは思いますが、NSP のように軽い気持ちでインストールする場合は要注意です。大昔にインストールして、久々に使おうとしたらパスワードを忘れていた、ということも多いでしょう。さて、パスワードを忘れてしまった場合は一体どこまで復旧可能なのでしょうか。

実は、Windows の Administrator のパスワードさえ分かれば、以下全てのユーザーの復旧が可能です。といっても、パスワードをリセットすることができるだけで、元のパスワードは神のみぞ知る、です。

  • Windows ユーザー (<sid>adm, SAPService<SID>)
  • 全クライアントの SAP ユーザー
  • MaxDB ユーザー (DBM Operator, Database User)
    以下、順番に手順を紹介します。なお、例によって SAP がサポートしているかどうかは不明なやり方ですし、私としてもログオンできることぐらいしか検証していないので、自己責任で参考にしてください。また、Windows + MaxDB + NetWeaver 7.0 EhP1 の環境限定です。特に EhP2 以降での動作確認は未実施です。

Windows ユーザーのパスワードを忘れた!!

Windows パスワードは単純です。NetWeaver 側で管理されているわけではないので、Administrator などでログオンして Windows ユーザーのパスワードを再設定し、サービス起動アカウントを再入力するだけです。お馴染みの以下のダイアログにパスワードを入れ直して終了です。
WS002

SAP ユーザーのパスワードを忘れた!!

他の管理者アカウントが生きていれば、SU01 からリセットするだけで済む話ですが、クライアントの全ユーザーのパスワードが分からなくなった場合は、そもそもログオンできません。こんなときは、SAP* ユーザーのパスワードをリセットしてログオンすることができます。クライアント コピーを実行したことがある人にはお馴染みの方法です。

まずは、以下のプロファイル パラメーターをデフォルト プロファイルかインスタンス プロファイルに設定します。デフォルト値は 1 なので、明示的に設定しましょう。このプロファイルを有効にするためにはインスタンス再起動が必要なので、再起動して下さい。

login/no_automatic_user_sapstar = 0

次に、以下の SQL クエリを実行して下さい。MaxDB には SQL Studio という GUI 形式の SQL クライアントがあり、NSP にも付属しているので、それを使うと便利です。Database Studio でもよいです。

update usr02 set bname=’SAPSTAR’ where bname=’SAP*’ and mandt=’<該当するクライアント>’

例えば、クライアント 000 と 001 で同コマンドを実行した場合です。SAP* という行が SAPSTAR に変わっています。
WS000

これにより SAP* のパスワードがリセットされ、パスワードは pass になります。クライアント 000 や 001 でも pass になります。SAP* でログオンできれば、SU01 が使えます。DDIC などの管理者アカウントでログオンできるようになったら、上記の UPDATE 文で退避しておいた SAP* の行を元に戻し、SU01 でパスワードを再設定すれば完了です。インターネット検索でも、USR02 を編集する方法は数多く紹介されていますが、DELETE 文で SAP* の行を消してしまう荒業が紹介されていたりします。もちろん同じ結果にはなりますが、SAP* アカウントを新規作成するのは微妙です。UPDATE で退避する方法をお勧めします。

テーブル USR02 には、SAP ユーザー パスワードのハッシュキーが記録されています。SAP ユーザーは、このテーブルのハッシュを照合することで認証されます。しかし、プロファイル login/no_automatic_user_sapstar が 0 に設定されている場合は、 キーが存在しないときの SAP* ユーザーにはデフォルトの pass というパスワードが設定されます。クライアント コピーではお馴染みの知識ですが、実はクライアント 000 でも同様のことが可能です。ただしこれは、NetWeaver 7.0 EhP1 で、バージョンによって仕様が変化する可能性が高い部分です。なお、USR01 などの他のテーブルは一切変更しません。

MaxDB のアカウントを忘れた!!

一番厄介なケースです。そもそも MaxDB の知名度が低いですね。まあ私も大して知りません。そもそも MaxDB にはどんなユーザーがいるかご存知でしょうか。アカウントは 2 種類あり、NSP インストール直後は以下のようになっています。

      • DBM Operator: SUPERDBA, CONTROL
  • Database User: SUPERDBA, SAPNSP
    DBM Operator とは、データベースの起動/停止など、データベースそのものを管理する操作をするときに必要になるアカウントです。Database User は、いわゆるスキーマ ユーザーで、データベース内のオブジェクトを管理するときに必要になるアカウントです。SUPERDBA というアカウントは、一つのアカウントで、両方の役割を兼ねています。同一アカウントなので、パスワードは一つしか持っていません。つまり、インストール直後の NSP の MaxDB には 3 つのアカウントが存在します。そして、これら全部のパスワードを忘れたとしても何とかなります。

MaxDB には xuser という仕組みがあり、インストールしたときのアカウント情報がレジストリに保存され、パスワードを入力しなくても管理コンソールにログオンすることができます。Oracle の conn / as SYSDBA と同じような仕組みです。<sid>adm ユーザーでログオンして、コマンド xuser list を入力すると以下のような出力を得ます。

> xuser list

—————————————————————–
XUSER Entry  1
————–
Key         : DEFAULT          
Username    :SAPNSP
UsernameUCS2:S.A.P.N.S.P. . . . . . . . . . . . . . . . . . . . . . . . . . .
Password    : ?????????
PasswordUCS2:?????????
Dbname      :NSP 
Nodename    :win2008-nw701                    
Sqlmode     :SAPR3  
Cachelimit  :-1
Timeout     :0
Isolation   :0
Charset     :<unspecified>    
—————————————————————–
XUSER Entry  2
————–
Key         :c    
Username    :CONTROL  
UsernameUCS2:C.O.N.T.R.O.L. . . . . . . . . . . . . . . . . . . . . . . . . .
Password    : ?????????
PasswordUCS2:?????????
Dbname      :NSP 
Nodename    :win2008-nw701        
Sqlmode     :SAPR3  
Cachelimit  :-1
Timeout     :0
Isolation   :0
Charset     :<unspecified>    
—————————————————————–
XUSER Entry  3
————–
Key         :c_J2EE    
Username    :CONTROL    
UsernameUCS2:C.O.N.T.R.O.L. . . . . . . . . . . . . . . . . . . . . . . . . .
Password    : ?????????
PasswordUCS2:?????????
Dbname      :NSP   
Nodename    :win2008-nw701   

Sqlmode     :SAPR3  
Cachelimit  :-1
Timeout     :0
Isolation   :0
Charset     :<unspecified>    
—————————————————————–
XUSER Entry  4
————–
Key         :w  
Username    :SUPERDBA          
UsernameUCS2:S.U.P.E.R.D.B.A. . . . . . . . . . . . . . . . . . . . . . . . .
Password    : ?????????
PasswordUCS2:?????????
Dbname      :NSP   
Nodename    :win2008-nw701  
Sqlmode     :SAPR3  
Cachelimit  :-1
Timeout     :0
Isolation   :0
Charset     :<unspecified>    

これがレジストリに保存されているアカウント情報です。SAPNSP, CONTROL, SUPERDBA という 3 つのアカウントが全て保存されていることが分かります。これらのアカウントは key という文字列で管理/識別されます。DEFAULT, c, c_J2EE, w という値です。アカウントのパスワードを忘れても、これらの xuser エントリを使って CUI の管理ツールにログオンし、パスワードを変更することができます。

CONTROL アカウントは純粋な DBM Operator なので、データベースが起動していなくてもパスワードの変更が可能です。しかし、SUPERDBA や SAPNSP は、Database User なので、データベースが起動していないとパスワードを変更することができません。しかし Windows の場合は、MaxDB インスタンスはサービスとして 起動できるので、起動停止時に MaxDB アカウントは不要です。

WS009

パスワードを忘れてしまった場合は、サービス起動によりデータベースを起動してから、以下のようにコマンドを実行します。

>dbmcli -U c -n localhost
dbmcli on localhost : NSP>user_getall
OK
CONTROL
SUPERDBA


dbmcli on localhost : NSP>user_put control set password=新パスワード
OK


dbmcli on localhost : NSP>user_put superdba set password=新パスワード
OK


dbmcli on localhost : NSP>exit
OK

>

dbmcli というのが MaxDB の CUI 管理ツールです。MaxDB をインストールすると、自動的にインストールされます。これで superdba と control ユーザーのパスワードがリセットできました。SAPNSP ユーザーは、この方法では変更できないので、今回は Database Manager の GUI で変更します。コマンドもありそうですが、方法を知りません。

Database Manager を起動し、[Configuration] > [Database User…] をクリックします。
WS005

データベース管理者アカウントを聞かれるので、SUPERDBA アカウントを入力して [Next] をクリックします。CONTROL アカウントは、管理者ではないのでここでは使えません。
WS006

SAPNSP をダブルクリックします。
WS007

[Change] ボタンをクリックすると、パスワード変更画面が表示されます。
WS008

これで MaxDB アカウントのパスワードは全てリセットできました。が、これだけだとダメです。先にちらっと書きましたが、パスワード情報が xuser エントリとしてレジストリに保存されていて、それも変更しないと後々困ります。特に、SAPNSP に該当する xuser エントリは NetWeaver が MaxDB に接続するときに使っているので、SAPNSP のパスワードを変更しただけだと NetWeaver が起動しなくなります。NetWeaver が MaxDB に接続するときはワーク プロセスの実体である disp+work.exe が SAPNSP アカウントを使ってアクセスしに行きます。xuser エントリが間違っている場合は、メッセージ サーバーの起動の後、disp+work の起動でコけます。

WS003

ワーク プロセスの開発者トレースに以下のようなログが出力されます。dev_disp ではなく dev_w0 などに出力されるので注意。

C  Loading SQLDBC client runtime …
C  SQLDBC SDK Version : SQLDBC.H  7.6.0    BUILD 002-121-083-965
C  SQLDBC Library Version : libSQLDBC 7.6.5    BUILD 011-123-196-300
C  SQLDBC client runtime is MaxDB 7.6.5.011 CL 196300
C  SQLDBC supports new DECIMAL interface : 0
C  SQLDBC supports VARIABLE INPUT data   : 1
C  SQLDBC supports keepAlive indicator   : 0
C  INFO : SQLOPT= -I 0 -t 0 -S SAPR3
C  Try to connect (DEFAULT) on connection 0 …

C Wed Dec 29 13:36:40 2010
C  *** ERROR => Connect to database failed, rc = -4008 (POS(1) Unknown user name/password combination)
[dbsdbsql.cpp 137]
B  ***LOG BY2=> sql error -4008  performing CON [dbsh#2 @ 1208] [dbsh    1208 ]
B  ***LOG BY0=> POS(1) Unknown user name/password combination [dbsh#2 @ 1208] [dbsh    1208 ]
B  ***LOG BY2=> sql error -4008  performing CON [dblink#2 @ 431] [dblink  0431 ]
B  ***LOG BY0=> POS(1) Unknown user name/password combination [dblink#2 @ 431] [dblink  0431 ]
M  ***LOG R19=> ThInit, db_connect ( DB-Connect 000256) [thxxhead.c   1449]
M  in_ThErrHandle: 1
M  *** ERROR => ThInit: db_connect (step 1, th_errno 13, action 3, level 1) [thxxhead.c   10563]

NetWeaver の起動に関連するのは SAP<SID> だけなので、SUPERDBA, CONTROL のパスワードをリセットするだけであれば、xuser エントリを更新しなくても NetWeaver の起動には問題ありません。が、そのままにしておくと、次回パスワードを忘れたときに手も足も出なくなります。

xuser エントリの一覧コマンドは xuser list でした。そして、xuser キーと MaxDB アカウントとの対比は以下のようになっていました。

  • DEFAULT –> SAPNSP
  • c –> CONTROL
  • c_J2EE –> CONTROL
  • w –> SUPERDBA
    これもバージョンによって変わる可能性があるので、必ず自分の環境で確認しましょう。基本的にはキーとアカウントの対が合っていればいいのですが、一覧に表示される他のパラメーター(タイムアウトなど)も合わせた方がいいので、必ず変更前の xuser 一覧を記録しておきましょう。
    xuser エントリの変更も xuser コマンドを使います。一度削除してから再設定する場合のコマンドは以下の通りです。

xuser -U DEFAULT clear
xuser -U c clear
xuser -U c_J2EE clear
xuser -U w clear

xuser -u SAPNSP,パスワード -U DEFAULT -d NSP -n ホスト名 -S SAPR3 -t 0 -I 0 set
xuser -u CONTROL,パスワード -U c -d NSP -n ホスト名 -S SAPR3 -t 0 -I 0 set
xuser -u CONTROL,パスワード -U c_J2EE -d NSP -n ホスト名 -S SAPR3 -t 0 -I 0 set
xuser -u SUPERDBA,パスワード -U w -d NSP -n ホスト名 -S SAPR3 -t 0 -I 0 set

    なお、このコマンドはレジストリを書き換えるので、管理者特権で実行する必要があります。特権がない場合もエラーは出ませんが、操作は中断されているので注意が必要です。
    これで NetWeaver も無事起動するようになったはずです。

最後に、パスワードのリセット方法を表にまとめました。

Windows ユーザー Administrator でパスワードを変更
サービス起動アカウントを変更
SAP ユーザー プロファイル パラメータを設定
インスタンス再起動
UPDATE 文を実行して SAP* のパスワードを pass にリセット
MaxDB ユーザー Windows サービスから MaxDB インスタンスを起動
xuser エントリを利用して、CUI 管理コンソールでログオン (dbmcli -U c)
user_put コマンドでパスワードを変更
xuser エントリを更新
広告

[SAP on Windows] NetWeaver サーバーのホスト名を変更する

既にインストールしてしまった NetWeaver サーバーのホスト名は一応変えることも可能です。「一応」というのは、サポートされているかどうか不明だからです。決して運用環境で行ってはいけません。

単に、Windows 上でホスト名を変えただけだと、NetWeaver は起動しなくなります。sapmmc で赤いアイコンを見ることができます。いきなり sapcpe でコけるようですね。
WS002

ホスト名ベースで通信を行なっているので、IPアドレスを変えても特に影響はありません。ですが、ホスト名を変えるには下記の設定が必要です。これを自分でやってみると、NetWeaver 起動時の挙動がある程度分かってきます。やはりソフトウェアの世界は、自分で手を動かすことが大事です。

  1. <sid>adm ユーザーの環境変数
  2. プロファイル ファイル名
  3. プロファイル パラメーター
  4. sapstartsrv 再登録

NetWeaver インストール時に、Windows ユーザーが幾つか追加されました。データベース固有のものを除くと、<sid>adm と SAPService<SID> の 2 つが追加されます。sapmmc で起動操作を行なうと、Windows ユーザー アカウントを聞かれ、通常はここで <sid>adm ユーザーを入力します。インストール時にこのユーザー固有の環境変数が追加されていて、ホスト名情報も実は含まれています。調べればすぐに分かりますが SAPLOCALHOST という環境変数がホスト名を保持しています。そんなわけで変更します。
WS003

次にプロファイル関連の変更を行ないます。すぐに分かるのはファイル名ですかね。起動プロファイルとインスタンス プロファイルのファイル名に含まれているホスト名を変更します。ご丁寧にもファイル名にホスト名が含まれているのは、複数インスタンス構成への対応と思います。インスタンスが増えても、プロファイル ファイルはグローバル サーバーの同一フォルダで一括保管されます。プロファイル ファイル名にホスト名を付加しておくことで、インスタンス番号とサーバーを独立させることができる、というのが趣旨ではないかと思います。

ファイル名だけでなく、プロファイル パラメーターそのものにもホスト名が含まれています。少々強引ではありますが、置換してしまいます。NSPの場合は、デフォルト プロファイルとインスタンス プロファイルにホスト名が含まれているパラメーターがありました。

起動プロファイルのファイル名を変えたので、sapstartsrv サービスを再起動する必要があります。というより、起動プロファイルへのパスが sapstartsrv サービスの起動コマンドの中で引数として与えられているので、そもそも再起動できません。レジストリの値を書き換えて起動コマンドを変更するとか、sc コマンドを使う方法法もありますが、正攻法は sapstartsrv.exe 自身の GUI を使うことです。

sapstartsrv.exe は、サービスとして動くプログラムですが、ダブルクリックして起動することで、サービスとしての自分自身のインストール/アンインストールなどが行なえて便利です。図のように、一度アンインストールしてからインストールし直します。この操作は管理者特権が必要になります。

WS010

サービス起動ユーザーの指定で、ワークグループ ユーザーを指定するときは、接頭辞として .\ をつけないと怒られるので注意。
WS013

このダイアログを必ず確認しましょう。管理者特権がない場合、このポップアップは表示されずに操作は中断されますが、エラーも出ないので気づきにくいです。
WS015

サービスがインストールされ、起動コマンドの起動プロファイルのパスが正しく設定されていることを確認してから、サービスを起動します。操作に誤りがなければすんなりと起動するはずです。

最後に、NetWeaver 起動を確認して終了です。簡単ですね。

WS019

[SAP] ABAP 開発環境をインストールする Part3

前回ので SAP NetWeaver ABAP のインストールは完了しました。ちなみに、試用版のインストールにおける傾向と対策は、下記のような感じでしょうか。

  • そもそも SAPinst が起動しない
    → OS など、環境が対応していない
    → JRE が入っていない
    → アンチウイルス
    → 偶然(サーバー再起動で直ったりします)
  • Windows ユーザー作成
    → パスワードポリシー
  • NetWeaver 起動
    → メモリ不足
    → TCP ポートの競合
    → ネットワーク関連
    → 偶然

エラーの原因は様々なので、結局はイベントログや、NetWeaver の起動ログなどを見て調べることになります。検索エンジンで検索すると、SDN のフォーラムなどがヒットすることもよくあります。必ず英単語で検索しましょう。

次に MaxDB の GUI クライアントツールと SAP GUI をインストールします。前者はゲスト OS、後者はホスト OS にインストールします。

MaxDB の GUI クライアントツールは 2 種類あり、今回ダウンロードした試用版には、Database Manager と、MaxDB Database Studio の両方のインストーラが含まれています。用途は同じなので、どちらか一つをインストールすれば十分です。後者の Database Studio の方が新しく、機能も多いです。しかしDatabase Studio は、Eclipse のプラグインとして開発されており、Database Manager より高負荷です。試用版ではどちらも 32bit ですが、Database Studio は 64bit 版があったりと、それなりに有利な点もあるのですが、起動/停止や、各種パラメータ設定などの基本的な機能は Database Manager でも当然行えます。32bit しかリリースされていませんが、64bit OS でも問題なく動きます。そんなわけで、Database Manager をインストールします。

以下のインストーラを実行して、ウィザードに従って進めるだけです。
MAXDBTOOLS\DBM76.exe

参考までに、Database Studio のインストーラは下記のファイルです。
MAXDBTOOLS\maxdb-studio-desktop-win-32bit-i386-7_8_01_16\SDBSETUP.exe

次に、SAP GUI をインストールします。今回はホスト OS に入れますが、もちろんゲスト OS に入れても動きます。NetWeaver 7.02 の試用版に同梱されているのは最新版の SAP GUI 7.2 のようです。7.2 は Windows 7 にも対応しており、もちろん NetWeaver 7.00 や R/3 などの過去の SAP 製品にログオンすることも可能です。インストーラは下記jのファイルです。

GUI\SAP_GUI_FOR_WINDOWS_720_PL3_CORE\SAP_GUI_for_Windows_7.20_PL3_CORE_Components.exe

なお、これは正式には SAP GUI for Windows というアプリケーションで、SAP GUI for Java と SAP GUI for HTML というアプリケーションも存在しています。for Java は 今回の NetWeaver 7.02 Trial にも入っています。名前の通り Java アプリケーションなので、Windows 以外にも Linux や Macintosh でも動くと思います。試したことはないですが。SAP GUI for HTML は、Web アプリケーションで、これは NetWeaver ABAP の機能の一つなので、特にインストールすることなく、誰でも使えます。微妙に設定が必要ですが、規定の URL にアクセスするだけです。

SAP GUI のインストールもウィザードに従って進めていくだけで、特筆すべきところはなしです。

以上でインストール作業は完了です。

細かい操作手順については、そのうち書いていく予定ですが、とりあえず起動/停止の手順と、SAP GUI 操作の初歩の初歩を紹介します。

まずは NetWeaver の起動/停止。方法はいろいろありますが、GUI を使った基本的な操作から。

NetWeaver をインストールし終わると、デスクトップに SAP Management Console というショートカットができます。これが SAP の GUI 管理ツールです。MMC のスナップインとして自動的にインストールされています。SAPMMC と呼ばれることが多いです。[ファイル名を指定して実行] に sapmmc.msc と入れて実行しても起動できます。

image

MMC スナップインとして追加されている、ということは、そうです、COM です。%SystemRoot%\System32\sapmmc.dll という DLL が存在し、こいつが COM サーバーとして動いています。こいつの仕様が公開されているかどうかはちょっと不明ですが、見たことないです。プログラム的に NetWeaver の起動停止を行ないたい場合は、WSDL が公開されている Web サービスを使うことができます。そもそもコマンドラインツールがあるので、それを使うことが多いです。

こんな画面です。直感的に分かると思いますが、三角が起動で、四角が停止です。なお、このツール自体は、Windows サービスである sapstartsrv.exe と SOAP で通信しており、sapstartsrv サービス経由で起動/停止、及び、コンソールに表示されるプロセスのステータス情報の取得などを行なっています。アイコンが緑色だと起動で、黄色は起動/停止中、灰色が停止です。ライセンス期限が切れると赤くなったりと、カラフルなやつです。
image

NetWeaver は SAPMMC で停止できますが、MaxDB インスタンスは止まっていません。そこで、インストールした Database Manager を使います。スタートメニューとデスクトップにショートカットができているので、そこから起動します。このツールも、見たとおりに操作すれば OK です。ただし、こちらは最初にインスタンスを登録しなければなりません。今回の NetWeaver 試用版では、以下の情報でインスタンスを登録してください。

  • データベース名: NSP
  • ユーザ名: superdba または control
  • パスワード: NetWeaver インストール時に入力したパスワード

インスタンスが登録されると、下図のようにインスタンスの情報が出てきます。シンプルで分かりやすいです。ツールバーの赤いボタンで停止、緑のボタンで起動です。
image

当然のことですが、停止の時は、NetWeaver が先で、その後にデータベースを止めます。起動はその逆で データベース、NetWeaver の順で起動します。実は NetWeaver も データベースも起動中のまま、OS をシャットダウンしても意外と平気だったりしますが。

起動/停止を覚えたところで、次は SAP GUI の操作です。こんな外見です。SAP GUI 7.1 とちょっと見た目が変わりました。
image

こちらも MaxDB と同様、インスタンスを自分で追加しなければなりません。Ctrl+N を押すと、新規エントリ画面が表示されるので、ウィザードに従って進めていきます。

[ユーザ指定システム] のまま、[次画面] をクリックします。
image

必要な情報を入力します。今回インストールしたシステムは以下ですので、それを入力します。

  • システムID: NSP
  • インスタンス番号: 00

あとはデフォルト設定でよいので、ここで [終了] をクリックします。

image

システムが追加されました。ダブルクリックすれば起動します。
image

ですが、その前に、サーバー側でファイアウォールの設定が必要です。SAP GUI と NetWeaver は DIAG というプロトコルで通信していることは触れましたが、DIAG も TCP の上位プロトコルなので普通にポートを開ければいいです。今回はインスタンス番号が 00 なので、3200 ポートを許可する受信ルールを作れば接続できます。使い方次第では他のポートも開ける必要がありますが、とりあえずここでは 3200 だけ開けます。例えば Web サーバーとしては、HTTP ポート 8000 を使っています。

image

接続するには、SAP GUI に追加したエントリをダブルクリックします。ログオン画面が出てくるので、既定のユーザーアカウントを入力します。以下はその一覧です。
(クライアント/ユーザー名/パスワード)

  • 000/SAP*/インストール時に入力したパスワード
  • 000/DDIC/インストール時に入力したパスワード
  • 001/SAP*/インストール時に入力したパスワード
  • 001/DDIC/インストール時に入力したパスワード
  • 001/BCUSER/abcd1234

クライアントって何、という質問に答えるのはけっこう厄介。独立したデータを持てる、NetWeaver 独自の単位です。データの一部を完全に独立して持つことができ、一方 ABAP プログラムは全てクライアント間で共通です。特に決まった使い方はなく、例えば、1つの検証サーバーを立てておいて、検証用クライアントをたくさん作っておくと、複数のデータでの検証が一つのサーバーで実施できてエコ!みたいな感じです。

000 というのは特別なクライアントなので、むやみやたらと変更してはいけません。そんなわけでここでは 001 に ユーザー BCUSER でログオンします。

image

ログオンすると以下の画面が表示されます。
image

左上のテキストボックスに、数百と存在する「魔法のおまじない」を入力してエンターキーを押すと、そのおまじないに沿ったプログラムが実行され、NetWeaver のあらゆる機能を使うことができます。ERP であれば、受注や入庫、入金といった基幹システムの画面が出てくるのです。この「魔法のおまじない」のことを、トランザクションコードと呼びます。

[SAP] ABAP 開発環境をインストールする Part2

インストーラのダウンロード、インストール環境の準備は終わったので、満を持してインストーラを起動します。が、その前に、SAP の構成について簡単にまとめます。

まず、SAP って何よって話。基幹システム、ERP、R/3、SD/MMとかでしょ?などといろいろ答えが返ってきそうです。専門分野によっても異なるんでしょうね。厳密にいうと、SAP という製品は存在せず、SAP とは単なる会社名です。多岐にわたる製品を販売していますが、その中でもメジャーな製品は SAP ERP と、SAP NetWeaver でしょうか。で、SAP ERPって何、と聞く人はあまりいないでしょう。文字通り、SAP 社が開発/販売している ERP システムです。

混同されやすいのが SAP NetWeaver です。端的に言えば SAP NetWeaver とは、SAP 社が開発/販売している アプリケーション サーバーの製品名です。ジャンル的には Apache や IIS、J2EE と同じですね。IIS の場合は C# や VB.NET で開発して、Web アプリケーションとしてブラウザで閲覧するのが主要な使い方ですが、これが NetWeaver の場合は、ABAP や Java で開発して、ブラウザ、もしくは SAP GUI という専用クライアントから操作する、という話になります。

開発言語は ABAP と Java の 2種類あります。NetWeaver の上に ERP のロジックを ABAP プログラムで書いてデプロイしたものが SAP ERP です。(正確にいうと、ERP の Java コンポーネントもありますが・・・) 基本的には NetWeaver ABAP と NetWeaver Java は別々に構築する必要があります。1つのNetWeaver で両言語をサポートさせる構成については、NetWeaver 7.01 になってから不可能になりました。なお、NetWeaver Java は一応 J2EE 準拠だったと思います。

ABAP は ERP などの基幹系のロジックを記述するバックエンドのプログラムに使い、Java は フロントエンドの UI 開発に使う、というのが基本的な使い方です。NetWeaver ABAP 自体は HTTP, SOAP, RPC (RFC) などのプロトコルに対応していますが、SAP GUI という専用クライアントは DIAG とかいう未知のプロトコルを使って通信しています。DIAG の試用は確か非公開です。したがって、SAP GUI のようなクライアントソフトを他社が開発することはできないようになっています。

最後に、NetWeaver は RDBMS がないと動きません。

以上を踏まえて、今回インストールするのは NetWeaver ABAP です。ダウンロードした 4GB 弱のファイルの中に以下のものは全部含まれています。JRE は別途ダウンロードが必要でしたけどね。

  • SAP NetWeaver ABAP 本体
  • MaxDB サーバー
  • MaxDB 管理ツール (CUI)
  • MaxDB 管理ツール (GUI)
  • SAP GUI

最初の 3つ、NetWeaver と MaxDB は一度のインストールで勝手に入ります。MaxDB の GUI 管理ツールと、SAP 専用クライアントである SAP GUI は別途インストールする必要があります。今回は VMware 仮想マシンを使うのですが、SAP GUI だけは ホスト OS にインストールすることにします。

今回も前置きがずいぶん長くなりましたが、まずは NetWeaver 本体のインストールです。ゲスト OS でインストーラを実行します。ダウンロードしたファイルを全部ゲスト OS 上にコピーするのは面倒なので、解凍したインストーラを ISO で固めて、ゲスト OS にマウントさせると楽です。ISO 化は Windows AIK に付属している oscdimg を使いました。もちろん WinRAR でもなんでもいけます。

次のプログラムを実行します。管理者特権が必要なので、Administrator でインストールします。

SAP_NetWeaver_702e_Installation_Master\IM_WINDOWS_I386\sapinst.exe
image

図のように選択し、[Next] をクリックします。
image

インストールのための環境変数などが自動的に設定されるので、一度ログオフする必要があります。[OK] をクリックすると、ログオフします。
image

使用許諾を読み、[I accept] を選択してから [Next] をクリックします。
image

パスワードを設定します。このパスワードは、SAP用に作成される Windows ユーザー、MaxDB ユーザー、SAP ユーザーに適用されます。Windows のパスワードポリシーに合致していないと、インストール中にユーザー作成が失敗して面倒なことになるので、それなりに複雑なものを設定しましょう。私は pswd_NSP を使っています。
image

マシンのスペックが足りない、と怒られます。インストール画面にも出ていますが、無視可能です。[Cancel] をクリックします。
image

サマリ画面が表示されます。[Next] をクリックするとインストールが開始されます。なお、選択画面が表示されずにデフォルト設定になっているものが数多くあるので、必ず設定項目を確認しましょう。特に、インストールドライブは要注意です。今回はすべて C ドライブにインストールするのでデフォルト設定で構わないのですが、もしドライブを分けたければ、ここで必要な項目にチェックをつけて [Revise] をクリックして下さい。すると、ドライブ選択の画面が表示されます。インストールドライブのほかに、データベースファイルの個数や、サイズなども変更可能です。なお、SID については NSP で固定です。確かこれを変えてインストールを続行すると、インストールがエラーになってしまいます。なお、NSPというのは Mini SAP の略語です。 書き忘れましたが、インスタンス番号は 00 です。これは変えられるかもしれませんが、やったことないです。
image

インストール中の画面です。Import ABAP というフェーズで数時間かかります。エラーのときはポップアップが出るので、何も出ていない限りは問題なく動いています。気長に待ちましょう。
image

プロセッサもメモリも頑張っています。
image

無事にインストールが終わると、次のポップアップが表示されるので [OK] をクリックします。私の環境では特にエラーもなく、6時間ぐらいかかりました。ずっと張り付いているのは現実的ではないので、夜にインストールして睡眠を取りましょう。
image

[SAP] ABAP 開発環境をインストールする Part1

せっかくなので、SAP についても取り扱っていこうと思います。

転職サイトなどでは、希望職種でエンジニアを選ぼうとすると、汎用系、オープン系、Web 系に分かれている場合が多いですね。SAP 自体は Windows や Linux でも動かすことができるので、オープン系と言えなくもないのですが、SAP システムそのものは汎用系になるでしょう。ABAP を中心に触ってきた SAP 系エンジニアだと、C や Java を書けない人が多い気がします。SAP の知識はそれだけで飯の種になっていたという事実の表れでしょうか。というのも、SAP 関連の情報はほとんどネット上に出回っていませんし。SAP に限らず、いわゆる基幹系システム、メインフレーム系の OS/DB、なども同様ですね。高いお金を払って、トレーニングを受けなけれななりません。一応本も出ていますが、けっこう古い情報だったりします。

さて SAP は、ライセンスを購入しなくても、それなりに情報を公開していたりします。以下のサイトは基本中の基本です。

SDN – SAP Developer Network
http://www.sdn.sap.com/irj/sdn
開発者向けの情報が中心ではありますが、リリースされたばかりの製品情報や、製品概要、製品デモなどもあるので、一般ユーザーにも有益な情報があったりします。フォーラムはかなり使えます。
いつからか、SDN でネット検索すると SDN48 が先頭に出てくるようになってしまいました。日本おそるべし。

SAP Help Portal
http://help.sap.com/
オンラインヘルプです。丁寧に書かれていて読みやすいのですが、製品リリースからしばらく経たないとヘルプが出てきません。最近は日本語訳リリースのペースも早くなってきて助かります。内容については、全機能を網羅しているわけではないので注意が必要です。ユーザー向けの情報というよりは、管理者、エンジニア向けのアーキテクチャの説明が中心だったりします。検索機能がいまいちなので、検索には慣れが必要かもしれません。

日本人にとって、いつも問題となるのは言語の壁ですね。SAP に限らず、欧米企業の情報はやはり英語で知るのがベストです。逆に、英語に抵抗がなく、ちょっと読めるだけで大多数の日本人よりは優位に立てるんだ、と前向きに考えると幸せになれます。タイムリミットが迫ってきて、焦っているときに英語の情報しかないと泣きそうになりますが。

閑話休題。SAP を始めるにあたって、まずは環境を用意しなければなりません。意外と知られていない事実ですが、NetWeaver だったら無償ダウンロードが可能です。さすがに ERP は無理です。

大昔に ITPro で無償版 SAP が紹介されたことがありましたが、中途半端に終わってしまっています。執筆者が退職されたのでしょうか。

http://itpro.nikkeibp.co.jp/article/COLUMN/20080214/293837/

何しろ 2年前の記事なのでバージョンが変わっていますが、この記事と同じようなことをやってみます。ようやく本題です。

まずはインストーラをダウンロードしなければなりません。先に紹介した SDN にアクセスし、Downloads > SAP NetWeaver Main Releases とリンクを辿っていきます。

http://www.sdn.sap.com/irj/scn/nw-downloads

2010 年 12 月 26 日現在での最新版は SAP_NetWeaver Application_Server_ABAP_702_SP6_32bit_Trial_Version です。SAP NetWeaver 7.0 EhP2 の ABAP スタックです。メインリリースだと 32bit 版はもう存在しないはずですが、逆に無償版はまだ 64bit に対応していません。

#### 2015/3/4 追記

もうこの記事を書いてから 4 年以上も経っていますが、NetWeaver のインストールをやり直してみました。これからインストールを行なうという方は、こちらのページをご覧下さい。NetWeaver 7.03 64bit を Windows Server 2012 R2 にインストールする手順です。

Calculating PI in ABAP | すなのかたまり
https://msmania.wordpress.com/2015/03/04/calculating-pi-in-abap/

####

なお、無償バージョンのライセンスは Developer Edition とTrial Version があり、微妙に使い方が違っているので注意です。Developer Edition の方が使いやすそうですが、NetWeaver 7.02 はまだ Trial しかないので、ここでは 7.02 Trial のインストールを紹介します。

http://wiki.sdn.sap.com/wiki/pages/viewpage.action?pageId=156697029

インストール要件などが書いてあるページ上部の [Click here for download] をクリックすると使用許諾が表示され、同意するとダウンロードできます。ファイルは 2つに分割されていて、2GB と 1.8GB です。今となってはあまり驚きに値しないサイズですね。ダウンロード速度はけっこう速いです。

ブログに載せるということもあり、一応使用許諾を読んでみました。「運用環境で使わないでね」 「逆アセンブルしないでね」 というようなことが書いてあります。画面キャプチャも SAP の所有物ですよ、ということは書かれていますが、ウェブに公開するなとは書いていない、と。

さて、次に 2つのファイルをダウンロードしました。RAR 形式を解凍できるソフトが必要です。分割解凍しているものなので、必ず二つともダウンロードしてから解凍しましょう。

  • NWASABAPTRIAL70206.part1.rar
  • NWASABAPTRIAL70206.part2.rar

フォルダ構成が複雑で分かりにくいのですが、とりあえずは無視して次にインストール環境を用意します。今回は以下の環境を用意しました。

  • サーバー: VMware 仮想マシン
  • CPU: 1つ
  • RAM: 2GB
  • スワップメモリ: 4GB
  • OS: Windows Server 2008 SP2 32bit 英語版
  • HDD: 100GB
  • その他: DHCP、ワークグループ、インターネット接続なし

一応ダウンロードページのインストール要件に合わせてあります。試しに 64bit 環境へのインストールも試みましたが、エラーになってダメでした。ごり押しすれば入りそうな気もしますが、それは応用編ってことで。

物理メモリ 2GB に加え、スワップ領域を 4GB 確保しています。インストールの後半で SAP が起動されるのですが、そのときにスワップ領域も使い果たすと、当然インストーラーがクラッシュします。メモリ領域は余分に確保しておきましょう。

ハードディスクに関しては、インストール後の状態で、OS も含めて 50GB ちょうどぐらいです。使っていくうちに増えていくので、100GB ぐらい用意しておくと安心です。

SAP のインストーラである SAPinst は GUI が Java で書かれているので、Java が必要です。JRE 1.4.2 か JRE 1.5 が必要と書かれていますが、1.4.2 はたぶん入手不可能なので、手元にない人は 1.5 をダウンロードしましょう。ライフサイクル的にはもうサポート切れですが、まだダウンロードは以下の URL から可能です。Java6 でも動きそうな気はしますけどね。誰か試してみてください。

http://java.sun.com/j2se/1.5.0/ja/download.html

これでインストール環境が整いました。インストーラ起動は次回で。

[COM] [Win32] [C++] IWindowsUpdateAgentInfo::GetInfo を使ってみる

Microsoft の更新プログラムで、Windows Update Agent を更新するものがあります。Windows Update そのものを更新する、というやつです。Windows Update にもバージョンがあり、それがインクリメントされるのですが、そのバージョンの確認方法はあまり有名ではありません。検索すると、以下のようなページが出てきたりします。

http://msdn.microsoft.com/en-us/library/bb680319.aspx
http://technet.microsoft.com/en-us/library/bb680319.aspx

なんで SQL が出てくるんだよ、って話です。って、System Center の話なのか。個人ユーザーとは関係なさ過ぎて困る、と。

もうちょっと頑張ると、次のページを見つけました。

http://msdn.microsoft.com/ja-jp/library/aa387091.aspx

API 使えってか。というわけで、Windows Update Agent バージョン確認プログラムを書きました。COM クライアントは久々なので忘れすぎ。VARIANT 構造体とか、使い方が特殊なくせに、COM の世界では当り前っぽいので、その使い方にたどり着くのにずいぶんと時間がかかった。サンプルプログラムがすぐに見つからんし。そんなこんなで、以下のルーチンを書いてみた。

//
// wuaver.cpp
//

#include <windows.h>
#include <tchar.h>
#include <wuapi.h>
#include <stdio.h>

static const OLECHAR g_ApiMajorVersion[]= L"ApiMajorVersion";
static const OLECHAR g_ApiMinorVersion[]= L"ApiMinorVersion";
static const OLECHAR g_ProductVersionString[]= L"ProductVersionString";

void DoMyJob() {
    if ( SUCCEEDED(CoInitialize(NULL)) ) {
        IWindowsUpdateAgentInfo *pIWUA= NULL;
        DWORD err= 0;
        HRESULT ret= CoCreateInstance(
            CLSID_WindowsUpdateAgentInfo,
            NULL,
            CLSCTX_INPROC_SERVER,
            IID_IWindowsUpdateAgentInfo,
            (LPVOID*)&pIWUA);

        if ( SUCCEEDED(ret) ) {
            VARIANT varin, varout;

            // major version
            varin.vt= VT_BSTR;
            varin.bstrVal= SysAllocString(g_ApiMajorVersion);
            ret= pIWUA->GetInfo(varin, &varout);
            if ( SUCCEEDED(ret) ) {
                wprintf_s(L"Major version: %d\r\n", varout.lVal);
            }
            SysFreeString(varin.bstrVal);

            // minor version
            varin.vt= VT_BSTR;
            varin.bstrVal= SysAllocString(g_ApiMinorVersion);
            ret= pIWUA->GetInfo(varin, &varout);
            if ( SUCCEEDED(ret) ) {
                wprintf_s(L"Minor version: %d\r\n", varout.lVal);
            }
            SysFreeString(varin.bstrVal);

            // ProductVersionString
            varin.vt= VT_BSTR;
            varin.bstrVal= SysAllocString(g_ProductVersionString);
            ret= pIWUA->GetInfo(varin, &varout);
            if ( SUCCEEDED(ret) ) {
                wprintf_s(L"Product version: %s\r\n", varout.bstrVal);
            }
            SysFreeString(varin.bstrVal);

            pIWUA->Release();
        }

        CoUninitialize();
    }
}

int _tmain(int argc, _TCHAR* argv[]) {
    DoMyJob();
    return 0;
}

雑ですね、ええ。とりあえずは動きます。

と、ここまで完成したところで、WUA のバージョンってのは wuapi.dll のバージョンを調べればいいということを知った。おいおいおい!

[Memo] Adobe Reader Standalone Installer (Offline installation)

検証サーバーに Adobe Reader を入れようと思って Adobe のサイトを見たら、ダウンロード用の怪しいプラグインを入れないとダウンロードできない上に、ダウンロードとインストールが同時に行われてしまうという摩訶不思議な仕様になっている。しかもどう辿ってもスタンドアロンのインストーラが見つからない。これはいろいろ不便だろう、と。

ごりごり検索すると、ようやくソリューションを発見。FTP サーバーを公開していて、そこからダウンロードできた。しかも全製品、全バージョン、全言語対応。これは便利。Adobe Reader はここです。

ftp://ftp.adobe.com/pub/adobe/reader/