2009-10-13 54 views
5

Tôi thực sự nên biết điều này, nhưng ai đó sẽ cho tôi biết làm thế nào để thay đổi cơ sở dữ liệu mặc định trên Linux?Trong Oracle, làm thế nào để bạn thay đổi cơ sở dữ liệu 'mặc định'?

Ví dụ:

Tôi có một cơ sở dữ liệu test1 trên với ORACLE_SID=test1. Vì vậy, để kết nối với test1 tôi có thể sử dụng:

sqlplus myuser/password 

Kết nối với cơ sở dữ liệu mặc định, test1

tôi sẽ tại như kết nối sqlplus mặc định để đi đến cơ sở dữ liệu trên máy chủ test2server2.

Vì vậy, tôi đã cập nhật tnsnames để mục nhập cũ test1 hiện trỏ đến [email protected]. Tôi cũng đã thêm một mục riêng cho test2 trỏ đến cùng một vị trí. Tuy nhiên, kết nối mặc định vẫn dường như đi đến [email protected].

Sau đây cả hai làm việc tốt và đi đến cơ sở dữ liệu test2 trên server2:

sqlplus myuser/[email protected] 
sqlplus myuser/[email protected] 

Nhưng kết nối mặc định, sqlplus myuser/password, đi vào [email protected].

Bất kỳ ý tưởng nào?

Cảm ơn.

+0

Tôi cho rằng tất cả điều này đang diễn ra trên server1? – DCookie

+0

Đúng. Có rất nhiều kịch bản kế thừa trên server1 được bắt đầu với "sqlplus user/pass". Tôi đang cố gắng tìm một cách để giữ cho các tập lệnh này hoạt động sau khi di chuyển cơ sở dữ liệu từ server1 đến server2. –

+0

Các tập lệnh cuối cùng sẽ chạy trên server1 hoặc server2? Nếu server2, thì tất cả những gì bạn cần là đặt ORACLE_SID trên server2 thành test2. – DCookie

Trả lời

4

Để mở rộng trên câu trả lời của kerchingo: Oracle có nhiều cách để xác định cơ sở dữ liệu.

Cách tốt nhất - cách bạn nên luôn sử dụng - là USER/[email protected]. Điều này sẽ sử dụng tra cứu đặt tên Oracle (tnsnames.ora) để tìm máy chủ thực, có thể trên một máy chủ vật lý khác nhau mỗi lần bạn kết nối với nó. Bạn cũng có thể chỉ định một chuỗi kết nối Oracle là SERVER, nhưng giả sử bạn không thể.

Ngoài ra còn có hai cách để chỉ định máy chủ mặc định thông qua biến môi trường.Đầu tiên là TWO_TASK, sử dụng tra cứu đặt tên và thứ hai là ORACLE_SID, giả định rằng máy chủ đang chạy trên máy hiện tại. ORACLE_SID được ưu tiên hơn TWO_TASK.

Lý do bạn nên luôn sử dụng chuỗi kết nối rõ ràng là bạn không biết liệu người dùng có đặt TWO_TASK, ORACLE_SID, cả hai hoặc không; bạn cũng không biết những gì họ có thể được thiết lập để. Đặt cả hai giá trị khác nhau là một vấn đề đặc biệt đau đớn để chẩn đoán, đặc biệt là qua điện thoại với một người không thực sự hiểu cách Oracle hoạt động (đã ở đó, thực hiện điều đó).

+0

Cảm ơn rất nhiều. "TWO_TASK", mà tôi chưa bao giờ gặp phải trước đây, chính xác là những gì tôi cần. –

+0

Hrm, [Ask Tom nói] (http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:89412348059) rằng 'TWO_TASK' ghi đè' ORACLE_SID'. Đối với tôi trên OS X, 'TWO_TASK' hoạt động, nhưng' ORACLE_SID' thì không. Màu tôi bối rối. – theory

+0

@theory - có thể là hành vi đã thay đổi (tôi chưa chủ động sử dụng Oracle kể từ 8i), hoặc bộ nhớ của tôi không đúng (nhưng điều đó không bao giờ có thể xảy ra :-)). Bạn không chắc chắn tại sao 'ORACLE_SID' không hoạt động với bạn, trừ khi có lẽ Oracle không nghe trên cổng chuẩn. Cá nhân, tôi thích 'TWO_TASK' trong mọi trường hợp, nhưng đó có lẽ là vì tôi đã làm việc trong một môi trường với rất nhiều máy chủ cơ sở dữ liệu. – kdgregory

1

Tôi nghĩ rằng nó được đặt trong môi trường của bạn, bạn có thể lặp lại $ ORACLE_SID không?

3

Giả sử bạn đang đăng nhập vào server1, bạn sẽ cần phải kết nối với Test2 sử dụng

sqlplus myuser/[email protected] 

bởi vì bạn phải đi qua một người biết lắng nghe để có được server2. Chuỗi test2 xác định một mục trong tệp tnsnames.ora của bạn chỉ định cách kết nối với test2. Bạn sẽ không thể kết nối với một máy chủ khác bằng cách sử dụng mẫu đầu tiên của lệnh sqlplus của bạn.

Nếu cả hai trường hợp (test1, test2) đều ở trên server1, thì bạn có thể, như trạng thái @kerchingo, hãy đặt biến môi trường ORACLE_SID trỏ vào một phiên bản khác.

+0

Đó là một cú đánh - có vẻ như tôi có một số tập lệnh để di chuyển. –

+0

Không, hãy xem câu trả lời của @ kdgregrory - xuất TWO_TASK = test2 sẽ đưa bạn đến nơi bạn cần đến. – DCookie

+0

Vâng - đó là điều mới của tôi trong ngày - "TWO_TASK". Hoạt động tốt. –

2

Xác định biến môi trường LOCAL bằng bí danh tns của cơ sở dữ liệu của bạn.

> set LOCAL=test1 
> sqlplus myuser/password 
> ... connected to test1 
> set LOCAL=test2 
> sqlplus myuser/password 
> ... connected to test2 

Tính năng này hoạt động trên ứng dụng khách, không lo về các hệ điều hành khác.

+1

LOCAL dành cho Windows, TWO_TASK dành cho tất cả những người khác. Họ làm điều tương tự. –

0

Câu hỏi đúng là 'Làm cách nào để thay đổi dịch vụ mặc định'? Oracle DBMS cung cấp hai loại yêu cầu kết nối: rõ ràng và ngầm định. Trong một yêu cầu rõ ràng, bạn cung cấp ba toán hạng như sqlplus username/password @ service. Trong một yêu cầu ngầm, bạn bỏ qua toán hạng thứ ba.

Kết nối ngầm chỉ áp dụng khi máy chủ lưu trữ khách và máy chủ lưu trữ giống nhau. Do đó, người nghe nằm trên cùng một máy chủ.

Trình nghe là phiên bản đầu tiên phản hồi yêu cầu kết nối. Khi xử lý yêu cầu kết nối ngầm từ cùng một máy chủ, nó sẽ kiểm tra xem tên cá thể đã được đặt chưa. Nó kiểm tra giá trị của biến shell ORACLE_SID.

Nếu được đặt, nó có thể xử lý yêu cầu kết nối ngầm. Nếu không, nó không thể, và bạn phải thực hiện yêu cầu kết nối rõ ràng, cung cấp toán hạng thứ ba.

Tên tệp listener-config listenerener.ora liên kết cá thể với dịch vụ. Để thay đổi dịch vụ mặc định bạn kết nối, hãy thay đổi giá trị mặc định của cá thể. Vì vậy, hãy thay đổi giá trị mặc định của biến ORACLE_SID của biến. Bạn làm điều đó trong tập tin cấu hình người dùng hệ điều hành như .profile hoặc các tập tin cấu hình tương tự.

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan