Oracle DBとODACのバージョン互換性

#この記事の目的
経験的にODACに後方互換性があることは知っていたのですが、具体的にどのバージョンのODACがどのバージョンのOracle DBに接続可能かを、公式ドキュメントをベースにまとめてみたところ、意外と面白い知見が得られたので共有したいと思います。(2020/3/11現在)。

##ODACの各バージョンと接続可能なOracle DBの関係

|名称|ODAC&nbsp;Ver|別名|32/64bit|対応OS|.NET&nbsp;Framework要件|接続可能DB|
|:---|:------|:---|:-------|:-----|:-----------------|:--------|
|ODAC&nbsp;19c&nbsp;Release&nbsp;1|19.3.0.0.0|ODAC&nbsp;19c|32/64|x64:&nbsp;10,&nbsp;8.1,&nbsp;2019,&nbsp;2016,&nbsp;2012R2|※.NET&nbsp;Framework&nbsp;3.5&nbsp;SP&nbsp;1&nbsp;or&nbsp;later&nbsp;up&nbsp;to&nbsp;.NET&nbsp;Framework&nbsp;4.8|Oracle&nbsp;Database&nbsp;11g&nbsp;Release&nbsp;2&nbsp;(11.2.0.4)&nbsp;or&nbsp;later|
|ODAC&nbsp;18c&nbsp;Release&nbsp;1|18.3.0.0.0|ODAC18c<br>ODAC&nbsp;18.3|32/64|x64:&nbsp;10,&nbsp;8.1,&nbsp;7,&nbsp;2016,&nbsp;2012R2,&nbsp;2012|※.NET&nbsp;Framework&nbsp;3.5&nbsp;SP&nbsp;1&nbsp;or&nbsp;later&nbsp;up&nbsp;to&nbsp;.NET&nbsp;Framework&nbsp;4.7.x|Oracle&nbsp;Database&nbsp;Server&nbsp;(Oracle&nbsp;11g&nbsp;Release&nbsp;2&nbsp;or&nbsp;later)|
|ODAC&nbsp;12.2c&nbsp;Release&nbsp;1|12.2.0.1.0|ODAC&nbsp;12.2|32/64|x64:&nbsp;10,&nbsp;8.1,&nbsp;8,&nbsp;7,&nbsp;2016,&nbsp;2012R2,&nbsp;2012|※.NET&nbsp;Framework&nbsp;3.5&nbsp;SP&nbsp;1&nbsp;or&nbsp;later&nbsp;up&nbsp;to&nbsp;.NET&nbsp;Framework&nbsp;4.7|Access&nbsp;to&nbsp;an&nbsp;Oracle&nbsp;Database&nbsp;Server&nbsp;(Oracle&nbsp;10g&nbsp;Release&nbsp;2&nbsp;or&nbsp;later)|
|ODAC&nbsp;12c&nbsp;Release&nbsp;4|12.1.0.2.4|ODAC&nbsp;12.1|32/64|32bit:&nbsp;10,&nbsp;8.1,&nbsp;8,&nbsp;7,&nbsp;2008&nbsp;<br>x64:&nbsp;10,&nbsp;8.1,&nbsp;8,&nbsp;7,&nbsp;2012,&nbsp;2012R2,&nbsp;2008R2,&nbsp;2008|※.NET&nbsp;Framework&nbsp;3.5&nbsp;SP&nbsp;1&nbsp;or&nbsp;later&nbsp;up&nbsp;to&nbsp;.NET&nbsp;Framework&nbsp;4.6|Access&nbsp;to&nbsp;an&nbsp;Oracle&nbsp;Database&nbsp;Server&nbsp;(Oracle&nbsp;10g&nbsp;Release&nbsp;2&nbsp;or&nbsp;later)|
ODAC&nbsp;(11.2.0.3.0)|11.2.0.3.0|ODAC&nbsp;11.2|32/64|32bit:&nbsp;7,&nbsp;2008,&nbsp;Vista,&nbsp;2003,&nbsp;2003R2,&nbsp;XP&nbsp;<br>x64:&nbsp;7,&nbsp;2008R2,&nbsp;2008,&nbsp;Vista,&nbsp;2003,&nbsp;2003R2,&nbsp;XP|.NET&nbsp;Framework&nbsp;4,&nbsp;including&nbsp;support&nbsp;for&nbsp;Entity&nbsp;Framework&nbsp;4,&nbsp;4.1,&nbsp;and&nbsp;4.2.|Access&nbsp;to&nbsp;an&nbsp;Oracle&nbsp;Database&nbsp;Server&nbsp;(Oracle&nbsp;9i&nbsp;Release&nbsp;2&nbsp;or&nbsp;later)|

OSの略称は以下の通り
7: Windows 7, Vista: Windows Vista, 2008: Windows Server 2008, 2008R2: Windows Server 2008 R2, XP: Windows XP, 2003: Windows Server 2003, 2003R2: Windows Server 2003 R2 8: Windows 8, 8.1: Windows 8.1, 10: Windows 10, 2012: Windows Server 2012, 2012R2: Windows Server 2012 R2, 2016: Windows Server 2016, 2019: Windows Server 2019 
※ODP.NET Unmanageed Driverに関してのみ記載

##この表から読み取れること
まとめてみると、後方互換ではなく前方互換(！)に対応していました。とりあえず、ODACが動いていればDBサーバーが更改されていてもつながるということが分かりました。
ただし、インストール可能なOSや対応する.NET Frameworkによって使えなくなるODACのバージョンが存在します(上の例では 11g)。したがって、初めの段階でどのODACをインストールすべきかは、インストールするOSのバージョンとインストールされている.NET Frameworkのバージョンを確認したうえで決定する必要がでてきます。

Windows 10の場合、特別な事情でOS自体の更新を止めていない場合、半期チャネルでOSが更新されますし、Windows Updateで.NET Frameworkの更新が配布される場合もあります。10 May 2019 Updateで.NET Framework 4.8が配布されているWIndows 10 PCが多いと思いますが(この記事を書いた時点では)、上記の表に従うとODAC 19cをインストールする必要があることになります。

19c以前のODACを利用した場合、(可能性は低いですが)思わぬ機能を用いた際にエラーが発生する可能性があるということだと読み取れるので、インストールの際には注意しましょう。

蛇足になりますが、Windows Updateなどで勝手に.NET Frameworkが上がってしまった場合など、ODACの再インストールをする必要がある場合は、アンインストール後にレジストリと環境変数からOracleに関連するものを削除してからの方がよいと思われます。
###出典
ODAC
https://www.oracle.com/technetwork/topics/dotnet/downloads/install193-5838973.html
https://www.oracle.com/technetwork/topics/dotnet/downloads/install183-5191071.html
https://www.oracle.com/database/technologies/install-odac-12c-122010.html
https://www.oracle.com/database/technologies/install-odac-12c-121024.html
https://www.oracle.com/technetwork/topics/dotnet/downloads/install112030-1440546.html

.NET Framework バージョン及び依存関係
https://docs.microsoft.com/ja-jp/dotnet/framework/migration-guide/versions-and-dependencies