Skip to content

Database - 7. page

使用IMPDP导入数据时,通常我们会设置并行,希望数据库在导入数据、创建索引等耗时间长的动作中能够使用并行技术来加快导入动作的执行速度;但是在12.2版本上,IMPDP已经设置了并行,但是在trace中发现索引创建始终使用串行,而不是并行。

SQL> conn test/test@PDB1
SQL> create table a(m number,n number) parallel 4;
SQL> create index a_ind on a(m) parallel 3;
SQL> !expdp test/test@PDB1 dumpfile=b.dmp directory=my_dir
SQL> !impdp test/test@PDB1 directory=my_dir dumpfile=b.dmp parallel=2 TRACE=480301

DW trace显示index创建使用的是parallel=1,而不是parallel=2!。

CDB2_dw00_6658.trc
=====================
PARSING IN CURSOR #140037561274968 len=170 dep=2 uid=79 oct=1 lid=79
tim=841576694 hv=1135291776 ad=’61d1c0b0′ sqlid=’apjngud1uqbc0′
CREATE TABLE “TEST”.”A” (“M” NUMBER, “N” NUMBER) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING TABLESPACE “USERS” PARALLEL 4
END OF STMT

=====================
PARSING IN CURSOR #140037558550112 len=114 dep=2 uid=79 oct=9 lid=79
tim=842113538 hv=68235534 ad=’6374e7a8′ sqlid=’0u96wjh212c8f’
CREATE INDEX “TEST”.”A_IND” ON “TEST”.”A” (“M”) PCTFREE 10 INITRANS 2
MAXTRANS 255 TABLESPACE “USERS” PARALLEL 1 <=======PARALLEL 1, even if parallel=3 was set during index creation phase
END OF STMT

但是在12.1.0.2却没有这个问题,该并行并行:

R1201_dw00_29326.trc :
=====================
PARSING IN CURSOR #140427279060200 len=115 dep=2 uid=111 oct=9 lid=111
tim=8385394705 hv=1693801083 ad=’77900cf8′ sqlid=’3t4ktqdkgaqmv’
CREATE INDEX “TEST”.”A_IND” ON “TEST”.”A” (“M”) PCTFREE 10 INITRANS 2
MAXTRANS 255 TABLESPACE “SYSTEM” PARALLEL 2 <========PARALLEL 2
END OF STMT

这是ORACLE bug,ORACLE开发的解释是,这是期待的行为,因为,“我们发现这样更快”!

BUG 26091146 – IMPDP CREATE INDEX WITH PARALLEL 1 IGNORING COMMAND LINE PARALLEL=2, Development explained that this is an expected behavior supplying the following explanation:

“General support for parallel import of most object type, including indexes, is a 12.2 feature, which led to study of parallel creation of individual indexes. What was found was that using parallel index creation was generally slower than non-parallel. That led to a decision to backport the change to not use parallel index creation.”

因为在12.2新feature的开发过程中,我们研究了一下impdp时的index的创建,发现“一般情况下”串行比并行建索引更快,所以我们决定把impdp时的索引都改成串行创建,并且在创建完成后,再使用’ALTER INDEX … PARALLEL n’ 设置索引的并行度,以实现查询时的并行效果。

所以,ORACLE开发不认为是BUG;因此在导入数据时,需要注意这个地方,如果时间紧急,要考虑其他方式的并行建索引(如IMPDP导入不建索引,导出建索引SQL文本并人工并行执行等方式灵活处理)。

Oracle在12.2版本使用IMPDP并行导入数据时未并行建索引的分析

1- 检查 locale 的设置,如果需要,请更正。

此处所用示例是配置 Unix 环境以便能够在 Unix 计算机的 shell 中使用 Unicode (UTF-8)、配置 Telnet/SSH 软件、以及将 NLS_LANG 设置为 UTF8 / AL32UTF8 以用于 sqlplus。
要查看当前设置,请使用 “locale” 命令,如下所示:

$ locale

输出示例:

LANG=fr_FR
LC_CTYPE="fr_FR.iso885915@euro"
LC_COLLATE="fr_FR.iso885915@euro"
LC_MONETARY="fr_FR.iso885915@euro"
LC_NUMERIC="fr_FR.iso885915@euro"
LC_TIME="fr_FR.iso885915@euro"
LC_MESSAGES="fr_FR.iso885915@euro"
LC_ALL=fr_FR.iso885915@euro


大多数 Unix 版本默认设置为:

$ locale

LANG=
LC_CTYPE="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_MESSAGES="C"
LC_ALL=


“C”是指 US7ASCII,这意味着仅可显示 a-z、A-Z 和 0-9。

我们建议尽可能使用 UTF-8,如下所示:

$ locale

LANG=en_US
LC_CTYPE="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=en_US.UTF-8


如果您已经选择了一个值,例如在 Linux 上使用 “en_US.UTF-8”,可进行如下设置:

$ export LC_ALL=en_US.UTF-8

或

% setenv LC_ALL en_US.UTF-8


请注意,此命令的输出/语法在不同 Unix 环境中并不完全相同。如果您对如何在特定 Unix/Linux 版本中配置用户环境有任何问题,请咨询您的 OS 供应商。

2- 检查所选择的 locale 是否确实已安装,如果需要,请安装。

要查看所有安装的 locale,请执行以下语句:

$ locale -a

示例输出:

$ locale -a

POSIX
common
en_US.UTF-8
C
iso_8859_1
iso_8859_15
en_CA
en_CA.ISO8859-1
en_US
en_US.ISO8859-1
en_US.ISO8859-15
en_US.ISO8859-15@euro
fr_CA
fr_CA.ISO8859-1
th
th_TH
th_TH.TIS620
ja
...

这将列出 Unix 计算机上所有已安装的 locale。
例如,如果您想要使用 “fr_FR.iso885915@euro”,但它不在列表中,则您需要先安装它。
如果您将用户环境设置为未安装的 locale,您不会收到错误消息,但该设置可能不起作用。
请注意,您需要安装完全匹配的 locale,如果您安装了 “fr_FR.UTF-8”或“UTF-8”,但想要使用 “en_US.UTF-8”,则需要安装 “en_US.UTF-8”。

Locale 参数语法为 “language(_territory)(.encoding)(@modifier)”。language(_territory) 部分用于确定日期的默认格式、OS 级别的接口语言等(有关更多信息,请参阅系统文档),
因此,这部分的设置需要您来决定,而不是 Oracle;但是,如果您希望使用 Unicode shell 环境,则最后的 (.encoding) 部分需要为 UTF-8。注意 Unix Locale 的 Language 和 Territ
ory 设置与在 shell 中使用字符 的能力无关。Locale 设置为 ja_JA.ISO8859-1不代表您可以使用日文,因为 ISO8859-1 不识别日文字符。但 Locale 设置为 en_US.UTF-8 将允许在
shell 中使用日文(假定您的 telnet/ssh 客户端设置正确)。

在上边的示例中,“en_US.UTF-8” 存在于列表中,因此我们可以在此服务器上使用该设置。

3- 检查 telnet/ssh 软件是否已正确配置。

 

需要检查 telnet/ssh 软件是否已正确配置。telnet/ssh 软件负责将 Unix locale 转换给客户端环境(多半为 Windows 系统)。

建议首先使用免费的 PUTTY 客户端进行尝试,据所知,它是与 Unicode 最佳兼容的一款客户端工具。可从此站点下载 Putty:http://www.chiark.greenend.org.uk/~sgtatham/putty/

如示例中一样,在 Unix 端使用 “en_US.UTF-8”,则在 Putty 中更改如下设置:

打开配置窗口,导航到“Window(窗口)”、“Translation(转换)”,并将“Received data assumed to be in which character set(假定接收到的数据使用此字符集)”设置为“UTF-8”

。这需要与 Unix shell 端的编码匹配。如果locale不是UTF-8, 但是比如是en_US.ISO8859-1那么选择”ISO-8859-1:1998 (Latin-1, West Europe)”

导航到“Window(窗口)”、“Appearance(外观)”,然后在“Font used in the terminal window(终端窗口中使用的字体)”中选择一种字体,以便支持您想要使用/查看的语言。

请注意,编码/字符集与字体之间的根本区别在于,编码/字符集定义了每种编码包括哪些字符,而字体用于 OS 在屏幕上“绘制”由编码定义的字符。使用 Telnet/ssh 等基于文本的仿真程序,
远程端不会向客户端发送/从客户端接收“字符”,而使用特定字符集进行编码,客户端 OS 使用 Telnet/ssh 客户端的字体在屏幕上绘制这些字符。这意味着在使用任何字体之前,客户端和远程端首先需要就使用的编码达成一致。

在 Windows 客户端,大多数非亚洲语言可以使用默认的“Courier New” Windows 字体,“Arial Unicode MS”为更加完整的字体。“Arial Unicode MS”通常在所有安装了 Office 2002 或更高版本的 Windows 客户端均可用,可支持各式各样的字符。要了解此字体支持哪些语言,请参阅 http://support.microsoft.com/kb/q287247/ 。如果未安装 office 2002,则可以尝试 GNU FreeFont http://www.gnu.org/software/freefont/index.html 集合。另一个关于 Unicode 字体的非常优秀的资源是 Alan Wood’s website。例如,Shareware“Code2000”字体是最完整的“通用”字体之一。

在 Windows 上,Windows 工具“字符映射表”可用于查看字体中包含哪些字符,或者您可以在编辑器中(如 Wordpad)输入字符并选择字体,然后看这些字符是否正确显示。

请务必检查 telnet/ssh 客户端配置,几乎在所有情况下,在“Unix 提示符”中显示字符存在问题的原因都是由于 telnet/ssh 客户端配置不正确导致,或者是正在使用不可配置的 telnet/ssh 客户端而导致,如标准 Windows telnet。

如果使用 Putty 可以正确显示,但使用您的 telnet/ssh 软件包却不可正确显示,请咨询您的 telnet/ssh 软件供应商。
如果您不使用 telnet/ssh 客户端而使用“真正的”Unix 显示器,请参阅 Note 265090.1 How to check Unix terminal Environments for the capability to display extended characters.

4- 设置 NLS_LANG 并测试。

 

当执行完下列操作后:

1) 正确配置 LC_ALL
2) 确认所使用的 locale 已安装
3) 配置好 telnet/ssh 客户端
然后您就可以使用 NLS_LANG 匹配 locale。

NLS_LANG 的构成为:NLS_LANG=<NLS_LANGUAGE>_<NLS_TERRITORY>.<clients characterset>

以 locale “en_US.UTF-8”为例,这意味着应该将 NLS_LANG 设置为 =AMERICAN_AMERICA.AL32UTF8;如果 locale 设置为“en_US.UTF-8”,则相应的 NLS_LANG 设置将为 AMERICAN_AMERICA.AL32UTF8。

请注意:
* UTF-8 (Unix) 和 UTF8/AL32UTF8 (Oracle) 的表示法之间的区别
* NLS_LANG 的 NLS_LANGUAGE 和 NLS_TERRITORY 设置 与在客户端上“查看”字符/在数据库中存储字符的能力无关。 NLS_LANG 设置为 JAPANESE_JAPAN.WE8ISO8859P15 将不允许存储日文,因为

 WE8ISO8859P15 不识别日文字符。但 NLS_LANG 设置为 AMERICAN_AMERICA.UTF8 将允许使用/存储日文(假定您的 telnet/ssh 客户端和 Locale 设置正确,且您的数据库可以存储日文 - 例如使用 UTF8 或 AL32UTF8 NLS_CHARACTERSET 的数据库)
* 要使 NLS_LANGUAGE 和 NLS_TERRITORY 匹配 LC_ALL 中的 language(_territory) 值,请在 database globalizaton support guide appendix A. 中查看相应的 Oracle 语言和地区值。


因此,以 Unix 用户身份登录并执行以下操作:

a) 对照 locale 检查 LC_ALL 是否设置正确(假定此处为 en_US.UTF-8)

b) 仔细检查 Telnet/ssh 客户端配置(假定此处 Putty 按第 3 点所述进行配置)

c) 设置 NLS_LANG 以匹配 locale 设置
$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

或

% setenv NLS_LANG AMERICAN_AMERICA.AL32UTF8

之后通过下边的小窍门检查 sqlplus 侦测到的 NLS_LANG 设置:

$ sqlplus /nolog
SQL>@.[$NLS_LANG].

如果得到下边的结果:

SQL>@.[$NLS_LANG].
SP2-0310: unable to open file ".[AMERICAN_AMERICA.AL32UTF8]..sql"

'[]'中包含的"文件名"就是 sqlplus 将会使用的 NLS_LANG 设置。

如果得到下边的结果:

SQL>@.[$NLS_LANG].
SP2-0310: unable to open file ".[$NLS_LANG]..sql"

那么表示 NLS_LANG 没有设或者 sqlplus 没有侦测到。

如果得到" SP2-0310: unable to open file ".[$NLS_LANG]..sql" " 但是下边的命令能返回 AMERICAN_AMERICA.AL32UTF8:

SQL>HOST ECHO $NLS_LANG

那么表明 NLS_LANG 设置了但是没有在环境中 *export*


d) 使用 sqlplus 连接到数据库并查询一些数据。

一个很好的检查方法是执行以下语句“select UNISTR('\20AC') from dual;”。如果选择使用9i 或更高版本数据库,和一个正确的 UTF-8 或 ISO8859-15 Unix 环境,则一个欧元符号会被正确的显示出来,因为这样的环境可以正确处理欧洲语言(AL32UTF8、WE8MSWIN1252、...)。如果可以显示欧元符号但数据库中存储的数据未正确显示,则表明客户端已正确配置,但数据库中的现有数据现在/过去未正确存储。将需要更正数据库中的现有数据,直至其可在正确配置的客户端显示 Note:225938.1 Database Character Set Healthcheck.


如果此方法有效,则将用户配置文件中的 NLS_LANG 也设置为这个值以用于 sqlplus。

如果已完成,则针对在 sqlplus 中交互式插入和查询数据进行了正确配置。

但是,这并不意味着此设置可用于所有应用程序。
NLS_LANG 用于让 Oracle 客户端知道哪些编码/字符集数据将传输到客户端库。如果在此 Unix 计算机上运行 Web 应用程序且输出 iso-8859-1 数据,则对于应用程序,正确的 NLS_LANG 为 WE8ISO8859P1(即使 Unix locale 为 UTF-8)


5- 如果上述方法都不起作用怎么办?

 

如果未看见预期的字符,则请再次检查您的设置。剩余的最常见问题是您的 Telnet/ssh 仿真程序未正确配置。
然而,也可能是您的数据库中数据不正确。

一个简单的检查方法是:

使用 Windows 客户端,从以下地址下载并安装 SqlDeveloper http://www.oracle.com/technology/products/database/sql_developer/index.html ,连接到您的数据库并查看数据在该工具中是否正确显示。
如果数据可以在 SqlDeveloper 中显示,则数据库中的数据是正确的,问题在于客户端。
如果数据未在 SqlDeveloper 中显示,则表明数据库中的数据不正确,这意味着即使您的客户端已正确配置,数据也无法正确显示。

较难的检查方法是:

如果使用 select 语句,例如“select ename from scott.emp where empno='7369';”来返回一行数据,则执行以下语句“select dump(ename,1016),ename from scott.emp where empno='7369';”。
可以在以下文档中查看代码是否匹配您期望数据库字符集中的字符 ( select value from NLS_DATABASE_PARAMETERS where parameter='NLS_CHARACTERSET'; )

或者如果使用的是 (AL32)UTF8 数据库,请使用 Note 69518.1 Storing and Checking Character Codepoints in a UTF8/AL32UTF8 (Unicode) database

如果不知道问题是什么原因造成的,请新开一个服务请求,参阅以下文档并提供所需信息:
* Note 226692.1 Finding out your NLS Setup 文档中要求的信息。
* 在的环境中执行这个select语句“select dump(ename,1016),ename from scott.emp where empno='7369';”并用 spool  保存结果到文件。(!请勿直接复制粘贴!)

6- 进行更深入的调试。

 

第 1-4 步应足以解决 99% 的问题,本文档的剩余部分将讨论深入调试

在某些平台上,使用下列语法可以有效地获取关于
实际使用的代码页的更多详细信息:

$ locale LC_CTYPE | head

HP-UX 环境中的输出示例:
""
""
"iso885915"
""
Linux 环境中的输出示例:
upper;lower;alpha;digit;xdigit;space;print;graph;blank;cntrl;punct;alnum;combining;combining_level3
toupper;tolower;totitle
16
1
ISO-8859-15
70
84
1
0
1

$ locale LC_CTYPE | head
upper;lower;alpha;digit;xdigit;space;print;graph;blank;cntrl;punct;alnum;combining;combining_level3
toupper;tolower;totitle
16
6
UTF-8
70
84
1
0
1


在 Solaris、AIX、TRU64 上,此语法不能提供相关的补充信息。
要查找关于这些设置的更多详细信息:
在 Solaris 上,请查看 /usr/lib/locale。
在 AIX 上,请查看 /usr/lib/nls/README
在 TRU64 上,请查看 /usr/lib/nls
在 HP-UX 上,请查看 /usr/lib/nls/config
在 Linux 上,请查看 /usr/share/locale/locale.alias


如何检查操作系统管理的字符编码:

要了解 Unix 环境中针对字符所生成的字符编码,
可以按如下所示使用“od”命令(使用 iso-8859-1 locale 的示例):

$ od -xc
é
0000000 00e9
351 \0
0000001

正如您所见,hexa-decimal 编码 e9 对应于“é”(小写 e 重读音节)
351 是对应的八进制值(八进制为 od 命令的固有状态)。

您还可以使用“echo”命令检查对应于字符编码的字符,如下所示:

对于 Solaris、AIX、HP-UX、TRU64:

$echo '\0351'
é

对于 Linux:

$echo -e '\0351'
é

正如所见,echo 使用八进制值,因此需要将要检查的值转换为八进制。

7- Locale 和 NLS_LANG 是否*需要*与数据库字符集匹配?

 

不需要,Locale 和 NLS_LANG 设置(如果适用,还包括 telnet/ssh config)需要互相匹配,但从技术角度看它们均与数据库字符集无关,并且它们仅针对该客户端环境相关。

假定您使用 AL32UTF8 NLS_CHARACTERSET 数据库。如果将 Unix 环境配置为(例如)fr_FR.iso885915@euro(相匹配的 NLS_LANG 为 FRENCH_FRANCE.WE8ISO8859P15),则您可以在 Unix shell 中查看/插入欧元字符和法文或西班牙文,但无法查看/插入俄文或中文(也就是 iso885915 中未定义的任何语言)。
然而,如果您使用可以存储/处理这些语言的远程客户端(例如使用 Sqldeveloper 的 Windows 客户端),则可以向 AL32UTF8 数据库插入这些语言或从该数据库选择这些语言。原因很简单,因为服务器 NLS_LANG/Locale 设置仅在服务器本身作为客户端的情况下有关。

许多客户都遇到过这样的麻烦,由于将数据库 NLS_CHARACTERSET 更改为 (AL32)UTF8 从而需要“更正”Unix shell,其实只要不将 Unix 服务器本身作为客户端用于数据输入,则可以免去这些麻烦。您其实更应该担心的是最终用户实际插入数据的客户端。能够在服务器上使用 sqlplus 查看/插入中文可能是不错的体验,但即使奏效,这也与您的 Windows 客户端(例如)无关,因为 Windows 客户端设置与 Unix 端完全无关。

 

对于 Windows 客户端,请参阅 Note 179133.1 The correct NLS_LANG in a Windows Environment

请注意,在服务器上加载普通文本文件时,sqlldr 的字符集取决于该文本/普通文件的字符集,而不是数据库字符集或所使用的 Unix locale,

 

请参阅 Note 227330.1 Character Sets & Conversion – Frequently Asked Questions / point 18. What is the best way to load non-US7ASCII characters using SQL*Loader or External Tables?

8-对于NLS_CHARACTERSET是”xx8MSWIN12xx”(如WE8MSWIN1252等等)的数据库,最好的LANG 和 NLS_LANG的设置是什么

 

一个最常被问到的问题是:对于一个NLS_CHARACTERSET是”xx8MSWIN12xx”(如WE8MSWIN1252等等)的数据库,在Unix client上正确的LANG和NLS_LANG设置是什么?

Server上使用的LANG 和 NLS_LANG并不会影响通过Listener连接进来的客户端。.
很可能你是通过telnet/ssh连接上来做一些管理的工作,而不是真正的输入应用程序数据。.
在这种情况下,可以在Unix profile中把LANG设置为iso-8859-1,把NLS_LANG设置为AMERICAN_AMERICA.WE8MSWIN1252.

从技术上讲这并不是100%正确,但却是个好方案,可以在sqlplus里很简单的运行”xx8MSWIN12xx”编码的脚本(比如在windows操作系统中创建的脚本),并且对于传统的exp/imp你不需要担心NLS_LANG的设置。.

注意:很可能不能够在telnet环境里看到特殊字符,如欧元符号或者阿拉伯文。.
但是在telnet环境中看不到特殊字符,并不影响通过listener连接进来的(Windows)客户端.

如果想仔细检查数据,那么我们建议你使用SqlDevelper来检查;这个工具是一个非常好的客户端,它不需要任何NLS的设置。

Unix 环境中正确设置 NLS_LANG的最佳实践(在 Unix 环境中正确设置 NLS_LANG Doc ID 1548858.1)

最近屡次被客户询问oracle版本上的更新计划,这篇文章做个解释

Oracle数据库版本有两种:长期版本和创新版本.

  • 长期版本:

Oracle数据库长期版本是较少频繁升级到新版本的用法的理想选择。长期发行版提供最高级别的稳定性和最长的错误纠正支持时间。这些版本具有最少5年的主要支持,接下来有3年的扩展支持。必要时,我们可以延长 “Premier Support “的期限,或者免除 “Extended Support”费用。与扩展支持结合使用时,客户通常有将近4年或更久的时间从一个长期版本升级到下一个长期版本

  • 创新版本:

在两个Oracle数据库长期版本之间,Oracle提供了创新版本,其中包括许多增强功能和新功能,这些功能也将包含在下一个长期版本中。创新版本旨在使客户能够持续使用领先技术来快速开发或部署新应用程序或扩展现有应用程序。创新版本支持包括最少2年的主要支持,但没有扩展支持。如果考虑部署计划2年内升级到新版本,则可以在创新版本上部署工作负载。

为了帮助您提前计划,下面是一个可视化的路线图,它捕获了从11.2开始的Oracle数据库版本,显示了每个版本的生命周期支持阶段(Premier、Extended)和错误纠正窗口。  注意,不是所有的版本都有资格获得扩展支持 (i.e. 12.2.0.1, 18c).

 

这里列出Oracle在最近几年的数据库发布计划以作参考:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

表1 -路线图补丁结束日期

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Oracle数据库版本发布实践表如下:

 

 


平台
23c

Long Term Release
21c

Innovation Release
19c

Long Term Release
18c
12.2.0.1
12.1.0.2
12.1.0.1
11.2.0.4


Oracle 公有云版本
Exadata Express Cloud Service
未计划
未计划
未计划
未计划
18-Sep-2016
N/A
Base Database Service1

(Previously known as: Database Cloud Service)
待发布
2020年12月8日
VM可用(RAC 或者 单实例)
BM(单实例)
OCI DB System - VM: Jul-2019

OCI DB System - Bare Metal: April 2020
1-Mar-2018
4-Nov-2016
Sep-2014
N/A
Sep-2014
Exadata Database Service on Dedicated Infrastructure1

(Previously known as: Exadata Cloud Service)
待发布
N/A
19-Jun-2019
Jun-2018
4-Nov-2016
Oct-2015
N/A
Oct-2015
Gen 1 Exadata Cloud at Customer1

(Previously known as: Exadata Cloud at Customer)
待发布
N/A
17-Sep-2019
May-2018
2-May-2017
Dec-2016
N/A
New Exadata Database Service on Cloud at Customer
待发布
N/A
17-Sep-2019
N/A
N/A
N/A
N/A
Autonomous Database on Dedicated Exadata Infrastructure 2
待发布
待发布
26-Jun-2019
N/A
 N/A
 N/A
 N/A
Autonomous Database on Exadata Cloud at Customer 2
待发布
待发布
08-Jul-2020
N/A
 N/A
 N/A
N/A
Autonomous Database on Shared Exadata Infrastructure 2
待发布
待发布
15-Mar-2020
18-Mar-2018
N/A
N/A
N/A


On-Premises Engineered Systems

(和其他平台同样的软件但是在一体机系统上测试)
Oracle Database Appliance
待发布
16-Sep-2021
16-Oct-2019
7-Mar-2018
17-Nov-2017
Apr 2014
N/A
Oct 2013

Exadata
待发布
13-Aug-2021
13-Feb-2019
16-Feb-2018
10-Feb-2017
Oct 2014
Mar 2013
Nov 2013

Supercluster
待发布
待发布
26-Apr-2019
12-Mar-2018
10-Feb-2017
Nov 2014
Apr 2014
Dec 2013



On-Premises Server Releases (includes client)
Linux x86
未计划
未计划
未计划
未计划
未计划
未计划
未计划
28-Aug-2013
Linux x86-64
待发布
13-Aug-2021
25-Apr-2019
23-Jul-2018
1-Mar-2017
22-Jul-2014
25-Jun-2013
27-Aug-2013
Oracle Solaris SPARC (64-bit)
待发布
未计划
26-Apr-2019
30-Jul-2018
1-Mar-2017
22-Jul-2014
25-Jun-2013
29-Aug-2013
Oracle Solaris x86-64 (64-bit)
平台不支持
平台不支持
07-Nov-2019

最终版本
6-Aug-2018
1-Mar-2017
22-Jul-2014
25-Jun-2013
29-Aug-2013
Microsoft Windows x64 (64-bit)
待发布
08-Oct-2021
08-Jun-2019
21-Aug-2018
16-Mar-2017
25-Sep-2014
9-Jul-2013
25-Oct-2013
OpenVMS Itanium
平台不支持
平台不支持
平台不支持
平台不支持
平台不支持
平台不支持
平台不支持
最终版本
HP-UX Itanium7
待发布
28-Sept-2021
28-May-2019
20-Nov -2018
13-Apr-2017
14-Nov-2014
9-Jan-2014
10-Oct-2013
HP-UX PA-RISC (64-bit)
平台不支持
平台不支持
平台不支持
平台不支持
平台不支持
平台不支持
平台不支持
2-Jan-2014
IBM AIX on POWER Systems
待发布
See DOC ID 2766930.1
28-May-2019
20-Nov -2018
13-Apr-2017
14-Nov-2014
9-Jan-2014
10-Oct-2013
IBM Linux on System z
待发布
See DOC ID 2766930.1
06-June-2019
20-Nov -2018
6-Jun-2017
14-Nov-2014
9-Jan-2014
9-Jan-2014
Microsoft Windows (32-bit)
待发布
仅客户端 - Oct 2021
仅客户端 - June 2019
未计划
未计划
未计划
未计划
25-Oct-2013
Platform

 21c
19
18
12.2.0.1
12.1.0.2
12.1.0.1
11.2.0.4


Instant Client-Only Releases
Apple macOS (Intel) download

 
 10-Sept-2019
 Mar-2018
15-Jan-2018
2016
未计划
20-Apr-2014

Download
IBM Linux on POWER (Big Endian)


 
 
 
 
18-Dec-2015 (download)

4-Dec-2014
IBM Linux on POWER (Little Endian)

 
 Jul-2019

download
31-Oct-2018
(download)
7-Jun-2017 (download)
18-Dec-2015

(download)

 
Linux on ARM

 

 待发布
May-2021

download
 
 
 

 

跟客户端有关的链接:


https://www.oracle.com/technetwork/database/enterprise-edition/downloads/oracle19c-linux-5462157.html
https://www.oracle.com/technetwork/database/enterprise-edition/downloads/oracle19c-windows-5539283.html

32-bit Linux & Windows Instant Clients,

https://www.oracle.com/database/technologies/instant-client/linux-x86-32-downloads.html

https://www.oracle.com/database/technologies/instant-client/microsoft-windows-32-downloads.html

 

Oracle 数据库发布时间表(2023年最新)

Oracle数据库DataGuard数据无法同步,主库查询v$archive_dest出现ORA-16494错误。
数据库版本Oracle 12.1.0.2.0:

SQL> select * from v$version;

BANNER
 --------------------------------------------------------------------------------
 CON_ID
 ----------
 Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production



PL/SQL Release 12.1.0.2.0 - Production



CORE 12.1.0.2.0 Production



BANNER
 --------------------------------------------------------------------------------
 CON_ID
 ----------
 TNS for 64-bit Windows: Version 12.1.0.2.0 - Production



NLSRTL Version 12.1.0.2.0 - Production

检查主库DG参数:

SQL> show parameter log_archive_config

NAME TYPE VALUE
 ------------------------------------ ----------- ------------------------------
 log_archive_config string DG_CONFIG=(orcl,orcladg)
 SQL>
 SQL> show parameter log_archive_dest_2

NAME TYPE VALUE
 ------------------------------------ ----------- ------------------------------
 log_archive_dest_2 string SERVICE=orcladg LGWR ASYNC VAL
 ID_FOR=(ONLINE_LOGFILES,PRIMAR
 Y_ROLE) DB_UNIQUE_NAME=orcladg
 log_archive_dest_20 string
 log_archive_dest_21 string
 log_archive_dest_22 string
 log_archive_dest_23 string
 log_archive_dest_24 string
 log_archive_dest_25 string
 log_archive_dest_26 string
 log_archive_dest_27 string

NAME TYPE VALUE
 ------------------------------------ ----------- ------------------------------
 log_archive_dest_28 string
 log_archive_dest_29 string
 SQL> show parameter service_names

NAME TYPE VALUE
 ------------------------------------ ----------- ------------------------------
 service_names string orcl
 SQL> show parameter unique

NAME TYPE VALUE
 ------------------------------------ ----------- ------------------------------
 db_unique_name string orcl

检查备库参数:

SQL> show parameter log_archive_config

NAME TYPE VALUE
 ------------------------------------ ----------- ------------------------------
 log_archive_config string DG_CONFIG=(orcl,orcladg)
 SQL> show parameter log_archive_dest_2

NAME TYPE VALUE
 ------------------------------------ ----------- ------------------------------
 log_archive_dest_2 string SERVICE=orcl LGWR ASYNC VALID_
 FOR=(ONLINE_LOGFILES,PRIMARY_R
 OLE) DB_UNIQUE_NAME=orcl
 log_archive_dest_20 string
 log_archive_dest_21 string
 log_archive_dest_22 string
 log_archive_dest_23 string
 log_archive_dest_24 string
 log_archive_dest_25 string
 log_archive_dest_26 string
 log_archive_dest_27 string

NAME TYPE VALUE
 ------------------------------------ ----------- ------------------------------
 log_archive_dest_28 string
 log_archive_dest_29 string
 SQL> show parameter service_names

NAME TYPE VALUE
 ------------------------------------ ----------- ------------------------------
 service_names string pdborcl
 SQL> show parameter unique

NAME TYPE VALUE
 ------------------------------------ ----------- ------------------------------
 db_unique_name string orcladg

 

检查主备库之间的网络连通性

主库:

 C:\Users\Administrator>tnsping orcl

TNS Ping Utility for 64-bit Windows: Version 12.1.0.2.0 - Production on 08-5月 -2023 22:42:27

Copyright (c) 1997, 2014, Oracle. All rights reserved.

已使用的参数文件:
 C:\app\pdborcl\product\12.1.0\dbhome_1\network\admin\sqlnet.ora

已使用 TNSNAMES 适配器来解析别名
 尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = WIN-VJ841V9N3PU)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =
 OK (20 毫秒)

C:\Users\Administrator>tnsping orcladg

TNS Ping Utility for 64-bit Windows: Version 12.1.0.2.0 - Production on 08-5月 -2023 22:42:39

Copyright (c) 1997, 2014, Oracle. All rights reserved.

已使用的参数文件:
 C:\app\pdborcl\product\12.1.0\dbhome_1\network\admin\sqlnet.ora

已使用 TNSNAMES 适配器来解析别名
 尝试连接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.188.201)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdborcl)))
 OK (20 毫秒)



 备库:
C:\Users\Administrator>tnsping orcl

TNS Ping Utility for 64-bit Windows: Version 12.1.0.2.0 - Production on 08-5月 -2023 22:42:27

Copyright (c) 1997, 2014, Oracle. All rights reserved.

已使用的参数文件:
 C:\app\pdborcl\product\12.1.0\dbhome_1\network\admin\sqlnet.ora

已使用 TNSNAMES 适配器来解析别名
 尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = WIN-VJ841V9N3PU)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =
 OK (20 毫秒)

C:\Users\Administrator>tnsping orcladg

TNS Ping Utility for 64-bit Windows: Version 12.1.0.2.0 - Production on 08-5月 -2023 22:42:39

Copyright (c) 1997, 2014, Oracle. All rights reserved.

已使用的参数文件:
 C:\app\pdborcl\product\12.1.0\dbhome_1\network\admin\sqlnet.ora

已使用 TNSNAMES 适配器来解析别名
 尝试连接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.188.201)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdborcl)))
 OK (20 毫秒)

 主备库之间网络是畅通的。
 主库切换日志,查询v$archive_dest:
SQL> alter system switch logfile;

系统已更改。

出现ORA-16494错误,该错误在网上找不到,而且MOS上也没有相关的记载。
再次检查备库,会不会是PDB模式的,而且有名为PDBORCL的PDB,导致主库通过tns直接连到了PDB中。
备库查询:

SQL> select con_id,name,open_mode from v$pdbs;

CON_ID NAME OPEN_MODE
---------- ------------------------------ ----------
2 PDB$SEED MOUNTED
3 PDBORCL MOUNTED


果然有个叫PDBORCL的PDB。

查看数据库的数据库名:

 

SQL> select name,open_mode,database_role from v$database;

NAME OPEN_MODE DATABASE_ROLE
 --------- -------------------- ----------------
 ORCL MOUNTED PHYSICAL STANDBY

所以,如果想连到CDB中,应该将service_names指定为orcl,由于是备库,可设置为rzorcl或orclstd等,方便识别,但是一定要与PDBORCL不同名。
修改备库service_names

 

SQL> alter system set service_names='rzorcl';

 

在修改主库和备库中tnsnames.ora文件中备库连接串中SERVICE=RZORCL。
再次尝试切换日志,错误消失。

系统已更改。

 SQL> select error from v$archive_dest;

ERROR
 -----------------------------------------------------------------

ERROR
 -----------------------------------------------------------------

ERROR
 -----------------------------------------------------------------

已选择 31 行。

SQL>

 再次查看备库日志接收情况:
SQL> select process,sequence#,block# from v$managed_standby;

PROCESS SEQUENCE# BLOCK#
 --------- ---------- ----------
 ARCH 103988 43008
 ARCH 0 0
 ARCH 103987 4096
 ARCH 103989 40960
 MRP0 103990 29955
 RFS 0 0
 RFS 103990 29955
 RFS 0 0
 RFS 0 0

9 rows selected.

 15
 备库日志接收正常,问题解决。

Oracle-16494 在Oracle support中并未能找到相关报错信息,疑似bug,但是我们并未提交该bug

疑似Oracle 未发布的Oracle dataguard 相关bug一例 Oracle – 16494
  1.  DB版本生命周期支持策略

 

PS(Primier Support)是自软件发布之日起为期5年的维护和支持服务,超过这个时间就需要购买3年的Extended Support或者不确定时间的Sustaining Support。
Oracle Database 10gR2以及Oracle Database 11gR1都已结束Paid Extended Support进入Sustaining Support阶段,11gR2开始Extended Support包含Waived Extended Support和Paid Extended Support两种:Waived Extended Support不需要单独购买扩展服务包,而Paid Extended Support将在原来的PS服务费用基础上,第一年加收10%的费用提供支持,第二年加收20%的费用提供支持,第三年也是加收20%的费用提供支持, Extended Support主要目的是客户版本升级缓冲期,在该阶段客户将仍能获得“软件更新、修订和安全预警”。

12.2: 新的发行版本会每年发行,版本号是年份的后两位。原来计划发布的12.2.0.2是18c,原来计划发布的12.2.0.3会是19c。18c和19c被认为和12.2的终身支持政策一致。
19c是一个“长期支持”版本(至少4年PS服务,3年扩展支持服务),也是12.2的最后一个版本, 同时也是Oracle Autonomous database优化的一个基础。

 

 

升级到19c的直接升级路径

具体参考:Oracle 19c – Complete Checklist for Manual Upgrades to Non-CDB Oracle Database 19c (Doc ID 2539778.1)

Source Database Target Database
11.2.0.4 19c
12.1.0.212.2.0.1 19c
18c 19c

 

升级到19c的的间接升级路径

Source Database Intermediate upgrade path Target Database
12.1.0.1 12.1.0.2 19c
更早版本 11.2.0.1 / 11.2.0.2/11.2.0.3 11.2.0.4 19c
11.1.0.6 / 11.1.0.7 11.2.0.4 19c
10.2.0.2/10.2.0.3/10.2.0.4/10.2.0.5 11.2.0.4/12.1.0.2 19c
10.1.0.5 11.2.0.4/12.1.0.2 19c
7.3.3.0.0 (or lower)  7.3.4.x –> 9.2.0.8 9.2.0.8 11.2.0.4 19c
8.0.5.0.0 (or lower) 8.0.6.x –> 9.2.0.8
8.1.7.0.0 (or lower) 8.1.7.4 –> 9.2.0.8
9.0.1.3.0 (or lower) 9.0.1.4 –> 9.2.0.8

 

升级到19c的升级技术方法

升级/迁移Oracle数据库19c的方法,不论是上Oracle Cloud还是本地环境都一样 下面是根据操作系统、字节序、版本、数据库大小、停机时间要求等的不同而采用的常用方法

 

具体参考: Transportable Tablespace (TTS) Restrictions and Limitations: Details, Reference, and Version Where Applicable [Document 1454872.1] Best Practices for Using Transportable Tablespaces (TTS) [Document 1457876.1]

方法 说明
Export / Import  适用所有版本和平台,要使用Data Pump需要10.1.0.2或更高版本,停机时间长
       Transportable Tablespaces  Sets(TTS)

       Cross-Platform Transportable Tablespace Sets(XTTS)

8i及以后:TTS(从8i开始),XTTS(10g开始,支持跨平台)

相同的字符集和国家字符集,如果跨字节序(10g+),需要配合RMAN’s convert 

RMAN’s convert function for Transportable Tablespaces 10g及以后版本,可以跨endianness,字符集要兼容

转换动作可以在SoureTarget完成,需要额外的临时工作空间,不支持SYSTEM/SYSAUX

Transportable DatabaseData Pump Full Transportable 11.2.0.3及以后版本,字符集要兼容,12c开始RMAN支持跨字节序转换
XTTS with RMAN Cross Platform Incremental Backups new 11.2.0.4及以后版本,字符集要兼容
Create Table As Select (CTAS)SQL*LoaderCopy 需注意表属性、约束、数据类型的限制
Dataguard Heterogeneous Primary and Physical Standbys Data Guard异构的限制
Oracle GoldenGate 无法支持的异构或停机时间极小的场景

 

 

 

 

关于升级到oracle 19c的一些需要知道的事情