【Oracle】-【TWO_TASK】-TWO_TASK環境變數的作用
楊大師(http://space.itpub.net/4227/viewspace-663069)介紹過TWO_TASK環境變數的作用,指出“在Unix和Linux環境下,可以設定TWO_TASK環境變數,當使用者連線資料庫且沒有指定服務名時,會自動利用TWO_TASK的設定作為環境變數連線資料庫。”,並用兩個本地資料庫為例說明了TWO_TASK的使用。
但TOM大師(http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:89412348059)也曾經回答過相關的問題,進一步指出TWO_TASK可以讓你通過SQLNet連線一個本地庫和一個遠端庫。
這裡我用一個本地庫與一個遠端庫的例項,再次驗證下。
當前配置的兩個連線串(一個本地資料庫,一個遠端資料庫):
[oracle@liu admin]$ more tnsnames.ora
BISAL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = bisal)
)
)
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = x.x.x.x)(PORT = 1524))
)
(CONNECT_DATA =
(SERVICE_NAME = star)
)
)
當前TWO_TASK環境變數為空:
[oracle@liu Desktop]$ echo $TWO_TASK
[oracle@liu Desktop]$
當未指定服務名連線資料庫時,預設是bisal這個本地資料庫,即由系統的ORACLE_SID指定:
[oracle@liu Desktop]$ echo $ORACLE_SID
bisal
[oracle@liu Desktop]$ env | grep SID
ORACLE_SID=bisal
[oracle@liu Desktop]$
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 11 14:38:08 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
BISAL
SQL>
設定TWO_TASK=TESTTKT:
[oracle@liu Desktop]$ export TWO_TASK=TESTTKT
[oracle@liu Desktop]$ echo $TWO_TASK
TESTTKT
[oracle@liu Desktop]$
[oracle@liu Desktop]$
使用TESTTKT的使用者名稱登陸,但不指定服務名:
[oracle@liu Desktop]$ sqlplus star/star
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 11 14:39:31 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.7.0 - Production
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
ALL9IT2
SQL>
此時預設連線的就是TESTTKT這個遠端庫了。
此時關閉本地庫bisal的監聽:
LSNRCTL> stop bisal
驗證監聽狀態:
[oracle@liu Desktop]$ tnsping bisal
TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 11-AUG-2013 15:06:18
Copyright (c) 1997, 2005, Oracle. All rights reserved.
Used parameter files:
/opt/oracle/102/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = bisal)))
TNS-12541: TNS:no listener
再次連線bisal庫:
[oracle@liu Desktop]$ sqlplus bisal/xxx@bisal
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 11 15:04:54 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-12541: TNS:no listener
Enter user-name:
開啟監聽,再用@bisal的方式連線bisal本地庫:
[oracle@liu Desktop]$ sqlplus bisal/xxx@bisal
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 11 14:40:08 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Error accessing PRODUCT_USER_PROFILE
Warning: Product user profile information not loaded!
You may need to run PUPBLD.SQL as SYSTEM
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
BISAL
SQL>
但之前可以通過作業系統驗證登陸的本地庫sys賬戶:
[oracle@liu Desktop]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 11 14:40:37 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
Enter user-name:
禁止訪問了。
只能通過如下方式訪問之前的本地庫sys賬戶:
[oracle@liu Desktop]$ sqlplus bisal/bisal@bisal
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 11 14:43:52 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Error accessing PRODUCT_USER_PROFILE
Warning: Product user profile information not loaded!
You may need to run PUPBLD.SQL as SYSTEM
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> conn sys/oracle as sysdba
Connected.
SQL> show user
USER is "SYS"
SQL>
總結:
1、未設定TWO_TASK環境變數時,不指定服務名連線的預設是ORACLE_SID的值。
2、當設定TWO_TASK環境變數時,不指定服務名連線的預設是TWO_TASK的值。
3、當使用@服務名方式連線時,會忽略ORACLE_SID或TWO_TASK的值。
4、當使用TWO_TASK環境變數時,作業系統驗證登入資料庫的方式被禁止,提示ORA-01031: insufficient privileges。
5、因為TWO_TASK設定後,遮蔽了ORACLE_SID的作用,因此即使對於本地庫,也需要通過SQLNet的方式連線,也就是需要監聽,一般對於從本機訪問本地庫可能不開啟監聽,但此時需要開啟監聽,才能通過@服務名的方式連線到本地庫。
6、補充:tnsnames.ora檔案預設採用的路徑如下:
$HOME(~)/.tnsnames.ora
$TNS_ADMIN/tnsnames.ora
/var/opt/oracle/tnsnames.ora or /etc/tnsnames.ora (depending on platform)
$ORACLE_HOME/network/admin/tnsnames.ora
7、關於TWO和TASK的來源,這個詞來源於20世紀80年代,TWO TASK表示兩個一起工作的含義,僅僅是意會,並不侷限於兩個。
8、個人理解,設定TWO_TASK,能夠覆蓋ORACLE_SID的作用,改變不帶@服務名預設連線的資料庫(本地or遠端),要求所有的sqlplus連線都是通過SQLNet的方式,禁止作業系統驗證。僅此而已。
但TOM大師(http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:89412348059)也曾經回答過相關的問題,進一步指出TWO_TASK可以讓你通過SQLNet連線一個本地庫和一個遠端庫。
這裡我用一個本地庫與一個遠端庫的例項,再次驗證下。
當前配置的兩個連線串(一個本地資料庫,一個遠端資料庫):
[oracle@liu admin]$ more tnsnames.ora
BISAL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = bisal)
)
)
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = x.x.x.x)(PORT = 1524))
)
(CONNECT_DATA =
(SERVICE_NAME = star)
)
)
當前TWO_TASK環境變數為空:
[oracle@liu Desktop]$ echo $TWO_TASK
[oracle@liu Desktop]$
當未指定服務名連線資料庫時,預設是bisal這個本地資料庫,即由系統的ORACLE_SID指定:
[oracle@liu Desktop]$ echo $ORACLE_SID
bisal
[oracle@liu Desktop]$ env | grep SID
ORACLE_SID=bisal
[oracle@liu Desktop]$
使用/的方式連線:
[oracle@liu Desktop]$ sqlplus / as sysdbaSQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 11 14:38:08 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
BISAL
SQL>
設定TWO_TASK=TESTTKT:
[oracle@liu Desktop]$ export TWO_TASK=TESTTKT
[oracle@liu Desktop]$ echo $TWO_TASK
TESTTKT
[oracle@liu Desktop]$
[oracle@liu Desktop]$
使用TESTTKT的使用者名稱登陸,但不指定服務名:
[oracle@liu Desktop]$ sqlplus star/star
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 11 14:39:31 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.7.0 - Production
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
ALL9IT2
SQL>
此時預設連線的就是TESTTKT這個遠端庫了。
此時關閉本地庫bisal的監聽:
LSNRCTL> stop bisal
驗證監聽狀態:
[oracle@liu Desktop]$ tnsping bisal
TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 11-AUG-2013 15:06:18
Copyright (c) 1997, 2005, Oracle. All rights reserved.
Used parameter files:
/opt/oracle/102/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = bisal)))
TNS-12541: TNS:no listener
再次連線bisal庫:
[oracle@liu Desktop]$ sqlplus bisal/xxx@bisal
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 11 15:04:54 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-12541: TNS:no listener
Enter user-name:
開啟監聽,再用@bisal的方式連線bisal本地庫:
[oracle@liu Desktop]$ sqlplus bisal/xxx@bisal
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 11 14:40:08 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Error accessing PRODUCT_USER_PROFILE
Warning: Product user profile information not loaded!
You may need to run PUPBLD.SQL as SYSTEM
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
BISAL
SQL>
但之前可以通過作業系統驗證登陸的本地庫sys賬戶:
[oracle@liu Desktop]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 11 14:40:37 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
Enter user-name:
禁止訪問了。
只能通過如下方式訪問之前的本地庫sys賬戶:
[oracle@liu Desktop]$ sqlplus bisal/bisal@bisal
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 11 14:43:52 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Error accessing PRODUCT_USER_PROFILE
Warning: Product user profile information not loaded!
You may need to run PUPBLD.SQL as SYSTEM
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> conn sys/oracle as sysdba
Connected.
SQL> show user
USER is "SYS"
SQL>
總結:
1、未設定TWO_TASK環境變數時,不指定服務名連線的預設是ORACLE_SID的值。
2、當設定TWO_TASK環境變數時,不指定服務名連線的預設是TWO_TASK的值。
3、當使用@服務名方式連線時,會忽略ORACLE_SID或TWO_TASK的值。
4、當使用TWO_TASK環境變數時,作業系統驗證登入資料庫的方式被禁止,提示ORA-01031: insufficient privileges。
5、因為TWO_TASK設定後,遮蔽了ORACLE_SID的作用,因此即使對於本地庫,也需要通過SQLNet的方式連線,也就是需要監聽,一般對於從本機訪問本地庫可能不開啟監聽,但此時需要開啟監聽,才能通過@服務名的方式連線到本地庫。
6、補充:tnsnames.ora檔案預設採用的路徑如下:
$HOME(~)/.tnsnames.ora
$TNS_ADMIN/tnsnames.ora
/var/opt/oracle/tnsnames.ora or /etc/tnsnames.ora (depending on platform)
$ORACLE_HOME/network/admin/tnsnames.ora
7、關於TWO和TASK的來源,這個詞來源於20世紀80年代,TWO TASK表示兩個一起工作的含義,僅僅是意會,並不侷限於兩個。
8、個人理解,設定TWO_TASK,能夠覆蓋ORACLE_SID的作用,改變不帶@服務名預設連線的資料庫(本地or遠端),要求所有的sqlplus連線都是通過SQLNet的方式,禁止作業系統驗證。僅此而已。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7192724/viewspace-768234/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE TWO_TASK環境變數的使用Oracle變數
- TWO_TASK環境變數變數
- 使用TWO_TASK或者LOCAL環境變數變數
- 使用TWO_TASK或者LOCAL環境變數?變數
- 關於two_task,local,oracle_sid三個環境變數說明Oracle變數
- 在EBS系統中設定的TWO_TASK作用是什麼?
- ORACLE 環境變數Oracle變數
- [Oracle] -- 配置Oracle環境變數Oracle變數
- oracle 環境變數 redhatOracle變數Redhat
- oracle環境變數設定Oracle變數
- java環境變數JAVA_HOME,path,CLASSPATH作用Java變數
- Linux下DISPLAY環境變數之作用---轉Linux變數
- Oracle環境變數NLS_LANGOracle變數
- oracle中的全域性環境變數配置Oracle變數
- 環境變數變數
- nls引數、環境變數以及函式等起作用的順序!變數函式
- CentOS 6.5 Oracle 環境變數設定CentOSOracle變數
- Oracle 環境變數設定標準Oracle變數
- Linux 新增環境變數和刪除環境變數Linux變數
- 簡述SHELL全域性環境變數與局變環境變數變數
- Java 環境變數Java變數
- jdk環境變數JDK變數
- DOS環境變數變數
- env 環境變數變數
- 環境變數path變數
- Java環境變數Java變數
- postman環境變數Postman變數
- 配置環境變數變數
- linux下oracle設定環境變數LinuxOracle變數
- oracle裡面的幾個環境變數表Oracle變數
- java 環境變數的配置Java變數
- jdk環境變數的配置JDK變數
- Bash 中的環境變數變數
- Unix的環境變數(轉)變數
- Unix的環境變數 (轉)變數
- Mac 設定環境變數的位置、檢視和新增PATH環境變數Mac變數
- ubuntu JDK 環境變數UbuntuJDK變數
- 配置JDK環境變數JDK變數