カテゴリー: Windows

  • Windowsでバッチファイルを実行したら、正しいパスなのにエラーになる

    Windows10で作成したバッチファイルを、Windows10でバッチファイルを実行したらエラーになった。

    問題の箇所を切り分けていったところ、バッチファイルから実行したときのみ、パスに日本語を含むフォルダの処理でエラーになっていることがわかった。
    バッチファイルの文字コードを調べたところ、「UTF-8」だった。同じようなバッチファイルでエラーにならないものは文字コードが「SJIS」だった。エラーになっていたファイルの文字コードを「UTF-8」から「SJIS」にして実行したところ、正常に処理ができた。Windowsのバッチは、UTF-8で保存すると任後を含むパスのマウントや参照ができない。

    Windows10でUTF-8対応されているが、Windowsのバッチファイルで日本語のパスを扱うところは、いまだにSJIS限定のようだ。

  • Active Directoryに登録されたコンピュータの一覧を出力する

    AD(Active Directory)に登録されたコンピュータの一覧を出力するにでは、”csvde”コマンドを使用する。

    コンピュータの一覧をファイルで出力するには、以下のコマンドを実行する。

    csvde -u -f 出力するファイルのパスと名前 -r objectCategory=computer

    実行例)

    csvde -u -f C:\Users\administrator\Desktop\computer-list.csv -r objectCategory=computer

    1000台程度のコンピュータがADに登録されていたが、ほんの数秒で実行が終わった。

  • SQL Server 2005でログを消す方法

    SQL Server 2005で、DBのログが肥大化してしまい、バックアップ時に切り捨てるスペースもないときの対処。 この作業手順は、作業対象のDBをオフライン(というかデタッチ)にするので、注意。

    1. SQL Server Management Studioを開き、DBサーバに接続する。
    2. 対象のDBを選び右クリックし、プロパティを開く。
    3. プロパティから、MDFファイルとログファイル(LDFファイル)の場所を調べる。
    4. 対象のDBを選び右クリックし、「タスク」から「デタッチ」を選択する。
    5. ExplorerでLDFファイルの保存場所を開き、該当のログファイル(LDFファイル)を削除する。
    6. SQL Server Management Studioで、データベースを選択し、右クリックし、「アタッチ」を選択する。
    7. 「アタッチするデータベース」で「追加」をクリックする。
    8. 上記で調べたMDFファイルの場所を指定し、該当のMDFファイルを選択し、OKをクリックする
    9. 「データベースの詳細」にログファイルのファイル名が表示されている場合は、これを選択して、削除する。
    10. 「OK」をクリックする
    11. データベースがアタッチされる(ちょっと時間がかかる)。このタイミングで新しいログファイル(LDFファイル)ができる。

    ※ SQL Server 2005のサポートは終了してます。なので、自己責任で。

  • Windows 10 October 2018 Updateでファイルが消失する原因が判明

    https://pc.watch.impress.co.jp/docs/news/1147038.html

    ファイルの復活を約束していたくらいなので、原因のあたりはついていたんだと思う。Windows 10 October 2018 Updateでファイルが消えた問題の原因が判明したとのこと。

    「Known Folder Redirection(KFR)」機能を過去に有効にしたことがあり、リダイレクト先に移動するさいに、オリジナルファイルが移動されず、古いフォルダに取り残された場合に発生する。

    なるほど、KFRの機能を有効にしていた人が対象ということか。KFRは使っていないし、Windows 10は基本フォルダ構成はデフォルトのままで使っている(Cドライブ直下にWorkフォルダを作ったりはしているけど)ので、影響がなかった。自作PCのころならば、確実に踏み抜いていそうな障害だった。

    不具合の原因がわかり、おかげで自分には影響がなかったこともわかった。これはこれでひと段落ついてよかった。

  • Windows10のOctober 2018 Updateの配信が停止

    https://jp.techcrunch.com/2018/10/07/2018-10-06-microsoft-suspends-windows-10-update-citing-data-loss-reports/
    Windows 10の最新版を 一般公開してから数日後、Microsoftはアップデートを中止し、データを失った複数ユーザーからの報告があったと述べた。

    Windows10のOctober 2018 Updateの配信が停止された。なんでもアップデートを適用したときに、データが消えてしまう不具合がユーザから報告され、そのためアップデートの公開が停止されたようだ。いきなり公開されていた大型アップデートなので、なにかしらの不具合はあるとは思っていたけれど、データ消失系の大きな障害だったとは。とりあえず、公開日に、さくっとOctober 2018 Updateをあてたときには影響がなかった。データ消失には、何かしらの条件があるのだろう。

    ちゃんと解明されて、ちゃんと公開されるのを待とう。続報がなかなか入ってこないのが厄介なところだけど。

  • インストールされているUbuntuのバージョンを調べる

    インストールされているUbuntuのバージョンを調べるには、下記のコマンドを実行する

     lsb_release -a

    実際に、Windows Subsystem for LinuxのUbuntuで試してみると、

    zen@PCR662:~$ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 18.04.1 LTS
    Release:        18.04
    Codename:       bionic
    zen@PCR662:~$

    と、表示され、Ubuntu 18.04.1 LTS がインストールされていることがわかる。

    ちなみに、「/etc/os-release」を確認しても、Ubuntuのバージョンを調べることができる。

    zen@PCR662:~$ cat /etc/os-release
    NAME="Ubuntu"
    VERSION="18.04.1 LTS (Bionic Beaver)"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu 18.04.1 LTS"
    VERSION_ID="18.04"
    HOME_URL="https://www.ubuntu.com/"
    SUPPORT_URL="https://help.ubuntu.com/"
    BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
    PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
    VERSION_CODENAME=bionic
    UBUNTU_CODENAME=bionic
  • Windowsで時刻同期先と時刻同期の状況をコマンドで確認する方法

    Windowsでの時刻同期の操作はw32tmを使用する。コマンドを使うことで、NTPサーバとの時刻同期の状況を確認することができる。

    同期状況を確認する

    w32tm /query /peers

    ポーリング感覚や状態、同期先(ピア)などを確認することができる。

    実行例)

    C:\WINDOWS\system32>w32tm /query /peers
    ピア数: 1
     
    ピア: ntp.xenos.jp
    状態: アクティブ
    残り時間: 1020.0269700s
    モード: 3 (クライアント)
    階層: 3 (二次参照 - (S)NTP で同期)
    ピアポーリング間隔: 10 (1024s)
    ホストポーリング間隔: 10 (1024s)
  • Windowsでコマンドから時刻同期をさせる方法

    Windowsでの時刻同期の操作はW32tmコマンドを使用する。このコマンドを使うことで、NTPサーバとの時刻同期も手動で行うことができる(時刻同期の確認ができる)。

    即座にNTPサーバと同期させる

    w32tm /resync /nowait

    「/resync」で再同期、「/nowait」で即座に同期を実施する。

    時刻同期を行う際は、コマンドプロンプト(cmd)を管理者モードで起動し、w32tmコマンドを実行すること。管理者モードで行わないと、コマンドが拒否される。

  • ミスアライメントI/O

    ミスアライメントとは

    ストレージ側のブロックサイズにたいして、使用しているOSのアプリケーションデータの書き始めと終わりがストレージ側のブロックの中間から始まり、複数のブロックにまたがっている状態。

    ミスアライメントI/Oが発生する状況

    例えば、Windowsでは、iSCSIマウントしたストレージ側のブロックサイズが16Kのときに、フォーマットしたドライブのアロケートユニットサイズを4Kにしてしまうと、ミスアライメントI/Oが発生する。

    解消するには、アロケートユニットサイズをストレージ側のブロックサイズと同じ値でフォーマットする。

    ミスアライメントI/Oが発生していると、データの読み書きのパフォーマンス低下につながる。

  • システムバックアップからリストアしたところ、OSは正常起動したがOracleDBが自動で立ち上がらなくなった。

    OracleがインストールされたWindowsサーバをシャットダウンし、システムバックアップを取得し、データファイルを保存している先のiSCSIディスクのバックアップも取得し、完全な静止点のバックアップを作成した。作業後、静止点のシステムバックアップからリストアを実施。リストア後、OS(Windows)は正常起動し、iSCSIについても問題はなかった。

    しかし、OracleDBの接続確認したところ、「ORA-01034」が発生し、Oracle DBが正常に起動していなかった。Windowsのイベントログも確認したが、特に変なエラーはなし。唯一、Oracle DB起動時に権限系のエラーが出ていた。完全な静止点でのバックアップだったので、SCN番号も関係なし。しかも手動で`startup`すると正常にOracle DBが起動して使えるようになった。

    試行錯誤で、Windows OSの再起動も試したが、事象が再現するだけ。アーカイブログモードもオフにしてみたが状況は変わらず。ドメインへの再参加も実施したが変わらず。いろいろと試したが状況は変わらず。ひとつひとつ切り分けていった結果、原因を特定した。

    原因は、WindowsのOSが起動時に、iSCSIディスクがマウントされる前に、Oracle DBのサービスが起動していたため、データファイルがマウントできず、起動が失敗していた。

    対応として、Oracle DBのサービスを開始遅延で設定。これで、先にiSCSIドライブがマウントされるようになり、自動起動するようになった。

    今までは、たまたま起動順としてiSCSIのサービスが先に起動していただけ。それがイメージバックアップからのリストアがトリガーとなり、起動順番が変わり、Oracle DBが自動起動しなくなった、ということ。