Domanda

Sto usando Oracle SQL Developer

Ho uno script enorme che crea tabelle, indici, vincoli di chiave primaria e così via.

il mio nome DB è: dbo_other

Mi sono collegato in questo dbo_other come sysdba.

Se eseguo il mio script, quindi le tabelle non vengono visualizzati sul pannello di sinistra sotto 'Tabelle'

Tuttavia, se aggiungo lo script con l'aggiunta di 'dbo_other.' davanti ad ogni nome di tabella allora le tabelle mostrano l'alto.

Questo è molto noioso e richiede tempo.

C'è un modo per evitare questo? perché wont si fanno vedere in dbo_other senza aggiungere dbo_other. davanti ad ogni nome della tabella ?? Quando eseguo la query in alto a destra della discesa ha dbo_other selezionato !!

Posso anche fare un select * from tabella creata (ma non lo vederlo in barra laterale a sinistra) Inoltre, posso vedere la tabella in pl sviluppatore / sql.

Perché Oracle SQL Developer vuole che io creo con dbo_other. ??

Inoltre, c'è un modo per evitare di aggiungere che per ogni tabella? forse qualcosa si può fare sulla parte superiore dello script in modo che ha effetto su tutto ciò che segue?

È stato utile?

Soluzione

Perché l'accesso al database utilizzando l'account SYSDBA? Questo è molto potente, e vi permetterà di fare danni terribili al database se non si sa cosa si sta facendo. In un ambiente di sviluppo c'è un limite al danno che si può fare, ma è meglio per entrare in buone abitudini prima di fare le cose in produzione.

La cosa interessante di AS SYSDBA è che sostituisce la parte del nome utente login:. Se il vostro utente OS ha i privilegi, siete in quanto SYS. Check it out:

SQL> conn apc
Enter password:
Connected.
SQL> show user
USER is "APC"
SQL> conn apc as sysdba
Enter password:
Connected.
SQL> show user
USER is "SYS"
SQL>

Così, quando è stato eseguito lo script è stato creato tutti quegli oggetti nello schema SYS. Che si rivelerà essere un enorme dolore al collo. Spero che tu abbia uno script uguale e contraria reversione.

Per eseguire lo script correttamente, tutto quello che dovete fare è collegare come DBO_OTHER (normale - vale a dire, senza SYSDBA o SYSOPER che è il default, dopo tutto). Lo script creerà le tabelle nello schema corrente.

Se avete bisogno di creare oggetti in diversi schemi, non è necessario effettuare il log out e di nuovo. Lo schema è distinta da parte dell'utente ed è possibile passare schema eseguendo alter session set current schema = WHOEVR;. Questo è piuttosto un trucco a portata di mano e ho bloggato fino qualche tempo fa. saperne di più .

Si noti che l'utente non acquisirà ulteriori privilegi modificando lo schema corrente: essi saranno in grado di fare quello che attualmente possono fare. Così, per qualcosa come la creazione di oggetti in più schemi all'utente di esecuzione dovrebbe essere un utente di alimentazione, qualcuno con i privilegi di creare qualsiasi, come un DBA (ma ancora non SYSDBA).

Altri suggerimenti

Ho appena imbattuto in questo piccolo gioiello, che consente di eseguire azioni su uno schema / utente di default per i quali non si è effettuato il login come. Cioè, per impostazione predefinita i tuoi select, ecc opereranno su questo nuovo schema, invece di tua scelta.

alter session set current_schema =

Esempio: Me stessa + table1 + table2 Qualcun altro + SuperTable1 + SuperTable2

log in as "Myself" 
select * from SuperTable1

Error: ORA-00942: table or view does not exist

alter session set current_schema = SomeoneElse 
select * from SuperTable1 <This will work.>

L'albero "Tabelle" sul pannello di sinistra include solo le tabelle l'utente connesso possiede in Oracle SQL Developer. Se lo script crea tabelle nello schema di un altro utente, è necessario fare clic sul + accanto a "altri utenti", trovare l'utente appropriato e fare clic sul + sulle loro tavole.

Come altri hanno detto, non si dovrebbe usare SYSDBA a meno che non è necessario, e suona molto simile lo script dovrebbe essere eseguito come utente normale in base alla sua descrizione di massima.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top