ファイルサーバーの移行

以下の要件で、ファイルサーバーの移行を行った。 移行元サーバー: Windows Server 2008 R2 (Enterprise) 移行先サーバー: Windows Server 2016 (Standard) 移行容量: 150GB程度 移行に使用した方法: Windows Server移行ツール 結果は、権限はNTFS、共有のものも含めて完璧に移行できた。移行後は既に公開設定が済んだ状態となっていた。 時間は8時間ちょっとかかった。複数の対象フォルダがあったため、Powershellでのバッチを作成して両方で動作させたため、つきっきりだったわけではない。 移行は2段階で行い、最初に10GBほどのフォルダの移行を行った。この移行では暗号化を行うのだが、これによるCPUの負荷が大きいことに気付き、2段階目ではCPUを2->4に増強した(共にHyper-V上のVM)。 2段階目において、Trend Micro Business Securityのスキャンが開始されたことに気付いたのだが、管理者権限で停止しようとしても受け付けてもらえず、結局アンインストールすることで停止するしかなかった。その間1.5時間ほどメモリ、ディスクIOがかなり高い状態だった。 上記の問題がなかったとしても6-7時間はかかったと思われる。容量に対してあまりに時間がかかりすぎている。同ツールでは移行後に権限だけ付け直す「-Include Share」オプションがあるようなので、robocopyでファイルだけ移行し、「-Include Share」オプションで権限を移行する方法が最も時間をかけずに確実に移行できたのではないかと思う。

<span title='2018-01-08 00:00:00 +0900 +0900'>January 8, 2018</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

テーブル定義の移行でよく使う方法

社内DBを試行錯誤しているため、DB間データ移行の前段としてテーブル定義をコピーしたいことがある。 大抵のDBでは無料でもツールが充実しており、ODBCライブラリを入れればよっぽど問題ないと思うのだが… MySQL … Workbench Oracle … SQL Developer SQL Server … SQL Server Management Studio(SSMS) Windows 10 Pro 64bitで、SSMSからOracleにアクセスしようとしたところ、どうにもエラーでうまく行かない。64bitのInstant Client + ODBCをインストールし、OSのODBC管理ツールでテスト接続は成功しているのだが… で、こういう時はAccessでODBC経由でリンクを貼る分にはまず失敗しない。この状態でテーブルをAccessにテーブル定義のみコピーし、そのAccessのテーブルをSSMSでインポートするとうまくいく。

<span title='2017-11-30 10:51:34 +0000 UTC'>November 30, 2017</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

redmine, zabbixのActive Directory(LDAP)認証

redmine, zabbix共にActive DirectoryのLDAP機能を利用して認証の統合ができる。が、設定方法が引っかかった。 redmineはアカウントごとに認証方式の設定が可能。「管理」の「LDAP認証」にAD認証の設定をしたうえで、AD認証したいアカウントを作成して認証方法をADと指定してやればよい。 一方、zabbixは認証方法を変えるとそれが全ユーザーに適用される。ユーザーグループごとに認証方式が指定できるのだが、既定では「デフォルト」となっている。 認証を変えると、この「デフォルト」の認証方式が変わるので、結果として全ユーザーグループの認証方式が変更されてしまう。なので、「Zabbix administrators」グループの認証方式を事前にローカルに変更しておく必要がある。 だが、インストール時に作成される管理者アカウントでログインした状態だと、この「Zabbix administrators」グループの認証方式を変更できない。自分、及び自分のプライマリグループに関する情報は変更できないらしい。なので、別のユーザーグループを作成し、そこに所属するアカウントを作成。アカウントに「Zabbix特権管理者」権限を付与。そのアカウントでログインして「Zabbix administrators」グループの認証方式を「Zabbixデータベース内のユーザー情報」に変更する、という手順を踏む必要がある。 zabbixめんどい。

<span title='2017-11-24 13:11:09 +0000 UTC'>November 24, 2017</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

ClosedXMLの画像追加におけるWorksheetの取り扱いについて

C#でClosedXMLを使用してExcelに画像を追加する処理をしていた際、なぜかWorkbookの保存時にObjectDisposedExceptionが発生するという事態になりました。 以下のようなコードです using (XLWorkbook wb = new XLWorkbook(filePath)) { IXLWorksheet ws_src = wb.Worksheet("Template"); using (IXLWorksheet ws = ws_src.CopyTo("1")) { var image = ws.AddPicture(imagePath1); image.MoveTo(ws.Cell(3, 3).Address); image.Scale(.5); image = ws.AddPicture(imagePath2); image.MoveTo(ws.Cell(20, 3).Address); image.Scale(2); } using (IXLWorksheet ws = ws_src.CopyTo("2")) { var image = ws.AddPicture(imagePath3); image.MoveTo(ws.Cell(3, 3).Address); image.Scale(.5); } ws_src.Delete(); wb.Save(); } wb.Save() を実行すると例外が発生します。imageの処理をコメントアウトするとエラーは発生しません。 結論として、Worksheetを割り当てるusing句を外したところ、正常に動作するようになりました。エラー調査の際にOpenXMLのコードもちらっと見たのですが、おそらく画像を追加する際にいったんWorksheetの情報を更新して再割り当てするような処理が必要となります。usingを使っていると再割り当てができないのでエラーになったのではないかと。 ただ、エラー箇所がusing句の中ではなく、Saveを実行した場所というのはよくわからないのですが… 再割り当てできない状態で内部変数をいろいろいじくって、それをファイルに保存する際にそれが検知されてエラーとなる、とかではないかと。 ClosedXMLのサンプルコードを見ていると、Workbookにusing句を使用するものはあるが、Worksheetに使用するものはほとんどない。WorkbookのDisposeで配下のすべてのリソースが解放されるので不要なのだろう。上記書き方が一般的ではないのかも。

<span title='2017-11-07 10:20:41 +0000 UTC'>November 7, 2017</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

MySQL Workbenchに切り替え

前回の記事で、HeidiSQLがうまく動作しない(DEFAULT CURRENT_TIMESTAMPを表示できない)件で、クライアントをMySQL Workbenchに切り替えた。 実は以前も試していたのだが、ホスト名のみで指定した場合に、Test Connectionは成功するのに実際に接続する際にエラーで落ちてしまっていて中止していた。IPアドレスで指定したところ正常に動作したので、こちらに切り替えることにした。

<span title='2017-10-19 19:18:47 +0900 +0900'>October 19, 2017</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41