2017年7月15日土曜日

【SQL Server】開発用DBインスタンス作成&インポート

◆メニュー
 【SQL Server】開発環境構築(ER図作成にSSMSを使用)

◆前書き
 DB設計とアプリ開発を平行作業するなら、ER図作成用とアプリ開発用のDBインスタンスは分けておくと良い。管理が面倒だが、テーブル設計中にアプリの変更が発生なんて時に便利。(むぅ、アプリ開発者とDB設計者って普通のプロジェクトでは別々の人がやるんじゃねーの?)
 開発の終盤ではだんだん面倒になってきて、メンテナンスしなくなる。終盤では一本に絞っていいかも。
 DBインスタンスではなく、インスタンス内のDBを複数作る手もあるが、DB名はそこら中に出てくるため※、DBを複数作り、DB名を変えるというのも結構面倒になる。
 【SQL Server】新規インスタンス作成(ER図作成用)を参照してDBインスタンスを作成する。ただし、インスタンス名はDevelopにしておく。(大文字だけは見ずらい。Developのほうが見やすい。いや、長いのでDevで良い。)

※ 下記のように、DDLのエクスポートファイル等にDB名である「DB_EMPLOYEES」が出てきてしまっている。

◆インポート手順
1. インポート先のDBインスタンスへ接続

2. エクスポートしたファイル(script.sql)をSSMSへD&D。

3. インスタンス名を変更。下記ではERDIAGRAMをDevelopに変更している。ファイル内に2か所存在している。


4. 「!実行(X)」ボタンを押下。「コマンドは正常に完了しました。」となることを確認。


2017年7月14日金曜日

【SQL Server】DDL文をエクスポート Management Studio

◆メニュー
 【SQL Server】開発環境構築(ER図作成にSSMSを使用)

◆DDL文をエクスポート(SQL Server Management Studio)手順

1. Winボタン押下&「SSMS」と入力し、Enter。

2. 認証方法を選択し、接続。

3. 「スクリプトの生成」を選択。

4.  「次へ」ボタン押下

5. 必要なものを選択。以下では「データベース全体~」を選択。

6. オプションを選択して、次へ。(詳細設定ボタンで、より細かくオプションを選べる)

※ここで悩ましい問題がある。
 単一ファイルの場合、DDLが巨大(数千行?)だと、エクスポートは成功しても、インポートに失敗することがある(SQL Server2008の頃なので、今は大丈夫かも)。逆に「オブジェクトごとに1つのファイル」としてしまうと、インポートの際に、外部キー制約を意識して順番にファイルを投入する必要がある。

 両方出しておけばいいか。svnで扱う際はファイル単位のほうが過去ファイルと比較しやすいし、初回登録は、単一ファイルのほうが楽だし。巨大すぎて失敗したら、その時にファイル分割するかな。


7. 内容を確認し、「次へ」ボタン押下

8.「完了」ボタン押下。

9. ファイル出力を確認

10. ファイル内容を確認

以上

2017年6月28日水曜日

【Xperia Touch】G1109 購入

●大きさ
でかい 説明不要ッ!!

しかし、壁に映す際は、部屋の電気を消さないとほとんど見えない。

左はLG電子の34インチディスプレイ。右がXperia Touchを壁に映したもの。

ベッドより少し小さい位。
もっとでかくできると思う(Xperia Touch後ろにさげるだけ)。

●操作
壁に映す場合は、Bluetoothキーボード、マウスは必須。
自分の場合、LENOVO KT-1255とUhuru BT‐21012を接続して使用してる。

touch機能は、はっきり言って使いずらい。初回起動時に無線LANの設定をするが、touch機能が使いずらく苦戦。SSIDとパスワード入力を何度もやり直した。

●音楽
やはりBluetooth。DRC-BTN40を接続。普通に聞ける。上記キーボード・マウスも接続しているので3台同時使用。音飛びなし。

●ネットワーク
無線LAN。特に問題なし。

●動画
普通に見れる。
mp4、YouTube、ニコニコ動画は特に問題ない。ニコニコ生放送の場合に、時々読み込み中になってるかも…。原因がニコニコ側か、インターネット回線か、無線LANか、AndroidTouchのせいか原因未調査。

●ゲーム
ゲームは持ってないので不明。

●PC接続
PCと接続したいが、Xpedia TouchのHDMIケーブル接続部はかなり狭く、手持ちのHDMI変換アダプタが干渉してしまい、接続できず。別途ケーブル購入予定。
ケーブルを別途購入して、PCと接続してみた。普通に見れる。しかし、電源投入のたびにHDMIボタン(正確にはボタンではなく平べったいランプ)を押さないといけないので不便。また、Android Touchをシャットダウンするのも同じくHDMIボタンを押さないといけないので更に不便。電源入れっぱなしの想定なのか?

2017年5月28日日曜日

【SQL Server】ミラーリング構築

◆メニュー
 【SQL Server】開発環境構築(ER図作成にSSMSを使用)

■SQL Server2012(試用版)でミラーリングを構築
●注意事項
  • 今回は監視サーバは使用しないが、手順はさほど変わらない。
  • 以下の手順ではANONYMOUSなるユーザに権限を与えているので注意!!誰でもミラーリングのポートにアクセスできるのかな?要調査&変更。
  • またミラーリングより後に、AlwaysOnが追加されて、置き換えられつつある。
●事前準備
1. Server1(以下ではwin10x64svr1)にOSインストール
2. Server1にSQLServer2012をインストール
3. Server1にwk(適宜変更すること)というデータベースを作成
4. Server2にOSインストール
5. Server2にSQLServer2012をインストール
6. Server2にwk(適宜変更すること)というデータベースを作成(Server2側のデータベースは作っておかなくても大丈夫かも)

●手順
◆以下Server1の作業
1. Server1で復旧モデルを「完全」にする
1.1. ssmsを起動し、ログイン
1.2. wkを右クリックし、プロパティを選択
1.3 復旧モデルを「完全」にして、OKボタン押下
2.  Server1で完全バックアップ取得
2.1. wkを右クリックし、タスク-バックアップを選択(データベースがある程度大きい場合は圧縮オプションをつけると容量が小さくなるかも、容量が小さくなれば、後でServer2へコピーする際の時間も早くなるはず)
2.2. 削除ボタン&追加ボタンを押下
2.3. バックアップ先をc:\bk\wk.bak(適宜読み替え)に変更し、OKボタン押下
2.4. OKボタン押下

3. Server1でトランザクションバックアップ取得
3.1. wkを右クリックし、タスク-バックアップを選択
3.2. 削除ボタン&追加ボタンを押下(データベースがある程度大きい場合は圧縮オプションをつけると容量が小さくなるかも、容量が小さくなれば、後でServer2へコピーする際の時間も早くなるはず)
3.3. バックアップ先をc:\bk\wk.trn(適宜読み替え)に変更し、OKボタン押下
3.4. OKボタン押下

4. ファイル共有またはリモートデスクトップで、wk.bak、wk.trnをServer2へコピー。

◆以下Server2の作業
5. バックアップの復元
5.1. wkを右クリックし、タスク- 復元-データベースを選択(wkデータベースは事前に作成しなくても復元できるかも)
5.2. デバイスを選択し、...ボタンを押下
5.3. 追加ボタン押下
5.4. Server1からServer2へコピーしたwk.bakを指定
5.5. OKボタン押下
5.6. オプションタブを選択
5.7. 以下のように設定し、OKボタン押下
「既存のデータベースを上書きする」をチェック
「RESTORE WITH NORECOVERY」を選択 ★★これは必須★★
「復元の前にログ末尾のバックアップを実行する」を解除
 他に接続があった場合は、以下のように失敗するので、「接続先データベースへの既存の接続を閉じる」を選択 しOKボタン押下
 5.8. OKボタン押下
6. トランザクションログ復元
6.1. wkを右クリックし、タスク-復元-トランザクションログを選択
6.2. 「ファイルまたはテープから」 を選択し、...ボタン押下
6.3. 追加ボタン押下
 6.4. Server1からServer2へコピーしたwk.trnを指定し、OKボタン押下
6.5. OKボタン押下
6.6. オプションタブ選択し、真ん中(RESTORE WITH NORECOVERY )を選択し、OKボタン押下 ★★これは必須★★
6.7. OKボタン押下

◆以下Server1・Server2の操作
7. ファイアウォールのポートを解除
7.1. Server1でWinキー押下し、fireを入力し、「セキュリティが強化されたWindowsファイアウォール」を選択

7.2. 詳細設定を選択
7.3. ポートを選択し、次へを押下
7.4. TCP、特定のローカルポートを選択し、「1433, 5022, 7022」を入力し、次へを押下(7022は不要かも)

7.5. 接続を許可するを選択し、次へを押下
7.6. 次へ押下
7.7. SQLServerMirror(適宜名前を変更する)を入力し、完了を押下
7.8. Server2に対して、7.1.~7.7.を実施。

◆以下Server1の操作
8.  ミラーリング構築
8.1. Server1でwkを右クリックし、タスク-ミラーを選択
8.2. セキュリティの構成ボタンを押下
8.3. 次へを押下
8.4. 今回は監視サーバによるフェールオーバーを使わないので、「いいえ」を押下。
8.5.  次へを押下
8.6. 接続ボタンを押下
8.7. Server2のホスト名を指定し、接続ボタンを押下(ここで失敗する場合、ファイアウォールやホスト名、ネットワーク関連で設定不備があると思われる、自分の場合ファイアウォールのポート番号で5022だけ開けておけば良いと思ってたが、1433も必要だった。)
8.8. 次へボタンを押下
8.9. 次へボタンを押下
8.10. 完了ボタンを押下
8.11. 閉じるボタンを押下
8.12. ミラーリングの開始ボタンを押下
8.13. はいボタンを押下
⇒以下のように同期完了が出れば成功
8.14.1. 本来なら上記のダイアログが表示されるはずだが、以下は失敗。
8.14.2. 失敗した場合はログを見てgoogle検索。自分の場合は権限だった。ログは、管理-SQL Server ログ-現在をダブルクリック。念のため、Server1、2両方見ること。
8.14.3. 下記のようなログが出力されていた。
エラーログ(テキスト)

日付 2017/05/28 17:07:02
ログ SQL Server (現在 - 2017/05/28 17:18:00)

ソース Logon

メッセージ
Database Mirroring login attempt by user 'NT AUTHORITY\ANONYMOUS LOGON.' failed with error: 'Connection handshake failed. The login 'NT AUTHORITY\ANONYMOUS LOGON' does not have CONNECT permission on the endpoint. State 84.'.  [CLIENT: 2408:211:1427:2000:1904:d5f9:1ad1:1e30]

エラーがない場合は、以下の手順は不要。
◆以下Server1、Server2の操作
9. ANONYMOUSE LOGONに権限付与(本来は危険と思われる)
9.1. セキュリティ-ログインを右クリックし、新しいログインを選択
9.2. 検索ボタン押下
9.3. 詳細設定ボタン押下
9.4. 検索ボタン押下
9.5. ANONYMOUSE LOGONを選択し、OKボタンを押下
9.6. OKボタンを押下
9.7. サーバーロールタブを選択し、sysadminを選択し、OKボタンを押下。(この手順は不要?)
9.8. データベース-システムデータベース-masterを選択し、新しいクエリを押下
9.9. 以下を入力し、実行ボタンを押下。
GRANT CONNECT ON ENDPOINT::ミラー化 TO [NT AUTHORITY\ANONYMOUS LOGON];

手順9.1~9.8実施後に、再度、ミラーリング構築(手順8.1.~8.13)を実施したら同期に成功

OSSよりかは随分楽だが、それでも手順は長く、複雑だ…。
つーかMicrosoftの言うフェールオーバーって意味合ってんのか?手動でもフェールオーバーって言ってるけど手動で系切り替えするのって、スイッチオーバだと思ってたゾ。