在11.2中,Oracle新增了版本的功能,而随之一些工具都对于版本功能有所支持,比如11.2中,sqlplus在连接数据库时就可以指定当前数据库连接到哪个版本上。
需要说明的是,这种连接版本方式的优先级是最高的,它的优先级高于ORA_EDITION环境变量,更高于数据库默认版本,看一个简单的例子:
D:\>sqlplus / AS sysdba SQL*Plus: Release 11.2.0.1.0 Production ON 星期二 9月 27 08:21:47 2011 Copyright (c) 1982, 2010, Oracle. ALL rights reserved. 连接到: Oracle DATABASE 11g Enterprise Edition Release 11.2.0.1.0 - Production WITH the Partitioning, OLAP, DATA Mining AND REAL Application Testing options SQL> SET pages 100 LINES 120 SQL> SELECT username FROM dba_users WHERE editions_enabled = 'Y'; 未选定行 SQL> CREATE USER u_e IDENTIFIED BY u_e DEFAULT tablespace test enable editions; 用户已创建。 SQL> GRANT CONNECT, resource, dba TO u_e; 授权成功。 SQL> CREATE edition e1; 版本已创建。 SQL> conn u_e/u_e 已连接。 SQL> SELECT sys_context('USERENV', 'CURRENT_EDITION_NAME') FROM dual; SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME') -------------------------------------------------------------------------------- ORA$BASE SQL> conn u_e/u_e edition=e1 已连接。 SQL> SELECT sys_context('USERENV', 'CURRENT_EDITION_NAME') FROM dual; SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME') -------------------------------------------------------------------------------- E1 SQL> ALTER DATABASE DEFAULT edition = e1; 数据库已更改。 SQL> conn u_e/u_e 已连接。 SQL> SELECT sys_context('USERENV', 'CURRENT_EDITION_NAME') FROM dual; SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME') -------------------------------------------------------------------------------- E1 SQL> conn u_e/u_e edition=ora$base 已连接。 SQL> SELECT sys_context('USERENV', 'CURRENT_EDITION_NAME') FROM dual; SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME') -------------------------------------------------------------------------------- ORA$BASE |
除了sqlplus之外,OCI和JDBC也支持在连接时选择版本进行连接。