RPAエンジニアの雑記

RPA(Blue Prism)について色々記載してます。

(BluePrism)ポケモン図鑑を作る ~Part16 作成中にちょっとハマったところ編~

どうも、おむおむです。

前回、
次回、最終回☆
という煽りを入れました。
newgraduate19-rpa.hatenablog.com

が、今回は最終回になりませんでした。。。

f:id:newgraduate19:20200725103312p:plain

いや、ほんとに最後にするつもりだったんすよ。
このシリーズ早く終わらせて別のことしたいし。

ただ、いざ本番!となったときに
「あれ?なんかうまく動かん、、、」となるところが出てきてですね。。。

ひとえに、私の知識不足が原因でございます(m´・ω・`)m ゴメン…

データベースがリストアできない

まず、ローカル環境で作ったデータベースから
.bakファイルを作成して、
SSMSとかを使ってSQL Serverにリストアしようとしたんです。

そしたら、毎回エラーが起きるわけなんですね。

メッセージ 3110、レベル 14、状態 1、行 1
User does not have permission to RESTORE database 'bp'.

おや・・・?
おかしいですね、管理者ユーザでログインしているはずなのに。。。

と思って調べてみると、
まずレストアを実行するにはdb_createrの権限が必要らしい。
docs.microsoft.com

で、今の自分の権限を調べてみると、、、
f:id:newgraduate19:20200725105818p:plain

( ゚Д゚)

どうやらSQL Serverのマスターアカウントには
db_ownerの権限しか与えられないようです。
docs.aws.amazon.com

S3を使用するとレストアできるみたいですが、
いかんせんS3は無料枠がないため、
また1からポケモン用のデータベースを作ろうと思います。。。
docs.aws.amazon.com

BULK INSERTできない

newgraduate19-rpa.hatenablog.com

さて、しょうがないので↑の記事のように
もう一回BULK INSERTCSVをインポートしよう、と思ったら、、、

メッセージ 4861、レベル 16、状態 1、行 1
Cannot bulk load because the file "C:\temp\pokedex.csv" could not be opened. Operating system error code 3(The system cannot find the path specified.).


(´;ω;`)ウゥゥ

なんなんだよぉ!
docs.microsoft.com

' data_file ' 指定のテーブルまたはビューにインポートするデータが含まれているデータ ファイルの完全なパスを指定します。
BULK INSERT を使用して、ディスクまたは Azure Blob Storage (ネットワーク、フロッピー ディスク、ハード ディスクなど) から
データをインポートすることができます。
data_file には、SQL Server が実行されているサーバーからの有効なパスを指定する必要があります。
data_file がリモート ファイルの場合は、UNC (汎用名前付け規則) 名を指定します。
UNC 名の形式は、\\Systemname\ShareName\Path\FileNameです。


ドキュメント読まなかった私が悪いわよ!ちくしょう!
f:id:newgraduate19:20200725112710p:plain

でも、このためだけにSMBを有効化したり
セキュリティグループいじるのめんどいなぁ。。。

ということで、SSMSの機能を使用してローカルのファイルをインポートします!
docs.microsoft.com

ちなみにUTF-8でインポートしました。

SELECTできない

さて、データをインポートできたから、
SELECTできるか確認してみよう!

SELECT * FROM pokedex WHERE japanese = 'ピカチュウ';
(結果なし)


f:id:newgraduate19:20200725135445p:plain

ポケモン図鑑ピカチュウがいないわけないだろ!
○ーキド博士!○ツギ博士!どうなってんだ!
f:id:newgraduate19:20200725145719p:plain
(EBOリスペクト☆)



・・・落ち着きましょう。
問題を切り分けていくのです。

まず、照合順序はどうか。
docs.microsoft.com

残念、今回はUTF-8でデータをインポートしたので
照合順序がデフォルトのSQL_Latin1_General_CP1_CI_ASでも
問題がないはずです。
docs.aws.amazon.com

結論から言うと、
WHERE句で指定する値に
Nというプレフィックスを付けます。

(↓なぜかサイト表示されない)
https://support.microsoft.com/ja-jp/help/904803

やってみましょう。

SELECT * FROM pokedex WHERE japanese = N'ピカチュウ';
id english japanese
25  Pikachu ピカチュウ


f:id:newgraduate19:20200725144303p:plain


こんな感じで、色々詰まっておりました。。。

まとめ

SQL Server、一筋縄ではいかない
AWS、一筋縄ではいかない
・でもどっちもドキュメントが豊富!いえい!

ちなみに、今回はちょっとハマったところ。

次回はもっとハマったところを書きます☆
最終回が来ない(´;ω;`)ウッ…