SAP HANAのMDCとシステムレプリケーションの相性がよくない、という話。

SAP HANAのMDC(Multi Tenant database Container)は複数のテナントDB、つまりユーザーDBを運用できる仕組み。

だから当然、ユーザは1つのHANAインスタンス上から複数のアプリケーションにデータベースサービスを提供する形態を取りたいと考える。つまり、複数のアプリケーションそれぞれに、独立したユーザ(テナント)DBを運用したいと考える。

一方で、HANAの高可用性機能であるSystem ReplicationはMDCをサポートする。即ち、複数のユーザDBのプライマリDB→セカンダリDB間の複製、同期、フェールオーバの機能を提供してくれる。ところが、残念なことに、複数テナントDBの内わずか1つのテナントDBに問題があるとHANAシステム全体がフェールオーバをする仕様である。フェールオーバの範囲を、問題があるテナントDBに限ることができない。

詳細な話になるが、System Replicationはプライマリ/セカンダリサイト間のデーベース複製機能である。テナントDBが1つ作られると、indexserverというプロセス、データデバイス、ログデバイスアサインされる。つまり、テナントDBのリソースは独立している。なので、複数のテナントDBのうちの1つがフェールしても、そのテナントDBだけがセカンダリサイトにフェールオーバすればいいような先入観を持ってしまう。

しかし、HANAインスタンス全体の管理がnemaserverという1つのプロセスに任せられてしまっている。しかも、プライマリ/セカンダリの境界を超えて個々のテナントDBを管理することができない、少なくとも、テナントAはプライマリで、テナントBはセカンダリで運用する、ということができない。

結果として、HANAシステムにおいては、複数のテナントDBを運用することはできるが、1つでもテナントDBがフェールするとHANAシステム全体がプライマリからセカンダリへとフェールオーバしてしまう。

これはユーザか見ると、例えば人事システムだけがフェールしても営業システム、製造管理システムその他全部がその影響をうけて一時的なサービス停止またはパフォーマンス低下を被ることになる。

中途半端な実装のような気がするが、SAPはマニュアルの中で「仕様である」と言い切っている。

結局、HANAは、system database + テナントDB1つで運用することになり、マルチテナントとしては使えないことが多い。