俺の雑記帳

My random memorandumです。(つまり、個人的な備忘録であり、その点ご容赦を。)

.bashrcと.bash_profile等

rdiff-backupを外部サーバーから動かしたとき*1、PATHが通らず動作しなくなった。
.bash_profileに書いたが 動作せず、.bashrcに書いたら動作した。 そこで、.bash_profileと.bashrcの違いを調べてみた。
しかし、判然としなかったので、取敢えずいくつか調べたページを 以下に列挙しておく:


atmarkit.itmedia.co.jp

↑最も簡潔に解説。


blog1.mammb.com

↑最も詳細、かつ信頼性が高そう。
 profile、.bash、.bash_profile等の読込フロー図も秀逸で、個人的に保存したぐらい。
 "ログインシェル"などの用語解説もあり。  ただし、長い…


https://wa3.i-3-i.info/diff225shell.html

↑冒頭に用語解説がついているのが分かり易い。全体に平易。


techracho.bpsinc.jp

bashが Bourne Again Shell、sh が Bourne Shell ということまで解説。


tech.noricgeographic.com

↑「結論としては、bash実行時に必ず反映しておきたい設定は、~/.bashrc にだけ編集すれば良い!」



.bash_profileから.bashrcを読み込むようにしておく派が多いが、.bashrcは(命令のたびに読み込まれるので?)標準出力/エラー出力が無いようにしなくてはならない、というように高い安定性が求められるようだ。

*1:rdiff-backup --remote-schema ”ssh -C -p4 \%s rdiff-backup --server" user@***.jp::/home/..... /.../bkup/...

Zend Freamwork 1 を PHP7にアップグレードしても使いたい。

仕事で、ZF1(Zend Framework 1)を、フレームワークとしてではなく、ライブラリとして一部の機能を利用している。(子クラス差分プログラムでのメソッド一覧表を表示する管理ページで。)

PHP5.4⇒PHP7.4に upgrade version(バージョンアップ)するにあたって、互換性を調べた。 (少し前に調べ、URLだけ記録していたので、各URLをなぜ記録したかなど一部失念した。また読み直して思い出したら編集する予定。)

最初のStackOverFlowの記事にあるように、互換性はなくなるが、最後に挙げURLの Shardj / zf1-future で対応している、という話だった気がする。 二つ目のURLの、Laminas のWikipedia記事によると、ZFがOpenSourceかされ名前が変わったってこと?

⇒結局、利用したい部分は動作したので、ZF1のまま使うつもり。


stackoverflow.com

⇒互換性はなくなることが分かり


en.wikipedia.org


discourse.laminas.dev


blog.fits-inc.jp


github.com


結合テストとシステムテスト

結論から言えば、
この二つの違いを理解した上で、俺は、「統合テスト」(=結合テスト)という語をよく使いたい場面が多くなりそう。


itpgsepm-note.com

これ↑によると、

  • 結合テスト = 連結テスト = 統合テスト = ソフトウェア適格性確認テスト
  • システムテスト = 総合テスト = システム適格性確認テスト

また、 単体テストをパスしてきた機能をすべて結合して、利用者が使用する機能として問題がないかを検証するものが結合テスト
(オンライン機能もバッチ機能もすべて対象。外部(他システム)とのインターフェースがあれば、そのテストも行う。
 機能要件の品質はここで確定させる。)

一方、システムテストは、機能要件の細かい検証の比重は下がり、 非機能要件も検証する。
また、業務運用を想定した検証が中心となる。
 具体的には、本番時と同等のデータを投入して、各機能のレスポンスを計測する、夜間バッチの処理時間を計る、自動運転(バックアップ運用など)を行うなど、実運用を想定した検証を行っていく。


pm-rasinban.com

対照的に、これ↑によると、
単体テストの粒度の機能を、二つ以上つなげてテストするものは、なんでも結合テスト
という感じ。
「連携テスト」という語感がピッタリ。


したがって、
俺が表現したいことが多いのは、「統合テスト」という語感がピッタリ。(特に、"総合テスト"と呼ぶか"結合テスト"と呼ぶか迷う場合は、中間的な語感の"統合テスト"がぴったりという事だろう。)
また、
単に「繋げてテストしたい」、という場合は、
単体プログラム間のテストなら「連結テスト」 (上記二つ目の記事で言う"内部結合テスト"に近い語感) 、
データーインターフェース等の検証に重きがあるなら「連携テスト」 (二つ目の記事で言う"外部結合テスト"に近い語感) 、
と呼びたい。

IPAとかが定義するような内容をみなが理解している前提で"結合テスト"や"システムテスト/総合テスト"という語を無条件で使いたいが、いままでの経験上、それができる粒ぞろいの人員を望むのは難しかった。
または、本来なら、プロジェクトごとに"結合テスト"が何であるか、"システムテスト/総合テスト"が何であるか、定義しておくべきだろうが、それもいちいちやるのは現実的でないし、定義しても,皆,語感などに引きずられ定義を見ない…
 したがって、語感重視で、「統合テスト」("総合テスト"ではない)、「連結テスト」,「連携テスト」を(俺の中では意識して),使い分けたい。
 また、その場合でも、それが「結合テスト」であるか「システムテスト」であるか、またはどちらに分類すべきでもないものか、自分の中では意識していたい。)

SQL Serverデータファイルの特性、Take DB Offline、.ldfの肥大化対策

SQL Serverのデータファイルは、3種類:

  • *.mdf: メインのデータファイル
  • *.ndf,: サブのデータファイル。パフォーマンス向上用。
  • *.ldf: "トランザクションログ"

これらファイルの更新日付は更新されない?!

social.msdn.microsoft.com

SQL Serverのプログラムが、ずっとファイルをつかんで開きっぱなしになるため(?)、なんだかすごい古いまま。(サーバー筐体(EC2インスタンス)の停止&起動でも、更新されないようだ!!)

コピーできない?

前エントリのように、SQL Serverのデータファイルをコピーする必要があったが、

SQL Server (MSSQLSERVER) によってファイルは開かれているため、操作を完了できません。
ファイルを閉じてから再実行して下さい。
[再実行] [スキップ] [キャンセル]」

では、Database単位で止めたいが、止められない!

SQL Server インスタンス丸ごと"Stop"することはできるが、"Database"単位では出来ない。
代わりに、"Database"単位では、"Take Offline"ができる。 stackoverflow.com

しかし、止めようとしても、"Take database offline"ウィンドウで、Statusが"In progress..."のまま、ずっと。
⇒Replicationを"Delete"する必要がある、との話で、諦めた。やはり全部止めてからコピーするしかないか…

.ldfは、肥大化しがち。

肥大化する要因はいくつかある。 今回は、以下が全て当てはまった。

  • テスト環境のdatabaseなど、不必要にRecovery model "Full" になっている。
    "Simple"にすればよい。 (Microsoft SQL Server Management Studioでは、Object Explorerで、該当のDatabaseを右クリック ⇒ Database Property > Options で確認、設定できる。)
  • バックアップが正常に動作していない。
    今回は、バックアップ先のディスクが先にいっぱいになり、しばらくバックアップが取れていなかった。
    バックアップが取れていないと、古い内容を *.ldf から削除するような動作が働かない。
    Microsoft SQL Server Management Studioでは、Object Explorerで、該当のDatabaseを右クリック ⇒ Tasks > Back Up... のウィンドウで、Destination を確認すると、バックアップ先が分かる。そこのデータがきちんととれていれば、この問題はない。)

matutak.hatenablog.com (このブログの次の日の記事に、 DBCC SHRINKFILE のSQL命令が。"関連記事"にもいろいろ。)


qiita.com 総合的に書かれた長い記事だが(※)、途中に、DBCC SHRINKFILE について記載あり。SQL Server Management Studio からでも実行する方法の記載あり(DBを右クリック - タスク - 圧縮 - ファイル)。
ただ、1GBなどすごく小さい単位ずつ実行せよ、と書いてあり、信頼性に疑問。(パートナー会社は、ただ一発、以下のSQLで実行した。)

USE [TEST-DB] GO ALTER DATABASE [XXXX-XX] SET RECOVERY SIPLE GO USE [TEST-DB] GO DBCC SHRINKFILE (XXX_Log, 1000) GO

(※)このページ中に「2017年12月時点 RDS for SQL Serverではインスタンス作成時に割り当てたディスク容量を拡張することができません。」という記載があり、注意。


より信頼性の高い記事だが、ちょっと事例が違う。 www.atmarkit.co.jp ちなみに、「DBCC LOGは一般には公開されていないコマンドのため、サポートの対象外」とあるが? 一つ上のリンク先では、画面から動作させることもできるのに非公式?いや、コマンド実行が非公式なのか。。。「小さい単位で実行せよ」という話もあったが、コマンドで行うのは不安定なのか?


EC2のWindows Serverにて、ディスク追加や容量増加

ディスクを新規追加

AWS EC2 のインスタンスにて、SQL Serverのデータファイル(_.mdf、.ndf, .ldf)だけが入るディスクが逼迫し、危険が迫っていることに気づく。(SQL Serverのデータファイル群は、勝手に個別に移動などできない。トランザクションバックアップのファイル(*.ldf)であっても、勝手に手で退避してはならない。SQL Serverの機能を通じて、データ縮小などの設定が可能。)

.


Windowsのディスクは、フォーマット形式が古い(がデフォルト?!)のMBR(Master Boot Record)だと、2TBが上限。GPTフォーマットである必要。 qiita.com ⇒そこで、既存ディスクの増量は諦め、別の増量済みのGPTディスクを追加し、既存ディスクからデータをコピー。そして、ドライブレターを入れ替えれば、SQL Serverの設定変更なしに増量ができる、と考えた。


pc-kaizen.com


当ページ(↓)では、"Create Volume"した後の、"Attach Volume"からの解説。("Create Volume"時に迷った点は、"Snapshot"フィールドに何を入れればよいかだが、何も入れない。既存の"Snapshot"からVolumeを作る際に利用する項目のようだ。) qiita.com 「2.Windows上で、ボリュームディスクを認識させる」が、コマンドでの実行になっているので、次の項(↓)のそうでない方法を参照↓。


docs.aws.amazon.com Windowsの管理画面での設定について、説明が詳しくなかったので、より詳しい次項(↓)も参照した。


thinkit.co.jp


ちょっとハマったところ: 「新しいシンプル ボリューム」がクリックできない!⇒「未割り当て」の方を右クリックすればよい。 ※「ディスクの管理」画面の下半分では、右クリックする場所により(「ディスク 0/1/2..」もしくは 各パーティション)、動作が異なる。それに気づかず、同じ行はどこをクリックしても一緒かと思ってしまっていた。 【LHR-2BDPU3】未割り当て領域を新規パーティションとして使用できるよう... ↑「◆新しいシンプルボリュームがクリック出来ない場合は?」を参照した。

既存ディスクに容量追加

AWS側では、EC2の管理Webページで、"Modify Volume"するだけ。


Windows側では、以下の参考ページの通り: www.faq.idcf.jp


ちなみに、それぞれ、実行前に AMI バックアップを行ったが、1,2分で完了した場合と、45分も掛かった場合とがあった。必ずしもデータの大きさと関係するわけでもないようだ(前者の方が、多くの大きいVolumeが付いていた)。
(実行直後から完了するまで、ステータスは「Pending」。完了すると「Available」。)