Domanda

Sono uno sviluppatore/consulente DBA di SQL Server che sta aiutando un cliente che ha recentemente perso il suo DBA Oracle.Ho svolto sviluppo su Oracle, ma non molto lavoro DBA e non in ambienti multi-home come questo.

Il problema: Posso connettermi utilizzando "SYS As SYSDBA" da SQL Plus, ma non da SQL Developer sullo stesso sistema.tuttavia, io Potere connettersi utilizzando "sistema" con SQL Plus O Sviluppatore SQL.

Dettagli:

Su questo server, nel mio account Windows Admin (inserito anche come amministratore del server in Oracle Admin Asst.), funziona questo comando DOS:

D:\Oracle\app\product\11.2.0\dbhome_1\BIN>sqlplus /@MyDb as sysdba

e, Seleziona * da V$INSTANCE mostra che è in MyDb e che sia lo strumento che il db sono 11.2.0.3

Anche questo:

D:\Oracle\app\product\11.2.0\dbhome_1\BIN>sqlplus sys/<pwd>@MyDb as sysdba

(ANCHE:entrando nel sbagliato funziona anche la password(!))

Utilizzando l'opzione del menu di avvio SQL-Plus dallo stesso (server, account e home), funzionano anche questi:

Enter user-name: /@MyDb as sysdba
Enter user-name: sys/<pwd>@MyDb as sysdba

Seleziona * da V$INSTANCE mostra che è in MyDb e che sia tool che db sono 11.2.0.3

Tentativo di accedere a MyDb dallo stesso con SQL Developer, riesce per il nome utente "system", ma fallisce per "sys" "as sysdba" con "ORA-01031: privilegi insufficienti".Tuttavia, questo fa funzionare quando ci si connette ad altri database su altri server.

Ho effettuato ricerche in merito e la maggior parte dell'aiuto pubblicato per questo sembra essere rivolto a casi in cui non è possibile stabilire alcuna connessione, il che non è il caso in questo caso.Giusto per evitare alcuni di questi:

  • Il problema non è che la rete non sia configurata, perché SQL Developer funziona per "sistema" sia localmente che in remoto.
  • Il problema non è che il DB/istanza non sia avviato, perché, ancora una volta, funziona per "sistema"
  • Non è che mi sto connettendo al database sbagliato, ho controllato che fosse "sistema"
  • Per quanto ne so, non è che sto usando la sintassi sbagliata in SQL Developer per connettermi a un DB "Come SYSDBA" perché funziona quando mi connetto ad altri server su altri DB.

Anche la mia sensazione è quella

  1. c'è qualche impostazione che dice "non consentire SYSDBA tramite una connessione di rete", O
  2. c'è qualche problema di configurazione/autorizzazione nel Listener della rete Oracle che gli impedisce di controllare il mio account amministratore di Windows e, inoltre, la password sys non è quella che mi era stata detta, e infine Oracle sta fornendo un messaggio di errore ottuso per questo.

Qualsiasi aiuto o guida su questo sarebbe molto apprezzato.


OK, quindi utilizzando le istruzioni di @BalasPapp, sono riuscito a trovare di più quanto segue:

  • Questo database è servito da secondo Percorso della home Oracle 11g chiamata OraDb11g_home3 D:\Oracle\app\product\11.2.0\dbhome_1D:\Oracle\app\product\11.2.0\dbhome_1.
  • Sono stati mostrati i servizi Windows NO parametri di avvio per esso (tranne il nome del DB, ovviamente).
  • il comando show parameter remote_login_passwordfile mostra un valore di "ESCLUSIVO".

Contenuti di Listener.ora:

# listener.ora Network Configuration File: D:\Oracle\app\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = D:\Oracle\app\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:D:\Oracle\app\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = <SERVERNAME>.<networkname>.local)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = D:\Oracle\app

Contenuto di sqlnet.ora:

# This file is actually generated by netca. But if customers choose to 
# install "Software Only", this file wont exist and without the native 
# authentication, they will not be able to connect to the database on NT.

SQLNET.AUTHENTICATION_SERVICES = (NTS)

L'uscita di lsnrctl status:

D:\Oracle\app\product\11.2.0\dbhome_1\BIN>lsnrctl status

LSNRCTL for 64-bit Windows: Version 11.2.0.3.0 - Production on 23-DEC-2015 12:03:55

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<SERVERNAME>.<networkname>.local)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for 64-bit Windows: Version 11.2.0.3.0 - Production
Start Date                02-DEC-2015 16:25:41
Uptime                    20 days 19 hr. 38 min. 17 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   D:\Oracle\app\product\11.2.0\dbhome_1\network\admin\listener.ora
Listener Log File         D:\Oracle\app\diag\tnslsnr\<SERVERNAME>\listener\alert\log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=<SERVERNAME>.<networkname>.local)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
  Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "<DBNAME>" has 1 instance(s).
  Instance "<DBNAME>", status READY, has 1 handler(s) for this service...
The command completed successfully

D:\Oracle\app\product\11.2.0\dbhome_1\BIN>

Parametri durante la connessione da SQL Developer:

Username:  system (or sys)
Password:  <...>
Connection 
  Type:    Basic
  Role:    Default (or SYSDBA)
Hostname:  localhost
Port:      1521
SID (or Service name, both work/fail the same):
           <dbname>

(Neither OS Authentication nor Kerberos is set)

Funziona per "system, Default", fallisce per "sys, SYSDBA" con "Privilegi insufficienti".Ho provato anche molte combinazioni di autenticazione del sistema operativo e impostazioni di Keberos, senza alcun risultato.

Infine, questi sono gli unici due .ora file in /database rubrica:

SNCF<DBNAME>.ORA           (18MB)
SPFILE<DBNAME>.ORA         (4kb)

Entrambi sembrano essere file binari nel Blocco note.

ANCHE: select * from v$pwfile_users non restituisce righe.

È stato utile?

Soluzione

Per connetterti utilizzando 'as sysdba' da un client su sql*net devi avere il file

  1. parametro remote_login_passwordfile da avere 'esclusivo'
  2. file della password (orapw${ORACLE_SID}) presente per l'istanza a cui provi a connetterti
  3. chiedere all'utente di concedere sysdba nel database (sys ha questo valore predefinito e utilizza la password del file passwd.

Il percorso predefinito per il file della password è $ORACLE_HOME/dbs ma a partire da Oracle v12 può anche essere archiviato in ASM.In tal caso lo trovi utilizzando srvctl

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top