Oracle για να λάβετε διάφορες μεθόδους δέσμευσης μεταβλητών

Oracle Get Various Methods Binding Variables



Μαντείο Λάβετε διάφορες μεθόδους δέσμευσης μεταβλητών



πότεΜαντείοΑνάλυση και εκτέλεση στόχων με μεταβλητές δέσμευσηςSQLΌταν πληρούται μία από τις ακόλουθες δύο προϋποθέσειςSQLΗ συγκεκριμένη τιμή εισαγωγής της μεταβλητής σύνδεσης θα είναιΜαντείοπιάνω:

μεγάλοΌταν ο στόχος περιέχει δεσμευτικές μεταβλητέςSQLΌταν εκτελείται με σκληρό τρόπο ανάλυσης.



μεγάλοΌταν ο στόχος περιέχει δεσμευτικές μεταβλητέςSQLΌταν εκτελείται επανειλημμένα με μαλακή ανάλυση ή μαλακή ανάλυση,ΜαντείοΤουλάχιστον διάστημα από προεπιλογήδεκαπέντεΘα καταγράφεται μία φορά σε λίγα λεπτά. ΑυτόδεκαπέντεΤα πρακτικά υπονοούνται από παραμέτρους_CURSOR_BIND_CAPTURE_INTERVAL«Έλεγχος, η προεπιλεγμένη τιμή είναι900Δεύτερον, δηλαδήδεκαπέντελεπτό.



root @ xxxxx> ΣΕΤ ΣΕΛΙΔΑ 9999



root @ xxxxx> ΣΕΤ ΓΡΑΜΜΗΣ 9999

root @ xxxxx> ΜΟΡΦΗ ΟΝΟΜΑ COL A40

root @ xxxxx> ΜΟΡΦΗ COL KSPPDESC A60



root @ xxxxx> ΦΟΡΜΑ COL KSPPSTVL A20

root @ xxxxx> ΕΠΙΛΕΞΤΕ A.INDX,

2 ΟΝΟΜΑ A.KSPPINM,

3 A.KSPPDESC,

4 B.KSPPSTVL

5 ΑΠΟ X $ KSPPI A,

6 X $ KSPPCV Β

7 ΠΟΥ A.INDX = B.INDX

8 ΚΑΙ ΧΑΜΗΛΟΤΕΡΑ (A.KSPPINM) ΟΠΩΣ ΧΑΜΗΛΗ ('% & PARAMETER%')

Εισαγάγετε την τιμή για την παράμετρο: _CURSOR_BIND_CAPTURE_INTERVAL

παλιό 8: ΚΑΙ ΧΑΜΗΛΟΤΕΡΟ (A.KSPPINM) ΟΜΟΕΙ ΧΑΜΗΛΟ ('% & PARAMETER%')

νέο 8: ΚΑΙ ΧΑΜΗΛΟΤΕΡΟ (A.KSPPINM) ΟΠΩΣ ΧΑΜΗΛΟ ('% _ CURSOR_BIND_CAPTURE_INTERVAL%')

INDX NAME KSPPDESC KSPPSTVL

---------- ---------------------------------------- -------------------------------------------------- ---------- --------------------

2140 _cursor_bind_capture_interval interval (σε δευτερόλεπτα) μεταξύ δύο δέσμευσης δέσμευσης για έναν κέρσορα 900

πρέπει να γνωρίζετε ότι είναι,ΜαντείοΘα συλλάβει μόνο εκείνους που βρίσκονται στο στόχοSQLτουΠΟΥΗ συγκεκριμένη τιμή εισαγωγής της δεσμευμένης μεταβλητής στην κατάσταση και για εκείνους που χρησιμοποιούν τη μεταβλητή σύνδεσηςΕΙΣΑΓΕΤΕΔήλωση, ανεξάρτητα απόΕΙΣΑΓΕΤΕΕάν η δήλωση εκτελείται με σκληρό τρόπο ανάλυσης,ΜαντείοΠοτέ μην συλλάβετεΕΙΣΑΓΕΤΕΔήλωσηΑΞΙΕΣΗ συγκεκριμένη τιμή εισαγωγής της αντίστοιχης μεταβλητής δέσμευσης στην ενότητα.

Προβολή ερωτήματοςV $ SQL_BIND_CAPTUREΜπορεί να πάρει τον εκτελεσμένο στόχοSQLΗ συγκεκριμένη τιμή εισαγωγής της δεσμευμένης μεταβλητής. σε περίπτωσηV $ SQL_BIND_CAPTUREΔεν μπορείτε να βρείτε, τότε είναι δυνατό να αντιστοιχίσετεΚοινό δρομέαΉδη απόΚοινόχρηστη πισίναΕκκαθαρίστηκε, αυτή τη φορά μπορείτε να το δοκιμάσετεΩΡΕΣΠίνακας λεξικών σχετικών δεδομένωνDBA_HIST_SQLSTATήDBA_HIST_SQLBINDΣτο ερώτημα.

ΡωτώSQLΗ δήλωση έχει ως εξής:

ΕΠΙΛΕΞΤΕ D.SQL_ID,

D.CHILD_NUMBER,

D.CHILD_ADDRESS,

Δ. ΟΝΟΜΑ,

Δ. ΘΕΣΗ,

D.DATATYPE,

D.DATATYPE_STRING,

D.MAX_LENGTH,

D.WAS_CAPTURED,

D.LAST_CAPTURED,

D.VALUE_STRING

ΑΠΟ V $ SQL_BIND_CAPTURE Δ

ΠΟΥ D.SQL_ID = '01g03pruhphqc'

ΠΑΡΑΓΓΕΛΙΑ ΑΠΟ D.CHILD_NUMBER, D. ΘΕΣΗ

ΕΠΙΛΕΞΤΕ D.SQL_ID,

Δ. ΟΝΟΜΑ,

Δ. ΘΕΣΗ,

D.DATATYPE,

D.DATATYPE_STRING,

D.MAX_LENGTH,

D.WAS_CAPTURED,

D.LAST_CAPTURED,

D.VALUE_STRING

ΑΠΟ DBA_HIST_SQLBIND Δ

ΕΠΙΛΕΞΤΕ D.SNAP_ID,

DBMS_SQLTUNE.EXTRACT_BIND (D.BIND_DATA, 1) .VALUE_STRING BIND1,

DBMS_SQLTUNE.EXTRACT_BIND (D.BIND_DATA, 1) .VALUE_STRING BIND2

ΑΠΟ DBA_HIST_SQLSTAT D

ΠΟΥ D.SQL_ID = '01g03pruhphqc'

ΕΠΙΛΟΓΗ D.SQL_ID, D.CHILD_NUMBER, D.CHILD_ADDRESS, D.NAME, D.POSITION, D.DATATYPE, D.DATATYPE_STRING, D.MAX_LENGTH, D.WAS_CAPTURED, D.LAST_CAPTURED, D.VALUE_STRING ΑΠΟ V $ SQL_BIND_C D.SQL_ID = 'aug0d49nzbgtq' ΠΑΡΑΓΓΕΛΙΑ ΑΠΟ D.CHILD_NUMBER, D. ΘΕΣΗ

SELECT D.SNAP_ID, DBMS_SQLTUNE.EXTRACT_BIND (D.BIND_DATA, 1) .VALUE_STRING BIND1, DBMS_SQLTUNE.EXTRACT_BIND (D.BIND_DATA, 1) .VALUE_STRING BIND2 FROM DBA_HIST_SQL_SIST_49

ΕΠΙΛΕΞΤΕ * ΑΠΟ DBA_HIST_SQLBIND D ΠΟΥ D.SQL_ID = 'aug0d49nzbgtq'

Το παράδειγμα δοκιμής έχει ως εξής:

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑΣ T_BG_20170610_LHR (N ΑΡΙΘΜΟΣ (10), V VARCHAR2 (3000))

--SQL_TEXT1:Σκληρή ανάλυση

ΔΗΛΩΝΩ

ΑΡΙΘΜΟΣ (10): = 1 -κατανομή22Χώρος μνήμης byte

V VARCHAR2 (32): = 'XIAOMAIMIAO1' -κατανομή32Χώρος μνήμης byte

ΝΑ ΑΡΧΙΣΕΙ

ΕΚΤΕΛΕΣΤΕ ΑΜΕΣΑ 'ΕΙΣΑΓΩΓΗ ΣΤΟ T_BG_20170610_LHR ΕΠΙΛΕΞΤΕ * ΑΠΟ T_BG_20170610_LHR ΠΟΥ Ν =: N ΚΑΙ V =: V' ΧΡΗΣΙΜΟΠΟΙΕΙΤΕ Ν, V

ΔΙΑΠΡΑΤΤΩ

ΤΕΛΟΣ

/

--SQL_TEXT2:Σκληρή ανάλυση

ΔΗΛΩΝΩ

ΑΡΙΘΜΟΣ (10): = 2 -κατανομή22Χώρος μνήμης byte

V VARCHAR2 (33): = «XIAOMAIMIAO2»κατανομή128Χώρος μνήμης byte

ΝΑ ΑΡΧΙΣΕΙ

ΕΚΤΕΛΕΣΤΕ ΑΜΕΣΑ 'ΕΙΣΑΓΩΓΗ ΣΤΟ T_BG_20170610_LHR ΕΠΙΛΕΞΤΕ * ΑΠΟ T_BG_20170610_LHR ΠΟΥ Ν =: N ΚΑΙ V =: V' ΧΡΗΣΙΜΟΠΟΙΕΙΤΕ Ν, V

ΔΙΑΠΡΑΤΤΩ

ΤΕΛΟΣ

/

--SQL_TEXT3:Σκληρή ανάλυση

ΔΗΛΩΝΩ

ΑΡΙΘΜΟΣ (10): = 3 -κατανομή22Χώρος μνήμης byte

V VARCHAR2 (129): = 'XIAOMAIMIAO3' -κατανομή2000Χώρος μνήμης byte

ΝΑ ΑΡΧΙΣΕΙ

ΕΚΤΕΛΕΣΤΕ ΑΜΕΣΑ 'ΕΙΣΑΓΩΓΗ ΣΤΟ T_BG_20170610_LHR ΕΠΙΛΕΞΤΕ * ΑΠΟ T_BG_20170610_LHR ΠΟΥ Ν =: N ΚΑΙ V =: V' ΧΡΗΣΙΜΟΠΟΙΕΙΤΕ Ν, V

ΔΙΑΠΡΑΤΤΩ

ΤΕΛΟΣ

/

--SQL_TEXT4:Απαλή ανάλυση

ΔΗΛΩΝΩ

ΑΡΙΘΜΟΣ (10): = 4 -κατανομή22Χώρος μνήμης byte

V VARCHAR2 (2001): = 'XIAOMAIMIAO4' -κατανομή2000Χώρος μνήμης byte

ΝΑ ΑΡΧΙΣΕΙ

ΕΚΤΕΛΕΣΤΕ ΑΜΕΣΑ 'ΕΙΣΑΓΩΓΗ ΣΤΟ T_BG_20170610_LHR ΕΠΙΛΕΞΤΕ * ΑΠΟ T_BG_20170610_LHR ΠΟΥ Ν =: N ΚΑΙ V =: V' ΧΡΗΣΙΜΟΠΟΙΕΙΤΕ Ν, V

ΔΙΑΠΡΑΤΤΩ

ΤΕΛΟΣ

/

--SQL_TEXT5:Απαλή ανάλυση

ΔΗΛΩΝΩ

ΑΡΙΘΜΟΣ (10): = 5 -κατανομή22Χώρος μνήμης byte

V VARCHAR2 (32767): = 'XIAOMAIMIAO5' -κατανομή2000Χώρος μνήμης byte

ΝΑ ΑΡΧΙΣΕΙ

ΕΚΤΕΛΕΣΤΕ ΑΜΕΣΑ 'ΕΙΣΑΓΩΓΗ ΣΤΟ T_BG_20170610_LHR ΕΠΙΛΕΞΤΕ * ΑΠΟ T_BG_20170610_LHR ΠΟΥ Ν =: N ΚΑΙ V =: V' ΧΡΗΣΙΜΟΠΟΙΕΙΤΕ Ν, V

ΔΙΑΠΡΑΤΤΩ

ΤΕΛΟΣ

/

--SQL_TEXT6:Σκληρή ανάλυση

ΔΗΛΩΝΩ

ΑΡΙΘΜΟΣ (10): = 6 -κατανομή22Χώρος μνήμης byte

V VARCHAR2 (32767): = RPAD («XIAOMAIMIAO6», 2002, «8») -Το μήκος της συμβολοσειράς είναι2002,κατανομή4000Χώρος μνήμης byte

ΝΑ ΑΡΧΙΣΕΙ

ΕΚΤΕΛΕΣΤΕ ΑΜΕΣΑ 'ΕΙΣΑΓΩΓΗ ΣΤΟ T_BG_20170610_LHR ΕΠΙΛΕΞΤΕ * ΑΠΟ T_BG_20170610_LHR ΠΟΥ Ν =: N ΚΑΙ V =: V' ΧΡΗΣΙΜΟΠΟΙΕΙΤΕ Ν, V

ΔΙΑΠΡΑΤΤΩ

ΤΕΛΟΣ

/

Ερώτηση της τιμής εισαγωγής της δεσμευμένης μεταβλητής:

root @ xxxxx> ΜΟΡΦΗ ΟΝΟΜΑΤΟΣ COL A6

root @ xxxxx> ΜΟΡΦΗ COL VALUE_STRING A15

root @ xxxxx> SELECT D.SQL_ID, D.CHILD_NUMBER, D.CHILD_ADDRESS, D.NAME, D.POSITION, D.DATATYPE, D.DATATYPE_STRING, D.MAX_LENGTH, D.WAS_CAPTURED, D.LAST_CAPTURED, D.VALUE_STRING ΑΠΟ V $ SQL_BIND_CAPTURE D ΠΟΥ D.SQL_ID = 'aug0d49nzbgtq' ΠΑΡΑΓΓΕΛΙΑ ΑΠΟ D.CHILD_NUMBER, D. ΘΕΣΗ

SQL_ID CHILD_NUMBER CHILD_ADDRESS ΟΝΟΜΑ ΘΕΣΗ DATATYPE DATATYPE_STRING MAX_LENGTH ΕΙΝΑΙ ΤΕΛΕΥΤΑΙΑ_ ΚΑΤΑΣΚΕΥΗ VALUE_STRING

------------- ------------ ---------------- ------ --- ------- ---------- ------------------------------ --- ------- --- ------------------- ---------------

aug0d49nzbgtq 0 0000000095C56BB0: N 1 2 ΑΡΙΘΜΟΣ 22 ΝΑΙ 2017-06-10 11:48:47 1

aug0d49nzbgtq 0 0000000095C56BB0: V 2 1 VARCHAR2 (32) 32 ΝΑΙ 2017-06-10 11:48:47 XIAOMAIMIAO1

aug0d49nzbgtq 1 0000000095C5ECF0: N 1 2 ΑΡΙΘΜΟΣ 22 ΝΑΙ 2017-06-10 11:48:47 2

aug0d49nzbgtq 1 0000000095C5ECF0: V 2 1 VARCHAR2 (128) 128 ΝΑΙ 2017-06-10 11:48:47 XIAOMAIMIAO2

aug0d49nzbgtq 2 0000000095C66750: N 1 2 ΑΡΙΘΜΟΣ 22 ΝΑΙ 2017-06-10 11:48:47 3

aug0d49nzbgtq 2 0000000095C66750: V 2 1 VARCHAR2 (2000) 2000 ΝΑΙ 2017-06-10 11:48:47 XIAOMAIMIAO3

aug0d49nzbgtq 3 0000000095C22880: N 1 2 ΑΡΙΘΜΟΣ 22 ΝΑΙ 2017-06-10 11:48:48 6

aug0d49nzbgtq 3 0000000095C22880: V 2 1 VARCHAR2 (4000) 4000 ΟΧΙ







1, ερώτημα v $ sql view
επιλέγω sql_id, sql_text, bind_data, HASH_VALUE από v $ sqlόπου sql_text Like '% select * from test όπου id1%'
Η συχνότητα εγγραφής ελέγχεται από την σιωπηρή παράμετρο του _cursor_bind_capture_interval. Η προεπιλεγμένη τιμή είναι 900, υποδεικνύοντας ότι η τιμή δέσμευσης καταγράφεται κάθε 900 δευτερόλεπτα. Μπορεί να περάσει μέσω του συστήματος αλλαγής σετ '_cursor_bind_capture_interval' = 10

Στο σημείο αυτό το ερώτημα με τα στοιχεία που αξίζει την μορφή: BEDA0B2002004F8482D10065FFFF0F00000000000000000000C0021602C102C0021602C102F0018003691532303132303431313032504F443834363135313635F0018003691532303132303431313032504F443834363135313730F0018003691532303132303431313032504F443834363135313731F0018003691532303132303431313032504F443834363135313734F0018003691532303132303431313032504F443834363135313735F0018003691532303132303431313032504F443834363135313739F0018003691532303132303431313032504F443834363135313830F0018003691532303132303431313032504F443834363135313833F0018003691532303132303431313032504F443834363135313834F0018003691532303132303431313032504F443834363135313838F0018003691532303132303431313032504F443834363135313839F0018003691532303132303431313032504F443834363135313933F0018003691532303132303431313032504F443834363135313934F0018003691532303132303431313032504F443834363135313937F0018003691532303132303431313032504F443834363135313938F0018003691532303132303431313032504F443834363135323033F001 800369153 2303132303431313032504F443834363135323034F0018003691532303132303431313032504F443834363135323037
Αυτό σίγουρα δεν είναι κατανοητό.

Πρέπει να μετατρέψετε
επιλέξτε dbms_sqltune.extract_binds (bind_data) δέσμευση από v $ sql ΠΟΥ SQL_TEXT Αρέσει '% ΑΠΟ ΔΟΚΙΜΗ 11%'


2, ερώτημα SELECT VALUE_STRING FROM V $ SQL_BIND_CAPTURE ΠΟΥ SQL_ID = 'abhf6n1xqgrr0'
μεv $ sql_bind_captureΠροβολή, μπορείτε να δείτε τη μεταβλητή σύνδεσης, αλλά αυτή η προβολή δεν είναι πολύ ισχυρή, μόνο η τιμή της μεταβλητής σύνδεσης της τελευταίας εγγραφής μπορεί να καταγραφεί.

Και το διάστημα μεταξύ δύο λήψεων έχει έναν έμμεσο έλεγχο παραμέτρων. Η προεπιλογή είναι900Σε δευτερόλεπτα, η λήψη θα ξεκινήσει ξανά. σε900Στο εσωτερικό, η αλλαγή στην τιμή της δεσμευμένης μεταβλητής δεν θα αντικατοπτρίζεται σε αυτήν την προβολή.

10GΜπορείτε να το δείτε αργότερα έωςΩΡΕΣΚαταγράφηκε στην αναφοράSQLΔεσμευμένη τιμή μεταβλητής.

επιλέξτε snap_id, name, position, value_string, last_captured, WAS_CAPTURED from dba_hist_sqlbind όπου sql_id = '576c1s91gua19' και snap_id = '20433'

---------- SNAP_IDΕίναιΩΡΕΣΣτιγμιότυπο της αναφοράςταυτότητα

----------όνομα,Το όνομα της μεταβλητής σύνδεσης

----------θέση, η δεσμευτική τιμή είναιSQLΗ θέση στη δήλωση προς1δύο3Βαθμολόγηση

--------- value_stringΕίναι η δεσμευμένη μεταβλητή τιμή

---------, τελευταία_αποκλεισμένη, η τελευταία καταγεγραμμένη ώρα

---------ΔΗΜΙΟΥΡΓΙΑΑν η δέσμευση έχει πιάσει,πουΟι δεσμεύσεις μπροστά από τον όρο δεν καταγράφονται.

dba_hist_sqlbindΗ δύναμη της προβολής είναι ότι καταγράφει το καθέναΩΡΕΣΣτην έκθεσηSQLΔεσμευμένη τιμή μεταβλητής, φυσικά αυτή η δεσμευτική τιμή μεταβλητής είναι επίσηςΩΡΕΣΌταν δημιουργείται απόv $ sql_bind_captureΛήφθηκε δειγματοληψία.

Μέσω αυτής της προβολής, μπορούμε να πάρουμε πολλές δεσμευμένες τιμές μεταβλητών, οι οποίες είναι γενικά αρκετές για να αντιμετωπίσουμε το πρόβλημα.

Ένα άλλο πράγμα που πρέπει να σημειωθεί είναι ότι οι μεταβλητές σύνδεσης που καταγράφονται σε αυτές τις δύο προβολές είναι μόνοπουΗ δέσμευση πίσω από την κατάσταση συλλαμβάνεται, η οποία πρέπει να ληφθεί μέριμνα.

3, ερώτημα Dba_hist_sqlbind VALUE_STRING στήλη
DBA_HIST_SQLBIND is a view V$SQL_BIND_CAPTURE history snapshot

4, έρευνα wrh $ _sqlstat
επιλέξτε dbms_sqltune.extract_bind (bind_data, 1). value_string
από wrh $ _sqlstat
Όπου sql_id = '88dz0k2qvg876' ---- Αύξηση dbms_sqltune.extract_bind (bind_data, 2). Value_string, κ.λπ. ανάλογα με τον αριθμό των μεταβλητών σύνδεσης




Μέθοδος ORACLE για τη λήψη μεταβλητών τιμών σύνδεσης SQL

Αυτό το άρθρο συνοψίζειΜΑΝΤΕΙΟΠώς να μπείτε στη βάση δεδομένωνSQLΗ μέθοδος δέσμευσης μεταβλητών τιμών,SQLΑυτή η πτυχή της γνώσης χρησιμοποιείται συχνά στη διαδικασία βελτιστοποίησης βελτιστοποίησης. Εδώ, ταξινομήστε και συνοψίστε και αναζητήστε και διαβάστε το αργότερα.

μέθοδος1:ΡωτώΣε $ SQL

Σε $ SQLΚατά την προβολήBIND_DATAΤα πεδία χρησιμοποιούνται για την αποθήκευση της τιμής μιας μεταβλητής σύνδεσης, αλλά το ερώτημα της τιμής μιας μεταβλητής σύνδεσης από αυτήν την προβολή έχει σημαντικούς περιορισμούς:

1: Η συχνότητα εγγραφής επηρεάζεται από_cursor_bind_capture_intervalΈμμεσος έλεγχος παραμέτρων, προεπιλεγμένη τιμή900, υποδεικνύοντας ότι το καθένα900Καταγράψτε την τιμή δέσμευσης μία φορά σε δευτερόλεπτα, δηλαδή σε900Στο εσωτερικό, η αλλαγή στην τιμή της δεσμευμένης μεταβλητής δεν θα αντικατοπτρίζεται σε αυτήν την προβολή. Εκτός αν προσαρμόσετε τις σιωπηρές παραμέτρους_cursor_bind_capture_interval

δύο: Καταγράφει μόνο την τιμή της μεταβλητής σύνδεσης που καταγράφηκε τελευταία φορά.

3:BIND_DATAΟ τύπος δεδομένων είναιΑΚΑΤΕΡΓΑΣΤΟΣΠρέπει να μετατρέψετε.

Υπάρχουν δύο τρόποι για να δείτε την τιμή μιας μεταβλητής σύνδεσης.

COL SQL_ID FOR A14
COL SQL_TEXT FOR A32
COL HASH_VALUE FOR 99999999999
COL BIND_DATA FOR A32
SELECT SQL_ID 
 ,SQL_TEXT
 ,LITERAL_HASH_VALUE
 ,HASH_VALUE
 ,DBMS_SQLTUNE.EXTRACT_BINDS(BIND_DATA) BIND_DATA
FROM V$SQL
WHERE SQL_TEXT LIKE ''SELECT * FROM TEST%'
 
 
COL SQL_ID FOR A14
COL SQL_TEXT FOR A32
COL HASH_VALUE FOR 99999999999
COL BIND_DATA FOR A32
SELECT SQL_ID 
 ,SQL_TEXT
 ,LITERAL_HASH_VALUE
 ,HASH_VALUE
 ,DBMS_SQLTUNE.EXTRACT_BIND(BIND_DATA,1).VALUE_STRING BIND_DATA
FROM V$SQL
WHERE SQL_TEXT LIKE 'SELECT * FROM TEST%'

Όπως φαίνεται στο παρακάτω πείραμα, χρησιμοποιούμε ένα ερώτημα μεταβλητής σύνδεσης σε μια περίοδο σύνδεσης.SQLΣτη συνέχεια, ας προσπαθήσουμε να πάρουμε την τιμή της δεσμευμένης μεταβλητής ως εξής:

SQL> SHOW USER
USER is 'TEST'
SQL> DESC TEST
 Name Null? Type
 ----------------------------------------- -------- ----------------------------
 ID NUMBER(10)
 NAME VARCHAR2(32)
 
SQL> 
SQL> VARIABLE NAME NVARCHAR2(32)
SQL> EXEC :NAME :='KKKK'
 
PL/SQL procedure successfully completed.
 
SQL> SELECT * FROM TEST WHERE NAME=:NAME
 
no rows selected
 
SQL> 
 
 
 
SQL>SHOW USER
USER is 'SYS'
SQL> COL SQL_ID FOR A14
SQL> COL SQL_TEXT FOR A32
SQL> COL HASH_VALUE FOR 99999999999
SQL> COL BIND_DATA FOR A32
SQL> SELECT SQL_ID 
 2 ,SQL_TEXT
 3 ,LITERAL_HASH_VALUE
 4 ,HASH_VALUE
 5 ,DBMS_SQLTUNE.EXTRACT_BINDS(BIND_DATA) BIND_DATA
 6 FROM V$SQL
 7 WHERE SQL_TEXT LIKE 'SELECT * FROM TEST%'
 
SQL_ID SQL_TEXT LITERAL_HASH_VALUE HASH_VALUE BIND_DATA(NAME, POSITION, DUP_PO
-------------- -------------------------------- ------------------ ------------ --------------------------------
0r7m5jyz9ng09 SELECT * FROM TEST WHERE NAME=:N 0 3197778953 SQL_BIND_SET(SQL_BIND(NULL, 1, N
 AME ULL, 1, 'NVARCHAR2(128)', 2000,
 NULL, NULL, 128, '04-SEP-17', 'K
 KKK', ANYDATA()))
 
 
SQL> COL SQL_ID FOR A14
SQL> COL SQL_TEXT FOR A32
SQL> COL HASH_VALUE FOR 99999999999
SQL> COL BIND_DATA FOR A32
SQL> SELECT SQL_ID 
 2 ,SQL_TEXT
 3 ,LITERAL_HASH_VALUE
 4 ,HASH_VALUE
 5 ,DBMS_SQLTUNE.EXTRACT_BIND(BIND_DATA,1).VALUE_STRING BIND_DATA
 6 FROM V$SQL
 7 WHERE SQL_TEXT LIKE 'SELECT * FROM TEST%'
 
SQL_ID SQL_TEXT LITERAL_HASH_VALUE HASH_VALUE BIND_DATA
-------------- -------------------------------- ------------------ ------------ --------------------------------
0r7m5jyz9ng09 SELECT * FROM TEST WHERE NAME=:N 0 3197778953 KKKK

clip_image001

Εάν δώσετε τη μεταβλητή αυτή τη στιγμήΟΝΟΜΑΑΝΑΘΕΣΗ ΕΡΓΑΣΙΑΣκάριΚαι μετά χρησιμοποιείτε τα παραπάνωSQLΕρώτημα δήλωσης, θα διαπιστώσετε ότι η τιμή της μεταβλητής δέσμευσης παραμένει«ΧΑΧΑΧΑΧΑ»,Αυτό συμβαίνει επειδή όταν η μεταβλητή δέσμευσης πιάνεται, υπάρχει ένας συγκεκριμένος κανόνας:

1Περιέχουν δεσμευτικές μεταβλητέςτετραγωνικάΌταν η δήλωση αναλύεται σκληρά

δύοΌταν περιέχει μεταβλητές bindτετραγωνικάΌταν η δήλωση εκτελείται επανειλημμένα με μαλακή ανάλυση ή μαλακή ανάλυση,SQLΗ συγκεκριμένη τιμή εισαγωγής της μεταβλητής σύνδεσης στη δήλωση μπορεί επίσης να είναιΜΑΝΤΕΙΟΛήψη, εκτός από αυτήν τη λειτουργία λήψης από προεπιλογή

Σιωπηρή παράμετρος_cursor_bind_capture_intervalΕπιρροή, προεπιλογήΧρειάζεστε διάστημαδεκαπέντε900Τα δευτερόλεπτα θα γίνονται μία φορά σε λίγα λεπτά

SQL> exec: ΟΝΟΜΑ: = 'kerry'

Η διαδικασία PL / SQL ολοκληρώθηκε με επιτυχία.

SQL> /

ΟΝΟΜΑ ID

---------- --------------------------------

1000 κερί

SQL>

μέθοδοςδύο:Ρωτώwrh $ _sqlstat

Σε $ SQLΣεBIND_DATAΠεδίο ότανSQLΌταν αναλυθεί, θα τοποθετηθείBIND_DATAΣτο πεδίο, τελικά θα σωθείwrh $ _sqlstat. επίwrh $ _sqlstatΗ εισαγωγή έχει ως εξής:

wrh $ _sqlstat περιέχει ένα ιστορικό για στατιστικά στοιχεία εκτέλεσης SQL και αποθηκεύει στιγμιότυπα προβολής v $ sql.

wrh $ _sqlstatΗ μέση αποθήκευση είναισε $ sqlΤο ιστορικό του στιγμιότυπου των στατιστικών εκτέλεσης, από εδώ μπορείτε να ρωτήσετε την τιμή ορισμένων ιστορικών μεταβλητών δέσμευσης, αλλά είναι επίσης δυνατόσε $ sqlΟι πληροφορίες στιγμιότυπου δεν καταγράφονται (εάν πληρούνται οι προϋποθέσεις που πρέπει να ληφθούν;). Όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης

SQL> select dbms_sqltune.extract_bind(bind_data, 1).value_string
 2 from wrh$_sqlstat
 3 where sql_id='0r7m5jyz9ng09'
 
no rows selected

clip_image002

Όπως φαίνεται στην παραπάνω δοκιμή, αυτή η μέθοδος απόκτησης της τιμής της δεσμευμένης μεταβλητής έχει ορισμένα ελαττώματα, είναι πιθανόΣε $ SQLΟι πληροφορίες στιγμιότυπου δεν καταγράφονται, με αποτέλεσμαwrh $ _sqlstat

Δεν ήταν δυνατή η εύρεση των αντίστοιχων πληροφοριών.

Σημειώστε ότι εάν υπάρχει1Δεσμευτικές τιμές, μπορείτε να χρησιμοποιήσετε το ακόλουθο ερώτημα

select dbms_sqltune.extract_bind(bind_data, 1).value_string 
 
from wrh$_sqlstat
 
where sql_id = '1t2r2p48w4p0g'

Αν υπάρχειδύοΔεσμευτικές τιμές, μπορείτε να χρησιμοποιήσετε το ακόλουθο ερώτημα

select dbms_sqltune.extract_bind(bind_data, 1).value_string||
'
'--'||dbms_sqltune.extract_bind(bind_data, 2).value_string
 
 from wrh$_sqlstat
 
 where sql_id = '1t2r2p48w4p0g'

Εάν υπάρχουν πολλές μεταβλητές δέσμευσης, χρησιμοποιήστε κάτι σαν το ακόλουθοSQL

select dbms_sqltune.extract_bind(bind_data, 1).value_string
 ||'-'|| dbms_sqltune.extract_bind(bind_data, 2).value_string 
 ||'-'|| dbms_sqltune.extract_bind(bind_data, 3).value_string 
 ||'-'|| dbms_sqltune.extract_bind(bind_data, 4).value_string 
 ||'-'|| dbms_sqltune.extract_bind(bind_data, 5).value_string 
 ||'-'|| dbms_sqltune.extract_bind(bind_data, 6).value_string
from wrh$_sqlstat
where sql_id = '1t2r2p48w4p0g'
/

μέθοδος3:v $ sql_bind_capture

χρήσηV $ SQL_BIND_CAPTUREΥπάρχουν ορισμένοι περιορισμοί για τη λήψη της τιμής μιας μεταβλητής bind:

1,σε περίπτωσηΣΤΑΤΙΣΤΙΚΑ_LEVELΟριστεί σεΒΑΣΙΚΟΣ, η σύλληψη της δεσμευμένης μεταβλητής θα κλείσει (Η δέσμευση δεσίματος απενεργοποιείται όταν η παράμετρος αρχικοποίησης STATISTICS_LEVEL έχει οριστεί σε BASIC.

δύοΗ προεπιλογή είναι900Το Seconds καταγράφει την τιμή της δεσμευμένης μεταβλητής μία φορά, κατά_cursor_bind_capture_intervalΈλεγχος παραμέτρων.

3V $ SQL_BIND_CAPTUREΟι μεταβλητές δέσμευσης που καταγράφονται στην προβολή είναι σωστές μόνοΠΟΥΗ δέσμευση πίσω από την κατάσταση συλλαμβάνεται, η οποία πρέπει να ληφθεί μέριμνα.

ΓιαDMLλειτουργικός,V $ SQL_BIND_CAPTUREΔεν είναι δυνατή η λήψη της τιμής της δεσμευμένης μεταβλητής.

SQL> COL NAME FOR A12
SQL> COL DATATYPE_STRING FOR A24
SQL> COL VALUE_STRING FOR A32
SQL> SELECT NAME, 
 2 DATATYPE_STRING, 
 3 VALUE_STRING, 
 4 MAX_LENGTH, 
 5 LAST_CAPTURED 
 6 FROM V$SQL_BIND_CAPTURE 
 7 WHERE SQL_ID = '1t2r2p48W4P0g' 
 
NAME DATATYPE_STRING VALUE_STRING MAX_LENGTH LAST_CAPT
------------ ------------------------ -------------------------------- ---------- ---------
:NAME NVARCHAR2(128) KD 128 04-SEP-17
 
SQL> 

v $ sql_bind_captureΠροβολή, μπορείτε να δείτε τη μεταβλητή σύνδεσης, αλλά αυτή η προβολή δεν είναι πολύ ισχυρή, μόνο η τιμή της μεταβλητής σύνδεσης της τελευταίας εγγραφής μπορεί να καταγραφεί. Και το διάστημα μεταξύ δύο λήψεων είναι επίσης μια σιωπηρή παράμετρος._cursor_bind_capture_intervalέλεγχος. Η προεπιλογή είναι900Η λήψη δεν θα επανεκκινηθεί παρά μετά από ένα δευτερόλεπτο. σε900Στο εσωτερικό, η αλλαγή στην τιμή της δεσμευμένης μεταβλητής δεν θα αντικατοπτρίζεται σε αυτήν την προβολή. Αυτό μεσε $ sqlΗ λήψη των μεταβλητών τιμών είναι η ίδια.

SQL> EXEC: ΟΝΟΜΑ: = 'kerry'

Η διαδικασία PL / SQL ολοκληρώθηκε με επιτυχία.

SQL> /

ΟΝΟΜΑ ID

---------- --------------------------------

1000 κερί

SQL>

Όπως φαίνεται παραπάνω, αντιστοιχίζω μια νέα τιμή στη μεταβλητή και μετά την εκτελώ ξανά μία φορά, εκτελείτε τα παραπάνωSQL, βρείτε την τιμή της μεταβλητής σύνδεσηςκάριΗ προηγούμενη τιμήΚΔΔεν μπορώ να το βρω. Άρα αυτό είναι επίσης περιορισμός αυτής της άποψης.(Σημειώστε ότι τα αποτελέσματα των πειραματικών αποτελεσμάτων μπορεί επίσης να είναιΚΔ, ανάλογα με το χρονικό διάστημα του πειράματος και τις έμμεσες παραμέτρους_cursor_bind_capture_intervalΗ τιμή σχετίζεται)

clip_image003

Αυτή η προβολή μπορεί να συνδεθεί με V $ SQLAREA στις (HASH_VALUE, ΔΙΕΥΘΥΝΣΗ) και με Σε $ SQL στις (HASH_VALUE, ΠΑΙΔΙ_ΔΙΑΔΙΚΑΣΙΑ).

--
SET PAUSE ON
SET PAUSE 'Press Return to Continue'
SET PAGESIZE 60
SET LINESIZE 300
 
COLUMN sql_text FORMAT A120
COLUMN sql_id FORMAT A13
COLUMN bind_name FORMAT A10
COLUMN bind_value FORMAT A26
 
SELECT
 sql_id,
 t.sql_text sql_text, 
 b.name bind_name,
 b.value_string bind_value
FROM
 v$sql t
JOIN
 v$sql_bind_capture b using (sql_id)
WHERE
 b.value_string is not null
AND
 sql_id='&sqlid'
/
 
 
SELECT
 b.sql_id,
 t.sql_text sql_text, 
 b.name bind_name,
 b.value_string bind_value
FROM
 v$sql t
JOIN
 v$sql_bind_capture b on t.hash_value = b.hash_value and t.child_address = b.child_address
WHERE
 b.value_string is not null
AND
 b.sql_id='&sqlid'
/

μέθοδος4: Προβολή ερωτήματοςDBA_HIST_SQLBIND.

DBA_HIST_SQLBINDΕίναι η θέαV $ SQL_BIND_CAPTUREΙστορικό στιγμιότυπο.Έτσι από την άποψηDBA_HIST_SQLBINDΜπορεί να βρει την τιμή πολλαπλών μεταβλητών δέσμευσης. Αλλά υπάρχει ακόμα ένα πρόβλημα εδώ, δηλαδή, είναι πιθανό το ιστορικό στιγμιότυπο να μην έχει καταγραφεί.DBA_HIST_SQLBINDκάτω από. Όπως φαίνεται στην ακόλουθη δοκιμή:

SELECT SNAP_ID, 
 NAME, 
 POSITION, 
 VALUE_STRING, 
 LAST_CAPTURED, 
 WAS_CAPTURED 
FROM DBA_HIST_SQLBIND 
WHERE SQL_ID = '&SQL_ID' 
 AND SNAP_ID = &SNAP_ID 
 
 
 
 
SELECT SNAP_ID, 
 NAME, 
 POSITION, 
 VALUE_STRING, 
 LAST_CAPTURED, 
 WAS_CAPTURED 
FROM DBA_HIST_SQLBIND 
WHERE SQL_ID = '&SQL_ID'

SQL> SELECT SNAP_ID, 
 2 NAME, 
 3 POSITION, 
 4 VALUE_STRING, 
 5 LAST_CAPTURED, 
 6 WAS_CAPTURED 
 7 FROM DBA_HIST_SQLBIND 
 8 WHERE SQL_ID = '&SQL_ID'
Enter value for sql_id: 1t2r2p48w4p0g
old 8: WHERE SQL_ID = '&SQL_ID'
new 8: WHERE SQL_ID = '1t2r2p48w4p0g'
 
no rows selected
 
SQL> exec dbms_workload_repository.create_snapshot()
 
PL/SQL procedure successfully completed.
 
SQL> SELECT SNAP_ID, 
 2 NAME, 
 3 POSITION, 
 4 VALUE_STRING, 
 5 LAST_CAPTURED, 
 6 WAS_CAPTURED 
FROM DBA_HIST_SQLBIND 
 7 8 WHERE SQL_ID = '&SQL_ID'
Enter value for sql_id: 1t2r2p48w4p0g
old 8: WHERE SQL_ID = '&SQL_ID'
new 8: WHERE SQL_ID = '1t2r2p48w4p0g'
 
no rows selected
 
SQL> 

clip_image004

μέθοδος5:dbms_xplan.display_cursor

sql_id: Καθορίζεται στο σχέδιο εκτέλεσης προσωρινής μνήμης βιβλιοθήκηςSQLΟ γονικός δρομέας της δήλωσης. Η προεπιλογή είναιμηδενικό. Η τελευταία γραμμή της τρέχουσας περιόδου λειτουργίας κατά τη χρήση της προεπιλεγμένης τιμής

SQLΤο σχέδιο εκτέλεσης της δήλωσης θα επιστραφεί. Μπορεί να ερωτηθείΣε $ SQLήV $ SQLAREAτουSQL_IDΣτήλη για λήψηSQLΔήλωσηSQL_ID

παιδί_ αριθμόςΚαθορίζει τον αριθμό ακολουθίας του θυγατρικού δρομέα κάτω από τον γονικό δρομέα. Δηλαδή, επιστρέφεται το καθορισμένο σχέδιο εκτέλεσης.SQLΟ θυγατρικός δρομέας της δήλωσης. Η προεπιλογή είναι0. Ανμηδενικό

Επειταsql_idΌλοι οι θυγατρικοί δρομείς κάτω από τον γονικό δρομέαΤο σχέδιο εκτέλεσης θα επιστραφεί.

μορφή έλεγχοςSQLΗ δήλωση εκτελεί το τμήμα εξόδου του σχεδίου, δηλαδή ποια μπορεί να εμφανιστεί και ποια όχι.

select * from table(dbms_xplan.display_cursor('1t2r2p48w4p0g', 0, 'ADVANCED'))
 
 
-------------------------------------
SELECT * FROM TEST WHERE NAME=:NAME
 
Plan hash value: 1357081020
 
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 3 (100)| |
|* 1 | TABLE ACCESS FULL| TEST | 1 | 31 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
 
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
 
 1 - SEL$1 / root@xxxxx$1
 
Outline Data
-------------
 
 /*+
 BEGIN_OUTLINE_DATA
 IGNORE_OPTIM_EMBEDDED_HINTS
 OPTIMIZER_FEATURES_ENABLE('11.2.0.1')
 DB_VERSION('11.2.0.1')
 ALL_ROWS
 OUTLINE_LEAF(@'SEL$1')
 FULL(@'SEL$1' 'TEST'@'SEL$1')
 END_OUTLINE_DATA
 */
 
Peeked Binds (identified by position):
--------------------------------------
 
 1 - :NAME (VARCHAR2(30), CSID=873): 'KKK'
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
 1 - filter('NAME'=:NAME)
 
Column Projection Information (identified by operation id):
-----------------------------------------------------------
 
 1 - 'TEST'.'ID'[NUMBER,22], 'NAME'[VARCHAR2,32]

μέθοδος6:10046Μεταβλητή δέσμευσης συμβάντων

Ηλικία συνεδρία ορίστε το συμβάν ίχνους 10046 για πάντα, επίπεδο 4 '- επίπεδο = 4Ενδείξεις ενεργοποιημένεςSQL_TRACEΚαι καταγράψτε τις μεταβλητές bind στο αρχείο παρακολούθησης.

Το πείραμα παραλείπεται εδώ, στην πραγματικότητα ORACLE seq $ table ενημέρωση συχνής περίπτωσης ανάλυσης Έχει δείξει πώς να το χρησιμοποιήσετε10046Το συμβάν καταγράφει την τιμή της δεσμευμένης μεταβλητής. Επιπλέονv $ sql, v $ sql_bind_capturedba_hist_sqlbindΜπορεί να καταγράψει μόνο ερωτήματαSQL (Ακριβώς, μόνοΠΟΥΔεσμευτικές μεταβλητές μετά την καταγραφή των συνθηκών)Δεσμευτική μεταβλητή, αλλά10046Μπορεί επίσης να συλλάβειDMLτουSQLαξία

Τέλος, εάν είναι απαραίτητο, μπορείτε να περάσετετροποποιήστε το σύνολο συστήματος «_cursor_bind_capture_interval» = 10Τροποποιήστε το χρονικό διάστημα για τη δέσμευση της μεταβλητής δέσμευσης.

ΤΟΥ: Xiaoxiang ερημίτης Πηγή: http://www.cnblogs.com/kerrycode/





Σχετικά με μένα

.................................................. .................................................. .........................................

● συγγραφέας: σιτάρι γρασίδι, μέρος του περιεχομένου της συζήτησης από το δίκτυο, εάν η παράβαση επικοινωνήστε με τα σπορόφυτα σίτου που διαγράφηκαν

● Αυτό το άρθρο βρίσκεται στο itpub ( http://blog.itpub.net/26736162/abstrak/1/ ), κήπος blog ( http://www.cnblogs.com/lhrbest ) και προσωπικός δημόσιος αριθμός WeChat ( xiaomaimiaolhr ) έχει μια σύγχρονη ενημέρωση

● Αυτό το άρθρο είναι η διεύθυνση του itpub: http://blog.itpub.net/26736162/abstrak/1/

● Αυτή η διεύθυνση πάρκου ιστολογίου: http://www.cnblogs.com/lhrbest

● Αυτή η έκδοση του άρθρου pdf, το προσωπικό προφίλ και η διεύθυνση δίσκου cloud seedling σίτου: http://blog.itpub.net/26736162/viewspace-1624453/

● Γραπτές ερωτήσεις και απαντήσεις σε συνέντευξη δοκιμής βάσης δεδομένων: http://blog.itpub.net/26736162/viewspace-2134706/

● Η κύρια διεύθυνση DBA Collection σήμερα: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

.................................................. .................................................. .........................................

● Αριθμός ομάδας QQ: 230161599 (γεμάτος) 、 618766405

● Ομάδα WeChat: Μπορώ να προσθέσω το WeChat μου, θα τραβήξω όλους στην ομάδα, εάν είστε το ένα.

● Επικοινωνήστε μαζί μου, προσθέστε φίλους QQ646634621, αναφέροντας τον λόγο της προσθήκης

● Στις 2017-09-01 09:00 ~ 2017-09-30 22:00 Ολοκληρώθηκε στο Magic

● Το περιεχόμενο του άρθρου προέρχεται από τις σημειώσεις μελέτης των δενδρυλλίων σίτου, μερικές από τις οποίες οργανώνονται από το Διαδίκτυο. Εάν υπάρχει παραβίαση ή ανάρμοστη, κατανοήστε.

● Πνευματικά δικαιώματα, καλώς ήλθατε να μοιραστείτε αυτό το άρθρο, διατηρήστε την πηγή

.................................................. .................................................. .........................................

Μικρό κατάστημα σποροφύτων σίτου: https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

Σειρά βάσης δεδομένων που εκδόθηκε από σπορόφυτα σίτου: http://blog.itpub.net/26736162/viewspace-2142121/

.................................................. .................................................. .........................................

χρήση Πελάτης WeChat Σαρώστε τον κωδικό QR παρακάτω για να ακολουθήσετε τον δημόσιο αριθμό σποροφύτων σίτου WeChat ( xiaomaimiaolhr ) και ομάδα QQ (Συλλογή DBA),Μάθετε την πιο πρακτική τεχνολογία βάσεων δεδομένων.

WeChat δημόσιος αριθμός σπορόφυτων σίτου DBA συλλογή σποροφύτων σιταριού QQ ομάδα 1Σπορόφυτο σίτουΣυλλογή DBAQQ ομάδα 2Μικροπωλείο σποροφύτων σίτου

.................................................. .................................................. .........................................

ico_mailme_02.png
DBA 1
DBA 2
εικόνα



Από το «Ιστολόγιο ITPUB», σύνδεσμος: http://blog.itpub.net/26736162/viewspace-2144519/, εάν πρέπει να επανεκτυπώσετε, αναφέρετε την πηγή, διαφορετικά θα θεωρηθεί υπεύθυνη.