2021年 12月 の投稿一覧

Azure SQLをエクスポートしたbacpacファイルを、ローカルのMSSQLサーバにインポートする手順

こんばんは、ウチイダです。

最近、Azureクラウドの案件に携わっています。

クライアントから報告されたバグの事象を再現するために、データベースをローカルに取り込むのに苦労したので、手順をまとめておきます。

Visual Studioのインストールが必要です。

Azure SQLデータベースをエクスポートする

まずはデータベースをエクスポートします。

直接ダウンロードはできず、いったんAzure ストレージに保存する仕様です。

ストレージがない場合は作成する必要があります。

エクスポートが完了したら、指定したストレージからbacpacファイルをダウンロードします。

インポート時にこのファイルのパスを利用するので、フルパスで控えておいてください。

ローカルSQLサーバの設定を変更する

Azure のSQLをエクスポートすると、bacpacという種類のファイルが出力されます。

SQLクエリのダンプファイルができるわけではなく、そのままではローカルに取り込みできません。

まず、bacpacファイルをインポートできるように設定を変更します。

Visual Studio などMSSQL サーバに接続できるソフトウェアから、以下のクエリを実行します。

sp_configure 'contained database authentication', 1;
GO
RECONFIGURE;
GO

SqlPackage.exeでインポート処理を行う

bacpac ファイルをインポートできる機能を持ったプログラム SqlPaclage.exe が、Visual Studioに同梱されています。

Visual Studioをインストールしたくない方は、以下のページからSqlPackageだけインストールできます。

https://docs.microsoft.com/ja-jp/sql/tools/sqlpackage/sqlpackage-download?view=sql-server-ver15

Visual Studioをデフォルトの設定でインストールした場合、以下のフォルダにSqlPackage.exeが入っています。

Program Files Microsoft Visual Studio 2022 Community Common7 IDE Extensions Microsoft SQLDB DAC

PowerShellやcmdでこのフォルダを開いて、以下のコマンドを実行します。

> .\SqlPackage.exe /a:Import /sf:"*** bacpacファイルのパス ***" /tcs:"Server=(localdb)\\MSSQLLocalDB;Database=データベース名; Integrated Security=true;"
サーバー '(LocalDB)\MSSQLLocalDB' のデータベース '(入力したデータベース名)' にインポートしています。
配置計画を作成しています
配置の初期化中
配置計画を検証しています
# ... 中略
データベースのインポートが完了しました。
経過時間 0:00:16.29

これで完了です。

覚えてしまえば大した手間ではないですが、ひと手間かかりますね。

以上です。あなたのお役に立てれば幸いです。

WSL2のnpm install がめちゃ遅い、git clone ができない → resolv.confの設定を変更して解決

こんにちは、ウチイダです。

いつ頃からかわからないのですが、WSLでの通信が怪しいな…と思うことが増えていました。

たとえばnpm install をするとき、コンソール上のスピナーが止まってしまって、そのまま10分以上動かなくなったりすることが頻発していました。

それだけなら、コーヒーブレイクを兼ねて気長に待つか…と思っていたのですが、先日からGitHubからリポジトリのクローンができなくなるという事態も発生しました。

y-uchiida@LUMIERE:/test_clone$ git clone git@github.com:y-uchiida/my_test_repo.git
Cloning into 'my_test_repo'...
ssh: Could not resolve hostname github.com: Temporary failure in name resolution
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

このリポジトリは絶対にあるし、同じPCでPowershell経由でgit clone したら問題なくローンできるのです。

そして不可解なことに、何回か同じコマンドを繰り返していると、成功することがあります。謎だ…

原因究明と対応

さすがにGitHubが使えないのは困ってしまうので、きちんと対応することにしました。

エラーメッセージを見る限り、どうやら名前解決の問題のようなので、それらしいキーワードで色々検索してみます。

すると以下のページを発見。

https://www.reddit.com/r/bashonubuntuonwindows/comments/nt8asc/npm_install_extremely_slow_on_wsl2/

最後のコメントに、「いろいろ試して、ついに解決方法を見つけた」(意訳)と書かれています。

I tried every solutions here, but nothing works for me. But I found solutions.

in wsl, type below.

sudo rm /etc/resolv.conf
sudo bash -c ‘echo “nameserver 8.8.8.8” > /etc/resolv.conf’
sudo bash -c ‘echo “[network]” > /etc/wsl.conf’
sudo bash -c ‘echo “generateResolvConf = false” >> /etc/wsl.conf’
sudo chattr +i /etc/resolv.conf

After that, type below in cmd with administrator.

wsl –shutdown

https://www.reddit.com/r/bashonubuntuonwindows/comments/nt8asc/comment/hk7zpbw/?utm_source=share&utm_medium=web2x&context=3

このコメントの通り、resolv.confで指定するネームサーバーを変更したら解決しました。

変更前に色々と実験をしてみたものの、やはりネームサーバの問題のようです。

実験した内容は、おいおいどこかで書くかもしれません。

とりあえずこの変更により、困りごとが色々解消しました。

npm install が止まってしまうのも、git cloneが名前解決できないのも直ったので、とても快適になりました。

こころなしか、Docker pullまで早くなったような気がします。

免責

この変更による副作用が出てくるのか、現時点ではなんとも言えません。

設定変更の際は、バックアップを取るなどしてください。

まとめ

実はnpm install が遅い件については以前からちょくちょくググったりしていたのですが、それらしい情報がなかなか見つからなかったんですよね…

Cドライブ側にデータを置いていると遅い、という情報はたくさん出てきたのですが。

今回は英語の情報に絞って検索をかけて、上記のページに辿り着きました。

英語での検索、やっぱり大事ですね。。。

以上です。あなたのお役に立てば嬉しいです。