Professional Documents
Culture Documents
Oracle Guide 2004 2005
Oracle Guide 2004 2005
Πανεπιστήμιο
(Ε.Α.Π.)
Θεματική Ενότητα
ΠΛΗ-11 «Αρχές Τεχνολογίας Λογισμικού»
Σύνταξη - Επιμέλεια:
♦ Χρήστος Λεπεσιώτης, Φοιτητής Ε.Α.Π. – Πρ. Σπ. Πληροφορικής
♦ Γεώργιος - Πέτρος Οικονόμου (Μέλος ΣΕΠ)
♦ Χρήστος Κούτσικας (Μέλος ΣΕΠ)
♦ Βασίλειος Μάμαλης (Μέλος ΣΕΠ – Βοηθός Συντονιστή)
♦ Δημήτριος Καλλές (Μέλος ΣΕΠ – Βοηθός Συντονιστή)
Περίληψη:
Το παρόν κείμενο/οδηγός περιέχει:
(α) Οδηγίες Εγκατάστασης και Χρήσης της Personal Oracle 9i σε περιβάλλοντα
Win2000/XP/NT και Win98,
(β) Βοηθητικά κείμενα (πλήρη courses σε μορφή PDF που έχουν διατεθεί από
την ίδια την ORACLE) όσον αφορά τη Βασική Διαχείριση και την SQL της
Personal Oracle 9i, και
(γ) Τις σημαντικότερες ερωτήσεις των φοιτητών καθώς και τις απαντήσεις οι
οποίες δόθηκαν από τους αρμόδιους ΣΕΠ της ΠΛΗ11, κατά την διάρκεια
της εκπόνησης της αντίστοιχης Γραπτής Εργασίας (E3) των
προηγούμενων Ακ. Ετών (2002-03 και 2003-04).
http://edu.eap.gr/pli/pli11/students/doc/oracle-guide-2000-
XP-1.zip
http://edu.eap.gr/pli/pli11/students/doc/oracle-guide-2000-
XP-2.zip
http://edu.eap.gr/pli/pli11/students/doc/oracle-guide-2000-
XP-3.zip
http://edu.eap.gr/pli/pli11/students/doc/oracle-guide-win-
98.zip
Απ.: Είναι προτιμότερο να κάνεις export και import μέσα από το dos prompt με χρήση
των εντολών exp και imp αντίστοιχα.
Έστω ότι δημιουργήσατε ένα χρήστη USERPLH11 στον οποίο φτιάξατε το σχήμα
της βάσης. Τότε από DOS PROMPT C:\ δίνετε την εντολή
EXP SYSTEM/MANAGER FILE=ASKHSH.DMP LOG=ASKHSH.LOG OWNER=USERPLH11
Αφού ολοκληρωθεί το EXPORT το αρχείο ASKHSH.LOG περιέχει τα τυχόν λάθη
Σημείωση: Αν έχετε φτιάξει ALIAS με το NET EASY CONFIG και το λέτε π.χ. ORCL
τότε η εντολή πρέπει να πάρει την παρακάτω μορφή
EXP SYSTEM/MANAGER@ORCL FILE=ASKHSH.DMP LOG=ASKHSH.LOG OWNER=U
SERPLH11
Ερ.2: Για ποιο λόγο δεν δουλεύει ο export wizard μέσα από την εφαρμογή και
πρέπει να βγαίνω σε command prompt να κάνω εξαγωγή ενός πίνακα;
Απ.: Ο λόγος είναι ότι τα εργαλεία της Oracle δεν είναι και τα καλύτερα στον κόσμο, αλλά
και γιατί στην 9i υπάρχουν κάποια προβλήματα (πρέπει να δημιουργήθούν κάποια
views κ.λπ.).
Ερ.3: Παρ' όλο που γράφω τα ονόματα των table και των πεδίων με μικρά ελληνικά
(όπως είναι στην εκφώνηση) ο πίνακας που παράγεται μετά την εκτέλεση της
CREATE TABLE έχει κεφαλαία ελληνικά. Υπάρχει πρόβλημα;
Απ.: Με τα μικρά και κεφαλαία στα tables και fields δεν υπάρχει πρόβλημα.
Ερ.4: Να κάνω export όλη την database; Έχω δημιουργήσει μία νέα database με το
όνομα μου και εκεί έχω δημιουργήσει τους πίνακες. Να κάνω export τους
πίνακες ένα - ένα ή ολόκληρη την database ;
Απ.: Προτιμότερο είναι για τη μεταφορά ενός set από tables (και data) να κάνει κανείς
export σε User mode (το χρήστη δηλαδή). Το πιο εύκολο για αρχή είναι να
προσπαθήσετε να κάνετε EXPORT ένα-ένα table (αρκεί για table, data και indexes)
φροντίζοντας να μπαίνετε με το ίδιο όνομα χρήστη στον οποίον ανήκουν τα tables, το
προτιμότερο είναι να κάνετε export όλο το χρήστη, αλλά πάλι θα πρέπει να
αντιμετωπίσουμε ένα μικρό προβληματάκι το οποίο θα δούμε στη συνέχεια (το ότι τα
views για να γίνουν export πρέπει να γίνει export μάλλον όλη η database - δεν είναι
ωστόσο σημαντικό καθώς μόνο ένα view έχετε να κάνετε σε κάποιο υποερώτημα).
Μετά από σχετικό έλεγχο που πραγματοποιήσαμε, είδαμε ότι το export ολόκληρου του
χρήστη (user) κάνει export όλο το σχήμα (δηλαδή tables, views, indexes, triggers,
stored procedures κλπ) και φυσικά και τα δεδομένα (υπάρχει σχετική ερώτηση) και
μάλλον είναι η πιο ενδεικτική λύση.
Ερ.5: Έχω πρόβλημα κατά την εισαγωγή στοιχείων στους πίνακες τα πεδία
ημερομηνίας θέλουν long date δηλαδή 12-Ιαν-2003 και όχι short 12-01-2003
μήπως υπάρχει στην create table SHORTDATE αντί για DATE ή κάτι άλλο για
να λύσω το πρόβλημα δηλαδή να μπορώ να εισαγάγω ημερομηνίες με μορφή
13/01/2003;
Απ.: Η πιο εύκολη λύση είναι να πας στο REGISTRY και να ψάξεις για τις εγγραφές
NLS_LANG. Όπου βλέπεις GREEK_GREEK... θα γράψεις:
AMERICAN_AMERICA.EL8MSWIN1253
Απ.: Η ORACLE καταχωρεί τα δεδομένα στα datafiles, τα οποία είναι φυσικά αρχείο στο
σκληρό δίσκο.
Το tablespace είναι ουσιαστικά ένα λογικό αρχείο, το οποίο μπορεί να σχετίζεται με
διάφορα φυσικά αρχείο (datafiles). Κάθε χρήστης (γενικά) "αποθηκεύει" όλα τα
αντικείμενά του σε συγκεκριμένο tablespace.
Γι' αυτό όταν φτιάχνουμε ένα χρήστη, ορίζουμε και το tablespace. Στον ορισμό του
χρήστη, επίσης, δηλώνουμε και τα δικαιώματά του, τα οποία η ORACLE τα ορίζει με τη
μορφή ρόλων (roles).
Εσείς πρέπει οπωσδήποτε να δώσετε τους ρόλους CONNECT και RESOURCE στο
χρήστη σας.
Στη συνέχεια, φτιάχνετε αντικείμενα για το χρήστη που κατασκευάσετε, δηλαδή
φτιάχνετε πίνακες, view, indexes κλπ. Αυτά τα αντικείμενα, που έχουν σαν owner το
χρήστη που φτιάξατε αποτελούν και το σχήμα του χρήστη.
Στο σχήμα δεν περιλαμβάνονται τα δεδομένα.
Μ' άλλα λόγια χρήστης για σας σημαίνει "περίπου" ότι και database στην MSAccess.
Ερ.8: Τις εντολές τις έχω γράψει στο Sql plus worksheet. Υπάρχει διάφορα με το sql
plus;
Απ.: Το sql plus και το worksheet είναι δύο διαφορετικά εργαλεία για να εκτελείς sql
statements. Στο επίπεδο στο οποίο τα χειρίζεσθε εσείς δεν υπάρχει καμία διαφορά.
Διαλέξτε όποιο σας ταιριάζει καλύτερα.
Ερ.9: Τώρα που έγραψα όλες της εντολές πιο είναι το επόμενο βήμα;
Απ.: Εάν εννοείς ότι τελείωσες την εργασία σου, τότε προφανώς πρέπει να βγάλεις ένα
export αρχείο.
Ερ.10:Κάθε φορά που επιχειρώ να κάνω create ένα table και αφού έχω δώσει όλες
τις παραμέτρους πατώντας το "create" έχω ένα μήνυμα λάθους που λέει
ORA-01950: δεν έχουν ορισθεί δικαιώματα για τον χώρο πινάκων
(tablespace)
Πώς μπορώ να λύσω αυτό το πρόβλημα; Ορίζοντας ίσως κάποια "δικαιώματα"
για κάποιον πίνακα; Και πως γίνεται αυτό;
Απ.: Ακριβώς. Πρέπει να δώσεις δικαιώματα στον χρήστη. Από SQL PLUS (συνδεδεμένος
σαν SYSTEM / MANAGER) θα δώσεις:
(όπου UserName το όνομα του DATABASE USER που προσπαθεί να κάνει CREATE το
TABLE. Στην SQL φαίνεται με την εντολή SHOW USER)
Απ.: Για την δημιουργία χρήστη κάνετε connection στον sqlplus ως SYSTEM και γράφετε:
create user [i]user_name [/i] identified by [i]user_password[/i]
και μετά του δίνετε κάποια δικαιώματα όπως για παράδειγμα:
grant connect, resource to user_name
Ερ.12:Υπάρχει κάποια εντολή SQL που να μου δείχνει όλα τα TABLES που έχω
δημιουργήσει;
Απ.: Κάνετε connect στον sqlplus ως SYSTEM και δίνετε την εντολή:
select table_name from dba_tables where owner = 'SCOTT'
όπου SCOTT o owner των πινάκων, εάν δεν βάλετε το where θα βγουν πολλοί πίνακες
ως αποτέλεσμα.
Ερ.13:Γιατί μια View, την οποία έχω φτιάξει στο SqlPlus Works... μου φέρνει τις
εγγραφές ενώ τρέχοντάς την (copy & paste) από τον Enterprise Manager δεν
μου φέρνει καμιά εγγραφή;
Απ.: Μπείτε στον sqlplus ως SYSTEM και ανοίξτε και τρέξτε το αρχείο PUPBLD.SQL. Αυτό
μπορείτε να το βρείτε κάνοντας ένα search στον φάκελο c:\oracle.
Στην συνέχεια προσπαθήστε να μπείτε και πάλι ως SCOTT.
Ερ.15:Δεν μπορώ να φτιάξω μια βάση πάω στο data base assistant configuration
και ενώ αρχίζει να δημιουργεί, στο 46% μου βγάζει ένα μήνυμα
Ora-12705 invalid or unknown NLS
Parameter value specified
Επίσης θα ήθελα να ρωτήσω πώς θα πάω στο registry μήπως είναι πρόβλημα
από τα nls_lang το δηλώνω στο run και μου λέει ότι δεν υπάρχει κάτι τέτοιο.
Έχω τα windows XP
Απ.: Για να πάτε στο Registry πρέπει να πάτε στο Έναρξη (START) ---> Εκτέλεση(RUN) --->
και να γράψετε Regedit. Αλλάξτε όλα τα κλειδιά NLS_LANG με
AMERICAN_AMERICA.EL8MSWIN1253 και ξανατρέξτε το Database Configuration
Assistant.
Αναλυτικότερα: Αφού σας βγάλει τον Editor, για να ψάξετε τις εμφανίσεις κάποιου key
(NLS_LANG στην προκειμένη περίπτωση), επιλέγετε 'Find' από το menu 'Edit', γράφετε
μέσα εκεί το 'NLS_LANG' και μετά 'Find Next'. Όταν βρει ένα, για να αλλάξετε την τιμή
του κάνετε double-click πάνω του και σας εμφανίζει ένα παράθυρο όπου βάζετε τη νέα
τιμή και μετά πατάτε 'OK'. Μετά για να βρείτε την επόμενη εμφάνιση (occurrence) του
key πατάτε F3, κάνετε πάλι τα ίδια για κάθε ένα που βρίσκει κ.ο.κ. μέχρι να σας
βγάλει μήνυμα ότι δεν βρίσκει άλλο.
Ερ.16:Αντιμετωπίζω το εξής πρόβλημα στη SQL Plus: Όταν κάνω copy paste
από notepad στην sql plus αλλά και αντίθετα τα ελληνικά που μεταφέρονται
εμφανίζονται ιερογλυφικά.
Απ.: Το πρόβλημα λύνεται ως εξής: όταν είσαι στο Notepad πριν κάνεις το copy θα πρέπει
να γυρίσεις το πληκτρολόγιο στα ελληνικά. Όταν πας στο sql plus πριν κάνεις το
paste θα πρέπει και πάλι να το γυρίσεις στα ελληνικά.
Η ερώτηση να δω τον πίνακα που έφτιαξα είναι λίγο ασαφής. Γιατί το λέω αυτό; Γιατί
πολύ απλά μπορείς να στείλεις ένα query της μορφής SELECT * FROM 'TABLE1' και να
επιβεβαιώσεις ότι έχει δημιουργηθεί ο πίνακας, αλλά και τα πεδία. Εάν θες κάτι
περισσότερο, να ελέγξεις π.χ. τους τύπους των πεδίων, τότε είτε χρησιμοποιείς το
εργαλείο schema manager, είτε χρησιμοποιείς τα views της ORACLE USER_TABLES και
USER_TAB_COLUMNS.
Παραδείγματα
Ερ.18:Ακολουθώντας τον περιληπτικό οδηγό πρώτης χρήσης που μας έχει δοθεί,
επιλέγω στο oracle enterprise manager console login την επιλογή launch
standalone και ok. Μετά δίνοντας τα στοιχεία username sys, password αυτό
που έχω προ-επιλέξει, service EAPPLH11 και connect as
SYSDBA μου βγάζει το μήνυμα:
ORA-12500: TNS:ακροατής απέτυχε να ξεκινήσει μια διεργασία
αφιερωμένου server
Τι να κάνω; Το ίδιο μήνυμα βγάζει και όταν δίνω διαφορετικά στοιχεία (π.χ.
scott / tiger).
Απ.: Δεν έχεις φορτώσει την Υπηρεσία TNSListener. Αυτό μπορείς να το κάνεις από το
Control Panel Services και εκκινείς την συγκεκριμένη υπηρεσία.
Απ.: Για create user (που όπως θα δεις από τα παραπάνω μηνύματα δεν είναι απαραίτητο
για την εργασία σας - υπάρχει έτοιμος χρήστης ο SCOTT / TIGER καθώς και έτοιμη
database) πήγαινε μέσω του SQLPlus (έχοντας μπει ως login SYSTEM pass MANAGER)
και δώσε τις εντολές
Απ.: Μπορείς από τον Enterprise Manager (αφού πρώτα κάνεις login π.χ. σαν SYSTEM) στο
storage tablespace να δημιουργήσεις ένα νέο tablespace. Στη συνέχεια από το
security users να δημιουργήσεις νέο χρήστη και μάλιστα να του ορίσεις να 'βλέπει'
το συγκεκριμένο tablespace
Ερ.22:Πως μπορούμε να φτιάξουμε το δικό μας schema για την εισαγωγή των
πινάκων και δεδομένων μας;
Απ.: Θα πρέπει να επιλέξεις το όνομα του πίνακα που σου εμφανίζεται στην δενδρική μορφή
Schema BANKER Υποκατάστημα, να δώσεις και ένα CTRL+R καλού κακού και
κάνοντας δεξί κλικ να επιλέξεις View/Edit Contents... (με το View/Edit Details...
βλέπεις την δομή του πίνακα).
Τότε σου εμφανίζεται ένα όμορφο πινακάκι με όλες τις εγγραφές σου.
ΠΡΟΣΟΧΗ: Προτού δω τα περιεχόμενα κάποιου πίνακα από τον Enterprise Manager,
πρέπει να έχω εκτελέσει την εντολή COMMIT από το SQL PLUS ή από το SQL PLUS
Worksheet.
Ερ.24:Η εντολή
INSERT INTO Υποκατάστημα VALUES (101,
"Ερμού 32",
"Πύργος",
2621025932);
Βγάζει μήνυμα λάθους ότι λείπει κόμμα. Τι φταίει;
Απ.: Όχι δεν έχετε κάνει λάθος στην εγκατάσταση. Στα Windows 98 υπάρχει ο Navigator
που εξυπηρετεί παρόμοιους σκοπούς. Ο Enterprise Manager είναι μόνο για
εγκατάσταση σε 2000/NT/XP
Ερ.26:Όταν δημιουργώ τον πίνακα ορίζω ένα πεδίο ως DATE. Όταν κάνω insert
όμως μου παρουσιάζει σφάλμα.
Απ.: Κλασσική περίπτωση παραβίασης πρωτεύοντος κλειδιού. Έστω ο πίνακας TABLE1 που
έχει ένα πεδίο τύπου NUMBER(10,0), που ονομάζεται FIELD1 και το οποίο είναι το
πρωτεύον κλειδί του πίνακα. Εκτελείς τις εντολές:
INSERT INTO TABLE1 VALUES(100)
INSERT INTO TABLE1 VALUES(101)
INSERT INTO TABLE1 VALUES(102)
INSERT INTO TABLE1 VALUES(100)
Η τελευταία εντολή θα "σκάσει", γιατί ήδη υπάρχει η εγγραφή 100.
Δεν μπορεί να είναι καταχωρημένες δυο η περισσότερες εγγραφές στο ίδιο πίνακα που
να έχουν την ίδια τιμή στο πρωτεύον κλειδί.
Απ.: Έλεγξε το μέγεθος του πεδίου στο οποίο προσπαθείς να καταχωρήσεις την τιμή.
Εντολή: DESC xxxxxx (xxxxx=το όνομα του πίνακα)
Σε περίπτωση που έχεις Unicode και καταχωρείς Ελληνικά η αντιστοίχηση των
χαρακτήρων-bytes δεν είναι 1-1
Απ.: Το πρώτο error ora-00001 σημαίνει ότι αυτή η εγγραφή που προσπαθείς να εισάγεις
υπάρχει ήδη από προηγούμενό σου Insert. Κάνε delete from onoma_pinaka where
pedio=xxx; Οπου χχχ η τιμή που υπάρχει ήδη στον πίνακα. Μετά κάνε το insert που
«έσκαγε».
Το δεύτερο ora-01756 σημαίνει ότι δεν έχεις κάπου έχεις γράψει 'χχχχχ ενώ έπρεπε
'χχχχχ'
Ερ.30:Όταν δουλεύω στο παράθυρο της SQL PLUS οι ενημερώσεις (δίνοντας τις
απαραίτητες εντολές) στους πίνακες γίνονται κανονικά εμφανίζοντας το
αντίστοιχο μήνυμα, παράδειγμα:
εντολές:
INSERT INTO TABLE1
VALUES (1000,'MPLA..MPLA&');
μήνυμα της SQL:
1 γραμμή δημιουργήθηκε
Στη συνέχεια, ΕΑΝ ΒΓΩ από το περιβάλλον της SQL και ξανά μπω, εάν δώσω
τις εντολές που είχα δώσει προηγουμένως με τα ίδια δεδομένα, ξανά
καταχωρεί την εγγραφή στον πίνακα.!!! Ή αλλιώς, εάν δώσω την εντολή
SELECT * FROM TABLE1;
Μου εμφανίζει το ακόλουθο μήνυμα:
δεν επιλέχτηκαν γραμμές
Τι λάθος κάνω και οι πίνακες «δεν κρατάνε» τα δεδομένα;;;
Και στον Enterprise Manager Console στους πίνακες δεν βλέπω δεδομένα.
Απ.: Αφού τελειώσεις με την εισαγωγή των δεδομένων ( πριν βγεις από την SQL ) να
δώσεις την εντολή COMMIT
Απ.: Πριν από κάθε script θα γράφεις την εντολή του connection.
Δηλαδή:
connect username/password;
create table ...
ή θα συνδεθείς αρχικά στο worksheet με scott / tiger
Ερ.32:Το SCOTT / TIGER της Oracle δουλεύει μόνο για μια ημέρα μετά την
εγκατάσταση; Την επόμενη μέρα δεν αναγνωρίζονται, ούτε από το Enterprise
Manager αλλά ούτε μπορώ να μπω στην SQL Plus. Δοκίμασα και άλλα που
λέει στα documentations, όπως SYSTEM/MANAGER. Αυτό έχει συμβεί άλλες
δύο φορές και αναγκάζομαι συνεχώς να κάνω de-install και re-install.
Τι μπορώ άλλο να κάνω; γιατί σήμερα θα το ξανακάνω re-install το
πρόγραμμα.
Επίσης όταν κάνω de-install , κάποια files δεν σβήνονται από τον δίσκο παρά
το γεγονός ότι κάθε φορά κάνω re-install σε άλλη περιοχή του δίσκου. Τα
«υπολείμματα» πως τα εξαφανίζω;
Επίσης πως μπορώ να δω τις εγγραφές από τους πίνακες που έφτιαξα; από το
enterprise manager; από την SQL Plus;
Απ.: Είναι κατανοητό ότι υπάρχει κάποιο πρόβλημα με την εγκατάσταση σου κάθε φορά. Οι
λογαριασμοί SCOTT/TIGER, SYSTEM/MANAGER κλπ δεν απενεργοποιούνται εντός
χρονικού διαστήματος υπό normal συνθήκες (δεν έχει αναφερθεί επίσης σχετικό
πρόβλημα από άλλον τουλάχιστον στο forum - αν έχει τύχει και σε κάποιον άλλον ας
το αναφέρει).
Γράψε σε παρακαλώ καταρχήν τι μήνυμα σου βγάζει (όταν δεν δέχεται να μπει) και τι
έκδοση Windows έχεις.
Έλεγξε μήπως σε καλύπτουν τα ακόλουθα μηνύματα:
Α. Σε περίπτωση που πάτε να ανοίξετε το sqlplus ή άλλο εργαλείο και σας βγαίνει
το error:
ORA-12541 δεν υπάρχει διεργασία ακρόασης
θα πρέπει να ξεκινήσετε manually τον TNS LISTENER, αυτό γίνετε με την
παρακάτω εντολή από το command prompt:
c:\> LSNRCTL start
Αυτό το πρόβλημα δημιουργείται μόνο στα 98, στα άλλα λειτουργικά συστήματα
υπάρχει service που τον εκκινεί αυτόματα.
Β. ERROR:
ORA-01017: invalid username/password; logon denied
Σφάλμα στην προσπέλαση του PRODUCT_USER_PROFILE
Προειδοποίηση: Πληροφορίες προφίλ χρήστη προϊόντος δεν φορτώθηκαν!
Ίσως χρειασθεί να εκτελέσετε το PUPBLD.SQL σαν SYSTEM
Μπείτε στον sqlplus ως SYSTEM και ανοίξτε και τρέξτε το αρχείο PUPBLD.SQL,
αυτό μπορείτε να το βρείτε κάνοντας ένα search στον φάκελο c:\oracle
Στην συνέχεια προσπαθήστε να μπείτε και πάλι ως SCOTT
Επίσης: Αν ενδιάμεσα κάνεις re-install το πρόγραμμα και δεν φταίει κάτι από τα
παραπάνω, (αν έχεις έκδοση για Win2000/XP ακολούθησε τα βήμα τα που λέγονται
στο θέμα 'ΑΡΧΙΚΕΣ ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ-ΧΡΗΣΗΣ WIN2000' και φτιάξε μετά από
κει δύο νέους χρήστες, δίνοντας στον έναν δικαίωμα 'dba' και στον άλλον κανονικά
δικαιώματα 'connect' και 'resource'): μπες ως SYSTEM/MANAGER στην SQLPlus και
φτιάξε δύο καινούριους χρήστες (έναν κανονικό και έναν με δικαιώματα dba):
Α. Create user <user_name> identified by <user_password>
grant connect, resource to <user_name>
Β. Create user <user_name> identified by <user_password>
grant dba to <user_name>
και έχε τους και αυτούς στο μυαλό σου κάθε φορά που προσπαθείς να μπεις και δεν τα
καταφέρνεις (καλό θα ήταν να μπεις εξαρχής αφού φτιάξεις τους χρήστες αυτούς, με
το user-name και password του πρώτου / κανονικού και να δουλέψεις σε αυτόν -
προσοχή επίσης μετά από κάθε εντολή SQL που εκτελείς ή τουλάχιστον πριν βγεις από
την SQL Plus να εκτελείς την εντολή COMMIT.
Για να δεις τον ορισμό και τα περιεχόμενα των πινάκων που έχεις φτιάξει (εφόσον
έχεις μπει σαν απλός χρήστης με το login και pass που έχεις φτιάξει τους πίνακες σου
- π.χ. scott / tiger ή με τον καινούριο απλό / κανονικό χρήστη που θα έχεις φτιάξει /
βλ.Α.):
Τρέξε τις εντολές:
SELECT * from <table_name>; για να δεις τι έχει εισαχθεί σε έναν πίνακα
DESC <table_name>; για να δεις τον ορισμό ενός πίνακα
Αν έχεις έκδοση για Win2000/XP μπορείς να δεις τα παραπάνω και μέσω του
Enterprise Manager όπως περιγράφεται παρακάτω:
Θα πρέπει να επιλέξεις το όνομα του πίνακα που σου εμφανίζεται στην δενδρική μορφή
Schema --> BANKER --> Υποκατάστημα, να δώσεις και ένα CTRL+R καλού κακού και
κάνοντας δεξί κλικ να επιλέξεις View/Edit Contents... (με το View/Edit Details...
βλέπεις την δομή του πίνακα).
Τότε σου εμφανίζεται ένα όμορφο πινακάκι με όλες τις εγγραφές σου.
ΠΡΟΣΟΧΗ: Προτού δω τα περιεχόμενα κάποιου πίνακα από τον Enterprise Manager,
πρέπει να έχω εκτελέσει την εντολή COMMIT από το SQL PLUS ή από το SQL PLUS
Worksheet.
Ερ.33:Το commit στο SQL PLUS είναι το ίδιο με το 'Εκτέλεση' του File menu;
Απ.: Το COMMIT είναι εντολή επικύρωσης των transactions της ΒΔ (δεν είναι η 'Εκτέλεση'
του File menu την οποία την καλείς για να τρέξεις οποιοδήποτε SQL query έχει
φορτωθεί στον buffer της SQL Plus), το τρέχεις από το SQL prompt της SQLPlus:
SQL> COMMIT
και πρέπει (καλό είναι) να το τρέχεις μετά από κάθε εντολή διαμόρφωσης της βάσης
(insert, update κ.λπ.) και σε κάθε περίπτωση (τουλάχιστον) κάθε φορά πριν
βγεις από την SQLPlus.
Απ.: Η μη εκτέλεσή του COMMIT (βλέπε προηγούμενο θέμα) είναι και ο λόγος που δεν
βλέπεις μετά όταν ξαναμπαίνεις, τα Inserts που έχεις κάνει στους πίνακες.
Ερ.35:Το SQL Plus δεν μου σώζει τα *.sql αρχεία, μου βγάζει:
SP@-0116: Μη αποδεκτή εντολή Save
Απ.: Τα .SQL files προσπάθησε να τα σώσεις σε directory του C:\ ή D:\ - όχι στο My
Documents ('Τα Έγγραφα μου').
Ερ.36:Ενώ έχω καταχωρήσει τις ημερομηνίες στον πίνακα, μπορώ και τις βλέπω
όταν κάνω αναζήτηση όλο τον πίνακα, όταν ζητάω να μου εμφανίσει ένα
πεδίο το οποίο έχει συγκεκριμένη ημερομηνία π.χ.
Ημερομηνία=#02/01/2002# τότε μου εμφανίζει 'δεν επιλέχθηκαν γραμμές'
Απ.: H ημερομηνία στην Oracle είναι της μορφής Ημερομηνία='26/02/2003' και όχι
ημερομηνία=#26/2/2003# που δουλεύει στην Access.
Ερ.37:Δίνω:
Απ.: Δοκίμασέ το χωρίς το VALUES και βάζοντας τα ονόματα των πινάκων μπροστά από τα
πεδία του SELECT, δηλαδή κάτι σαν
INSERT INTO Κατάστημα_Ασφαλιστή
SELECT Κατάστημα.Κωδ_Κατ, Ασφαλιστή.Κωδ_Ασφ
FROM Κατάστημα, Ασφαλιστή
WHERE Δνση= 'Ρ.Φεραίου 25 - Αθήνα' AND Ονοματεπώνυμο='Ανδρέου Ανδρέας'
Ερ.38:Πως βλέπω σε έναν πίνακα στην Oracle ότι ένα πεδίο μου το έχει κάνει
primary key;
Απ.: Ένας αλάνθαστος τρόπος για να ανακαλύψεις αν το primary key είναι αυτό που έχεις
ορίσει, είναι να προσπαθήσεις να περάσεις 2 γραμμές με ίδιο κωδικό. Αν το primary
key δουλεύει καλά, η εκτέλεση θα «χτυπήσει».
Ερ.39:Η COUNT() δεν δουλεύει στην SQL PLUS WORKSHEET. Δεν παίρνει ούτε το
μπλε χρώμα των εντολών. Ξέρει κανείς τον λόγο; Η πως συντάσσεται; Η
τέλος πάντων πως κάνουμε COUNT() στην ORACLE;
Ερ.40:Θέλω να εργαστώ με την Oracle μόνο για την εργασία (προς το παρόν), μου
χρειάζεται κάποιο άλλο περιβάλλον εργασίας εκτός του SQL*Plus Worksheet;
Μπορώ δηλαδή να ολοκληρώσω την άσκηση εδώ μέσα ή θα χρειαστεί να
δουλέψω και κάποιο άλλο τμήμα της εφαρμογής;
Απ.: ΝΑΙ ΜΠΟΡΕΙΣ ΝΑ ΤΗΝ ΚΑΝΕΙΣ ΜΟΝΟ ΜΕ ΤΟ SQL*Plus WORKSHEET (ΑΥΤΟ ΣΥΝΙΣΤΟΥΜΕ
ΚΑΙ ΜΕΙΣ ΕΠΙΣΗΣ ΓΙΑ ΟΣΟΥΣ ΔΟΥΛΕΥΟΥΝ ΣΕ WIN NT/2000/XP) – Η ΕΝΑΛΛΑΚΤΙΚΑ ΜΕ ΤΟ
ΑΠΛΟ SQL*Plus (ΕΙΔΙΚΟΤΕΡΑ ΓΙΑ ΟΣΟΥΣ ΕΧΟΥΝ WIN 98 ΟΠΟΥ ΔΕΝ ΥΠΑΡΧΕΙ SQL*Plus
WORKSHEET) [στα WIN NT/2000/XP υπάρχουν και τα δύο]
Απ.: Φαντάσου, ότι το SQL*Plus Worksheet είναι κάτι σαν το Σημειωματάριο των Windows.
Απλά, στο πάνω (λευκό) τμήμα γράφεις τις εντολές σε sql, και στο κάτω μέρος
(γκρίζο) εμφανίζονται τα αποτελέσματα των ενεργειών σου (είτε το τι έκανε η Oracle,
είτε τους πίνακες που ζητάς να δεις, είτε -μακριά από μας- μηνύματα λάθους).
Προσοχή! Αυτό που γράφω για το σημειωματάριο είναι αρκετά ακριβές. Έχεις όλες τις
επιλογές ενός πλήρους συντάκτη κειμένου, όπως στηλοθέτες, copy/paste κ.α. Για
παράδειγμα, όταν πατάς το Enter, δεν εκτελείται τίποτα, απλά αλλάζεις γραμμή.
Όταν έχεις τελειώσει με την συγγραφή των εντολών σου, πρέπει να πατήσεις F5 για
να εκτελεστούν. Εάν έχεις κάνει κάποιο λάθος στην σύνταξη, η Oracle θα σε
ενημερώσει κατάλληλα, έτσι ώστε να το διορθώσεις, ενώ όλο το κείμενο θα γίνει μπλε
(=θα έχει επιλεγεί - όπως και σε ένα απλό συντάκτη κειμένου, εάν πατήσεις delete θα
σβηστεί όλο, ενώ εάν πατήσεις κάποιο βελάκι, θα μπορέσεις να μετακινήσεις τον
κέρσορα στο σημείο που υπάρχει το λάθος, έτσι ώστε να το διορθώσεις).
Όσον αφορά την γραμμή που σου εμφανίζει στην αρχή, είναι η εντολή σύνδεσής σου
στην ΒΔ, και μπορείς να την "ξεφορτωθείς κατάλληλα"!
Προκειμένου να φτιάξεις πίνακα, ακολουθείς την εντολή create table όπως ακριβώς
περιγράφεται στο βιβλίο μας, σελίδα 138. Απλά γράφεις την εντολή δημιουργίας του
πίνακά σου με τα κατηγορήματά του, με τον τύπο δεδομένων, με το γνώρισμα κλειδί
κ.α., και πατάς F5...; Έτοιμος! Στο κάτω μέρος, θα εμφανιστεί (αν η σύνταξή σου είναι
καλή) το μήνυμα: 1 table created. Συνεχίζεις προσθέτοντας και άλλους πίνακες, και
στοιχεία σε αυτούς (με τις κατάλληλες πάντα εντολές σε sql...), μετά μπορείς να
εκτελέσεις κατά τον ίδιο τρόπο queries (Select…) για ανάκτηση δεδομένων και να
πάρεις τα αντίστοιχα αποτελέσματα κ.λ.π.
Ερ.42: Θέλω να φτιάξω τους πίνακες που έχει το βιβλίο για πρακτική όπως έκανα
(για δοκιμή) και με την Access. Θα τους κάνω με την Create ωραία... μετά θα
θέλω να προσθέσω εγγραφές. Αυτό γίνεται με την insert: Στην Access δεν
μου έδινε την δυνατότητα να εισάγω πάνω από μια εγγραφή κάθε φορά και
έπρεπε για να βάλω πχ 5 εγγραφές να κάνω 5 διαφορετικές insert. Αυτό
γίνεται πιο εύκολα στην Oracle ή θα πρέπει να γράφω τόσες insert όσες και
οι εγγραφές που θα βάζω κάθε φορά;
Απ.: ΟΧΙ, ΠΡΕΠΕΙ ΚΑΙ ΣΤΗΝ ORACLE ΝΑ ΤΟ ΚΑΝΕΙΣ ΜΕ ΞΕΧΩΡΙΣΤΕΣ ΕΝΤΟΛΕΣ 'INSERT' (MIA-
MIA ΔΗΛΑΔΗ) ΝΑ ΒΑΛΕΙΣ ΤΑ ΔΕΔΟΜΕΝΑ [ΚΑΙ 'COMMIT' ΣΤΟ ΤΕΛΟΣ]
(ΓΙΑ ΤΗΝ ΑΚΡΙΒΕΙΑ ΣΤΗΝ ORACLE ΓΙΝΕΤΑΙ ΝΑ ΕΙΣΑΧΘΟΥΝ ΔΕΔΟΜΕΝΑ KAI ΠΟΛΛΑΠΛΑ -
ΟΧΙ ΔΗΛΑΔΗ ΕΝΑ-ΠΡΟΣ-ΕΝΑ - ΑΛΛΑ ΑΠΑΙΤΕΙΤΑΙ ΕΙΔΙΚΟ ΕΡΓΑΛΈΙΟ/SQL LOADER
ΝΟΜΙΖΩ)
Ερ.43: Δίνω μια create και φτιάχνεται ένας πίνακας. Για να φτιάξω τον επόμενο
πρέπει να σβήσω όλα τα άλλα από το παράθυρο, να ανοίξω νέο ή συνεχίζω
κανονικά από κάτω στο ίδιο παράθυρο;
Ερ.44: Ας πούμε ότι έδωσα τις εγγραφές με μια μια τις εντολές insert. Τώρα θέλω
να δω τον πίνακα μου, τα περιεχόμενα του για να ελέγξω αν έβαλα αυτά που
ήθελα και γενικά αν έκανα τον πίνακα που ήθελα. Τι κάνω; Ερώτημα Select?
Απ.: ΟΠΩΣ ΛΕΕΙ ΚΑΙ ΤΟ ΚΕΙΜΕΝΟ/ΟΔΗΓΟΣ (ΣΤΟ 3ο ΜΕΡΟΣ) – ΝΑΙ, ΜΕ ΕΝΤΟΛΕΣ SQL ΕΙΝΑΙ
ΤΟ ΠΙΟ ΑΠΛΟ (SELECT * FROM ... ΓΙΑ ΜΑ ΔΕΙΣ ΤΑ ΔΕΔΟΜΕΝΑ, DESC... ΓΙΑ ΝΑ ΔΕΙΣ ΤΗ
ΔΟΜΗ/ΟΡΙΣΜΟ) – ΔΕΣ ΑΝΑΛΥΤΙΚΟΤΕΡΑ ΣΤΟ ΚΕΙΜΕΝΟ
Ερ.45: Οι πίνακες που κάνω που «πηγαίνουν»; ως αρχεία; Στην Access πχ δίνεις
στην αρχή όνομα βάσης και ξέρεις ότι μέσα σε αυτή τη βάση φτιάχνεις
κάποιους πίνακες. Εδώ πια είναι η βάση μου;
Απ.: ΠΗΓΑΙΝΟΥΝ ΣΕ ΚΑΠΟΙΑ ΑΡΧΕΙΑ ΤΗΣ ΒΑΣΗΣ ΠΟΥ ΔΟΥΛΕΥΕΙΣ ΕΝΙΟΤΕ (ΓΙΑ ΤΗΝ ΟΠΟΙΑ
ΕΠΙΣΗΣ ΕΧΕΙΣ ΔΩΣΕΙ ΕΝΑ ΟΝΟΜΑ ΕΙΤΕ ΚΑΤΑ ΤΗΝ ΕΓΚΑΤΑΣΤΑΣΗ ΟΠΟΥ ΔΗΜΙΟΥΡΓΕΙΤΑΙ
ΑΥΤΟΜΑΤΑ ΕΙΤΕ ΓΕΝΙΚΑ ΟΤΑΝ ΤΗΝ ΔΗΜΙΟΥΡΓΗΣΕΣ ΕΣΥ Ο ΙΔΙΟΣ ΑΝ ΤΟ ΕΚΑΝΕΣ
MANUALLY) - ΑΛΛΑ ΔΕΝ ΣΟΥ ΧΡΕΙΑΖΟΝΤΑΙ ΑΥΤΑ.
ΤΟ ΑΡΧΕΙΟ/DATA/TABLES Κ.Λ.Π. ΠΟΥ ΘΑ ΧΡΕΙΑΣΤΕΙ ΝΑ ΠΑΡΕΙΣ ΑΠΕΞΩ ΚΑΙ ΝΑ ΣΤΕΙΛΕΙΣ
ΚΑΠΟΥ ΩΣ ΒΑΣΗ ΠΟΥ ΕΦΤΙΑΞΕΣ (ΟΠΩΣ ΙΣΧΥΕΙ ΚΑΙ ΓΙΑ ΤΗΝ ΕΡΓΑΣΙΑ ΣΑΣ) ΕΙΝΑΙ ΑΥΤΟ
ΠΟΥ ΠΑΙΡΝΕΙΣ ΜΕ ΤΗΝ ΕΝΤΟΛΗ 'ΕXPORT' (ΣΕ DOS-PROMPT) - ΑΡΧΕΙΟ '<XX>.DMP'
Ερ.46: Επειδή δεν την χρησιμοποιώ την Oracle ακόμη, και κάθε φορά που ξεκινάω
τον υπολογιστή μου, ξεκινάει πολλά services και κάνει περίπου 5 λεπτά η
όλη υπόθεση, έκανα disable από το system configuration utility όλα τα
Oracle Services. Πριν, έτρεχε στο background, apache.exe, 2 java.exe,
oracle.exe και ένα άλλο με sql, χωρίς καν να έχω ανοίξει το πρόγραμμα. Η
ερώτηση μου είναι, όταν θα έρθει η ώρα να την χρησιμοποιήσω, θα πρέπει
να τα ξανακάνω enable όλα αυτά και να κάνω reboot για να δουλέψω την
oracle, ή με το που ξεκινάω το πρόγραμμα ξεκινάνε και αυτά από μόνα τους;
Απ.: θα πρέπει να τα ξανακάνεις enable (επιλογή 'αυτόματα') και να ξανακάνεις restart για
να επανεκκινηθούν αυτόματα. Η άλλη επιλογή είναι να τα γυρίσεις σε 'manual' και να
μπορείς να τα εκκινείς εσύ χωρίς restart όταν τα χρειάζεσαι (θα πρέπει ωστόσο να
ξέρεις πώς εκκινούνται όλα manual και γενικά δεν συνισταταται και η καλύτερη
επιλογή είναι η πρώτη (αυτόματα)).
Ερ.47: Έχω εγκαταστήσει στο γραφείο την oracle8i. Θα μπορούσα στο ίδιο
μηχάνημα να εγκαταστήσω και την 9i χωρίς να έχω πρόβλημα;
Απ.: ναι, γίνεται να εγκαταστήσεις και την 9ι στο ίδιο μηχάνημα, πρέπει να προσέξεις λίγο
ωστόσο με τα install directories στην αρχή - σε κάθε περίπτωση αν έχεις επαρκή
χώρο/resources μπορείς να το κάνεις -- δεν είναι ωστόσο απίθανο να έχεις τελικά
κάποια προβλήματα στο τρέξιμο - έχουν αναφερθεί προβλήματα ακόμα και με
σωστές/πλήρεις εγκαταστάσεις πολλαπλών εκδόσεων (με τον TNS listener της μίας
και της άλλης έκδοσης κ.α.) - σε κάθε περίπτωση δεν έχει αναφερθεί πρόβλημα που να
μην μπορεί κάποιος μετά την εγκατάσταση να χρησιμοποιήσει σωστά τουλάχιστον την
μία από τις δύο εκδόσεις.
Ερ.48: Έχω φορτωμένο ήδη στον υπολογιστή μου Sql Server 2000 που μου είναι
χρήσιμο για την δουλεία μου.Εάν εγκαταστήσω και την oracle στο ίδιο pc θα
έχω πρόβλημα;Μήπως οι δύο αυτές βάσεις δεν πρέπει να εγκατασταθούν στο
ίδιο pc;Σε αυτή την περίπτωση ποιά είναι η λύση;Να κάνω εγκατάσταση σε
διαφορετικό partition με άλλο λειτουργικό ή να φτιάξω ένα partition και να
εγκαταστήσω εκεί την oracle μόνο;
Απ.: Κανένα απολύτως πρόβλημα. Ο SQL Server δεν καταναλώνει σχεδόν καθόλου πόρους
σε σχέση με την Oracle. Οποιοδήποτε πρόβλημα και να αντιμετωπίσεις με την Oracle
δεν θα οφείλεται στο SQL Server.
Απ.: το συγκεκριμένο πρόβλημα (EXPORT από SYS/sysdba) – ...έχει προκύψει και σε άλλους
–
ξεκινάει... από το ότι κανονικά θα έπρεπε να είχατε δουλέψει την εργασία (όπως
είχαμε πει και γράφουμε και στα κείμενα/οδηγίες) ως απλός χρήστης (π.χ. scott/tiger
ή οποιονδήποτε άλλον έχετε τυχόν δημιουργήσει) και όχι ως 'sys' ή 'system' (οι οποίοι
δεν είναι κλασσικοί λογαριασμοί χρηστών – είναι λογαριασμοί συστήματος) – οπότε
δουλεύουν κανονικά και οι οδηγίες που σας έχουμε δώσει για EXPORT.
Από κει και πέρα, αυτό που ΠΡΟΤΕΙΝΟΥΜΕ να κάνετε ενόψη της εργασίας σας (ΚΑΙ
ΜΟΝΟ ΑΥΤΟΙ ΠΟΥ ΕΧΟΥΝ ΔΟΥΛΕΨΕΙ ως 'SYS'/sysdba) – μια και δεν υπάρχει αρκετός
χρόνος πλέον – είναι να κάνετε EXPORT τα tables μόνο, με την ακόλουθη εντολή:
όπου ως 'pass' βάζετε το password που έχετε δηλώσει (κατά την εγκατάσταση ως
password του λογαριασμού 'sys') και όπου 'tab1', 'tab2', 'tab3',.... βάζετε ένα-ένα τα
ονόματα των πινάκων που έχετε φτιάξει για την εργασία σας. Δοκιμάστε το και
ενημερώστε για το αποτέλεσμα (θα σας εμφανίσει λογικά κατά το τρέξιμο ενα-ένα ta
tables που κάνει export και τον αριθμό των γραμμών τους – το τελικό αρχείο θα είναι
μικρό σε μέγεθος – μη σας απασχολεί αυτό).
ή αντίστοιχα (εναλλακτικά) μπορείτε να τρέξετε το παραπάνω και βήμα προς βήμα:
- σκέτο EXP στο command prompt,
- εισάγετε ως username: sys/pass as sysdba
- στην επιλογή που σας ζητάει T η U (table mode ή user mode) δίνετε Τ,
- στις υπόλοιπες επιλογές πατάτε enter,
- μέχρι την επιλογή που θα σας εμφανίσει ποιά tables θέλετε να κάνετε export: όπου
δίνετε ένα-ένα τα ονόματα των tables της εργασίας σας.
ΕΝΑΛΛΑΚΤΙΚΗ ΛΥΣΗ βέβαια (την οποία ΚΑΙ ΣΥΝΙΣΤΟΥΜΕ ειδικά αν έχετε λίγο χρόνο
παραπάνω) είναι: να μπείτε να δουλέψετε εκ νέου σαν 'scott/tiger' και να ξανατρέξετε
όλες τις εντολές SQL που έχετε φτιάξει (CREATES, INSERTS, UPDATES κ.λ.π.) με σκοπό
να ξαναφτιαχτεί η βάση σας κάτω από το χρήστη 'scott' - εφόσον/πιστεύoυμε ότι τα
έχετε σε κάποιο Word ή άλλου τύπου text file και μπορείτε να τα κάνετε copy-paste
από αυτό // και μετά να κάνετε EXPORT κανονικά τον χρήστη 'scott' σύμφωνα με τις
οδηγίες που έχουν δοθεί (αναρτηθέν αρχείο)
Κατά τα άλλα (τέλος) μπορείτε να κάνετε EXPORT και απευθείας (ολόκληρο το χρήστη
– όχι μόνο τα tables) από τον χρήστη SYS/sysdba αρκεί (δεν συνίσταται, δοκιμάστε το
ωστόσο αν θέλετε πειραματικά, δείτε τί κάνει και αν αργεί πάρα πολύ διακόψτε το) να
τρέξετε την εντολή
EXPORT userid='sys/pass as sysdba' file=c:\myexp1.dmp log=c:\myexp1.log
owner=sys
όπου 'pass' βάζετε το password που έχετε δηλώσει (κατά την εγκατάσταση ως
password του λογαριασμού 'sys') - ωστόσο επειδή δεν είναι κλασσικός χρήστης ...θα
σας βγάλει ένα dmp file αρκετάμεγάλο - που δεν είναι σκόπιμο/δόκιμο να στείλετε
μέσω e-mail.