7

क्या कोई भी निम्नलिखित समस्या का कारण बनने के लिए मेरे 12 सी लैपटॉप-इंस्टॉलेशन के साथ क्या गलत हो सकता है, इस बारे में कुछ प्रकाश डाल सकता है?ओरेकल 12 सी में डेटाडर्नी में मेरा plsql कोड क्यों गुम है?

संक्षेप में: सभी कोड मैं अपने स्कीमा में बनाने है और क्रियान्वित किया जा सकता है, लेकिन नहीं देखा जा सकता या संपादित किसी भी आईडीई में, या dba_source के माध्यम से।

सबसे पहले: मैं डीबीए नहीं हूं, और न ही मैं कभी भी रहूंगा, हालांकि मेरे पास कुछ डीबीए-समझ है।
मैं ओरेकल-डेवलपर हूं। तो मैं 12 सी स्थापित करते समय बेवकूफ चीजों के सभी प्रकार कर सकता था।

मैंने अपने लैपटॉप पर ओरेकल डेटाबेस 12 सी एंटरप्राइज़ संस्करण 12.1.0.1.0 64 बिट स्थापित किया है।
1 कंटेनर डेटाबेस।
1 प्लग करने योग्य डेटाबेस।

जब मैं किसी भी आईडीई (पीएल/एसक्यूएल डेवलपर। एसक्यूएल डेवलपर, ...) में अपने प्लग करने योग्य डेटाबेस में लॉग इन करता हूं तो मेरी सभी ऑब्जेक्ट्स पसंद के आईडीई के 'ब्राउज़र' में दिखाई देती हैं।
हालांकि, जब मैं एक plsql- आधारित ऑब्जेक्ट जैसे संकुल/प्रक्रियाओं/कार्यों/प्रकारों को खोलने (स्रोत के स्रोत को खोलने का प्रयास करता हूं), तो मैं नहीं कर सकता।
एक अपवाद ट्रिगर्स है। उन्हें देखा और संपादित किया जा सकता है।
plsql डेवलपर (10.0.5.1710) मुझे बताता है (उदाहरण के लिए): "/ * पैकेज ईआरओ $ यूटीएल का स्रोत उपलब्ध नहीं है * /"
एसक्यूएल डेवलपर (4.0.3.16) बस मुझे दिखाता है: "बनाएं या बदलें"।

वस्तुओं को सामान्य रूप से सामान्य रूप से उपयोग किया जा सकता है।

पहले तो मैंने सोचा था कि
"plsql डेवलपर बस 12C के लिए अभी तक तैयार नहीं है" लेकिन फिर मैंने देखा कि sqldev ही करता है, तो ....

मैं डेटाबेस/datadictionary ही जाँच की।

[email protected]>CREATE OR REPLACE PROCEDURE hi_there 
    2 AS 
    3 BEGIN 
    4 dbms_output.put_line ('Hello World'); 
    5 END; 
    6/ 

Procedure created. 

अब तक तो अच्छा:

मैं एक साधारण प्रक्रिया पैदा करते हैं।
क्या यह अस्तित्व में है, और काम करता है?

[email protected]>exec hi_there 
Hello World 

PL/SQL procedure successfully completed. 

स्पष्ट रूप से यह करता है।

अब, user_objects अपने अस्तित्व के बारे में पता है?

[email protected]>SELECT object_name||' - '||object_type object 
    2 FROM user_objects 
    3 WHERE object_name = 'HI_THERE'; 

OBJECT 
----------------------------------------------------------- 

HI_THERE - PROCEDURE 

1 row selected. 

हाँ! महान!
अब, मुझे अपने स्रोत दिखाने

[email protected]>SELECT * 
    2 FROM user_source 
    3 WHERE name = 'HI_THERE' 
    4 ; 

no rows selected 

मुझे माफ करना? क्या मैंने नाम याद किया?

[email protected]>SELECT * 
    2 FROM user_source 
    3 ; 

no rows selected 

सं।

[email protected]>SELECT DISTINCT 
    2   owner 
    3 FROM dba_source 
    4 order by owner 
    5 ; 

OWNER 
------------------------------- 

APEX_040200 
CTXSYS 
DBSNMP 
DVF 
DVSYS 
FLOWS_FILES 
GSMADMIN_INTERNAL 
LBACSYS 
MDSYS 
OLAPSYS 
ORACLE_OCM 
ORDPLUGINS 
ORDSYS 
OUTLN 
SYS 
SYSTEM 
WMSYS 
XDB 

18 rows selected. 

मैं हार रहा हूँ


नई जानकारी:

मुझे नहीं लगता कि यह समस्या से संबंधित है

dba_source मेरे स्रोत या तो की किसी भी प्रदर्शित नहीं करता है , लेकिन मुझे इसका उल्लेख करना चाहिए था:
यह विंडोज लैपटॉप पर चल रहा है।
विंडोज 8.1 अधिक सटीक होना चाहिए।

@ लालिट
आपको यहां एक बिंदु लगता है।
dbms_metadata सही ढंग से मेरी सभी वस्तुओं का कोड उत्पन्न करता है।

[email protected]>SELECT dbms_metadata.get_ddl ('PROCEDURE' 
    2        ,'HI_THERE' 
    3        ,'ERO' 
    4        )   statement 
    5 FROM dual; 

STATEMENT 
--------------------------------------------------------------- 
    CREATE OR REPLACE EDITIONABLE PROCEDURE "ERO"."HI_THERE" 
AS 
BEGIN 
    dbms_output.put_line ('Hello World'); 
END; 

1 row selected. 

1 लेकिन किसी भी तरह datadictionary विचारों को मेरा कोड नहीं दिख रहा है।

@all
विचारों जांच करते हुए, हर समय इसे weirder हो जाता है।
नीचे का सारांश: dba_source मेरे कोड के अस्तित्व के बारे में नहीं जानता है, लेकिन स्रोत कोड जो dba_source बनाता है !!
लैरी रहस्यमय तरीके से चलता है!

dba_source का स्रोत है:

CREATE OR REPLACE 
VIEW dba_source 
AS 
SELECT OWNER, NAME, TYPE, LINE, TEXT, ORIGIN_CON_ID 
FROM INT$DBA_SOURCE 
; 

सुंदर सीधे आगे: सिर्फ दृश्य INT $ DBA_SOURCE से हर पंक्ति चुनें।
तो, यदि विचारों में कुछ भी गलत है, तो यह इस (या गहरे) में होना चाहिए।

आइए क्वेरी उस दृश्य, प्रणाली के रूप में प्रवेश SYSDBA PDB पर के रूप में
मुझे पता है (क्योंकि स्पष्ट रूप से मेरी ERO खाता दृश्य के इस तरह के सीधे क्वेरी नहीं कर सकता), मुझे पता है, मैं चाहिए कभी नहीं के रूप में लॉग इस तरह, लेकिन, डेटाबेस शुरू कर दिया ;-) तो, मुझे लगता है कि इस कभी नहीं

[email protected]>SELECT s.text 
    2 FROM INT$DBA_SOURCE s 
    3 WHERE s.name = 'HI_THERE' 
    4 ORDER BY s.line 
    5 ; 

no rows selected 

ठीक है, के रूप में उम्मीद। क्योंकि यह मूल रूप से dba_source जैसा ही है।
आईएनटी $ DBA_SOURCE दृश्य क्या करता है?

CREATE OR REPLACE 
VIEW int$dba_source 
    (owner 
    ,name 
    ,type 
    ,type# 
    ,line 
    ,text 
    ,sharing 
    ,origin_con_id 
    ) 
AS 
SELECT u.name 
,  o.name 
,  DECODE(o.type# 
      , 7, 'PROCEDURE' 
      , 8, 'FUNCTION' 
      , 9, 'PACKAGE' 
      ,11, 'PACKAGE BODY' 
      ,12, 'TRIGGER' 
      ,13, 'TYPE' 
      ,14, 'TYPE BODY' 
      ,22, 'LIBRARY' 
      ,87, 'ASSEMBLY' 
      ,'UNDEFINED' 
      ) 
,  o.type# 
,  s.line 
,  s.source 
,  DECODE(bitand(o.flags, 196608) 
      ,65536 , 1 
      ,131072, 1 
      ,0 
      ) 
,  TO_NUMBER(sys_context('USERENV', 'CON_ID')) 
FROM sys."_CURRENT_EDITION_OBJ"  o 
,  sys.source$     s 
,  sys.user$      u 
WHERE o.obj#    = s.obj# 
    AND o.owner#    = u.user# 
    AND ( o.type#   IN (7, 8, 9, 11, 12, 14, 22) 
     OR ( o.type#  = 13 
      AND o.subname IS NULL 
      ) 
     ) 
UNION ALL 
SELECT u.name 
,  o.name 
,  'JAVA SOURCE' 
,  o.type# 
,  s.joxftlno 
,  s.joxftsrc 
,  DECODE(bitand(o.flags, 196608) 
      ,65536 , 1 
      ,131072, 1 
      ,0 
      ) 
,  TO_NUMBER(sys_context('USERENV', 'CON_ID')) 
FROM sys."_CURRENT_EDITION_OBJ"  o 
,  x$joxscd      s 
,  sys.user$      u 
WHERE o.obj#  = s.joxftobn 
    AND o.owner#  = u.user# 
    AND o.type#  = 28 
; 

ठीक है!
मुझे यह मिलता है। तो मूल रूप से उपयोगकर्ताओं से वस्तुओं तक और वहां से स्रोत में शामिल हो जाते हैं।
और फिर ऑब्जेक्ट को किसी प्रकार का होना चाहिए।
शायद मेरी वस्तुओं का 'प्रकार' गलत है?
पहला सवाल क्या,

[email protected]>SELECT u.user# 
    2 FROM sys.user$ u 
    3 WHERE u.name = 'ERO' 
    4 ; 

      USER# 
--------------- 
      111 

1 row selected. 

मैं एक usernumber मिल गया है है मेरे उपयोगकर्ता # इसलिए मैं कर रहा हूँ ...
अब वस्तु मौजूद है, और यदि ऐसा है तो, अपने obj #, प्रकार और SUBNAME क्या है (जहां-खंड में सामान)?

[email protected]>SELECT o.obj# 
    2 ,  o.name 
    3 ,  o.type# 
    4 ,  NVL(o.subname,'<<NULL>>') subname 
    5 FROM sys."_CURRENT_EDITION_OBJ" o 
    6 WHERE o.owner# = 111 
    7 AND o.name = 'HI_THERE' 
    8 ; 

    OBJ# NAME  TYPE# SUBNAME 
------ --------- ----- --------- 
97193 HI_THERE  7 <<NULL>> 

1 row selected. 

हाँ, यह मौजूद है।
और प्रकार/उपनाम संयोजन वह है जो कहां से खंडित है।
तो समस्या sys.source $ में होनी चाहिए।
जाहिर है कि एक स्रोत वितरित नहीं करता है ....

[email protected]>SELECT s.source 
    2 FROM sys.source$ s 
    3 WHERE s.obj# = 97193 
    4 ORDER BY s.line 
    5 ; 

SOURCE 
--------------------------------------------- 
PROCEDURE hi_there 
AS 
BEGIN 
    dbms_output.put_line ('Hello World'); 
END; 

5 rows selected. 

क्या ????
स्रोत वहां है।
मैंने अभी-दृश्य-स्रोत के प्रत्येक भाग को चेक किया है। और यह ठीक से जांचता है।
तो दृश्य के चयन विवरण को मेरी प्रक्रिया का स्रोत बनाना चाहिए।
लेकिन अगर ऐसा होता है, तो दृश्य से चयन करना भी चाहिए।

इसलिए, हालांकि मैं जानता हूँ कि यह नहीं मुझे मेरे sourcecode दे सकते हैं (क्योंकि दृश्य doen't), मैं जांच करेंगे अगर मैं चयन बयान दृश्य का स्रोत है कि से चयन क्या होता है

[email protected]>SELECT SOURCE 
    2 FROM ( 
    3 SELECT u.name  u_name 
    4 ,  o.name  o_name 
    5 ,  DECODE(o.type# 
    6    , 7, 'PROCEDURE' 
    7    , 8, 'FUNCTION' 
    8    , 9, 'PACKAGE' 
    9    ,11, 'PACKAGE BODY' 
10    ,12, 'TRIGGER' 
11    ,13, 'TYPE' 
12    ,14, 'TYPE BODY' 
13    ,22, 'LIBRARY' 
14    ,87, 'ASSEMBLY' 
15    ,'UNDEFINED' 
16    ) 
17 ,  o.type# 
18 ,  s.line 
19 ,  s.source 
20 ,  DECODE(bitand(o.flags, 196608) 
21    ,65536 , 1 
22    ,131072, 1 
23    ,0 
24    ) 
25 ,  TO_NUMBER(sys_context('USERENV', 'CON_ID')) u_env 
26 FROM sys."_CURRENT_EDITION_OBJ"  o 
27 ,  sys.source$     s 
28 ,  sys.user$      u 
29 WHERE o.obj#    = s.obj# 
30 AND o.owner#    = u.user# 
31 AND ( o.type#   IN (7, 8, 9, 11, 12, 14, 22) 
32   OR ( o.type#  = 13 
33    AND o.subname IS NULL 
34   ) 
35  ) 
36 UNION ALL 
37 SELECT u.name 
38 ,  o.name 
39 ,  'JAVA SOURCE' 
40 ,  o.type# 
41 ,  s.joxftlno 
42 ,  s.joxftsrc 
43 ,  DECODE(bitand(o.flags, 196608) 
44    ,65536 , 1 
45    ,131072, 1 
46    ,0 
47    ) 
48 ,  TO_NUMBER(sys_context('USERENV', 'CON_ID')) 
49 FROM sys."_CURRENT_EDITION_OBJ"  o 
50 ,  x$joxscd      s 
51 ,  sys.user$      u 
52 WHERE o.obj#  = s.joxftobn 
53 AND o.owner#  = u.user# 
54 AND o.type#  = 28 
55 ) 
56 WHERE o_name = 'HI_THERE' 
57 ORDER BY line 
58 ; 

SOURCE 
---------------------------------------------------------------------- 

PROCEDURE hi_there 
AS 
BEGIN 
    dbms_output.put_line ('Hello World'); 
END; 

5 rows selected. 

वहाँ कुछ नीदरलैंड के राज्य में सड़ा हुआ :-(

+1

मैं इसे गैर-प्लग करने योग्य डेटाबेस के साथ विंडोज पर 12.1.0.2.0 64-बिट एंटरप्राइज़ संस्करण पर पुन: उत्पन्न नहीं कर सकता। आप वैसे भी 12.1.0.2 तक अपग्रेड करना चाहते हैं - इसमें बहुत अच्छी सुविधाएं और फिक्स हैं और इसे 12.1.0.1 से अधिक लंबे समय तक समर्थित किया जाएगा। मुझे नहीं पता कि इससे आपकी समस्या हल हो जाएगी लेकिन यह कम से कम इसे कम कर सकती है। –

+0

क्या आप मेरे उत्तर में उल्लिखित विकल्प का प्रयास कर सकते हैं। –

+0

क्या आपके पास कोई * _ स्रोत या अन्य समानार्थी शब्द हैं जो गलत जगह पर इंगित कर रहे हैं? (स्ट्रॉस पर क्लचिंग, स्पष्ट रूप से ...) –

उत्तर

1

पिछले हफ्ते मैं भाग्यशाली था कि टॉम क्यटे के साथ बात करने का अवसर प्राप्त हो। और चूंकि वह AskTom से टॉम है, मैंने बस यही किया: मैंने उससे इस समस्या के बारे में पूछा। मैंने समझाया कि मैंने ऊपर क्या लिखा है और उससे पूछा: "मैंने क्या गलत किया?"

और उसका जवाब सादा और सरल था: "शायद कुछ नहीं"। उन्होंने समझाया कि 12.1.0.1 में डेटाडिन दृश्यों में कुछ कीड़े थीं क्योंकि अचानक उन्हें कंटेनर डेटाबेस से अपने डेटा का हिस्सा और प्लग-इन डेटाबेस से एक हिस्सा प्राप्त करना पड़ा। तो, टॉम ने निष्कर्ष निकाला कि शायद मैं नली कीड़े में से एक में भाग गया।

फिर भी, चूंकि कोई भी इस व्यवहार की पुष्टि नहीं कर सकता है, और चूंकि मैं कभी भी 12.1.0.1 डेटाबेस का उपयोग करने वाला एकमात्र व्यक्ति होने की कल्पना नहीं कर सकता, मुझे लगता है कि ऐसा कुछ होना चाहिए जो इस बग को ध्यान देने योग्य हो।

वैसे भी, अब मुझे आश्वासन दिया गया है कि समस्या शायद उत्पाद के भीतर है, मैं इसे आगे की जांच करना बंद कर दूंगा और 12.1.0.2 तक अपग्रेड कर दूंगा। अब, यदि अपग्रेड समस्या गायब हो जाता है, तो मुझे विश्वास होगा कि यह मेरी 12.1.0.1 मूर्खता को दोहराने के बाद एक हफ्ते बाद फिर से दिखाई नहीं देगा।

संपादित 25/02:

अंतिम सप्ताह के अंत में 12.1.0.1 deinstalled और ठीक उसी चरणों मैं 12.1.0.1 के लिए इस्तेमाल किया निम्नलिखित 12.1.0.2 स्थापित। समस्या चली गई है। तो ऐसा लगता है कि टॉम सही था (एक बार फिर)।

+0

हाय, आपके पास एक ही समस्या है। प्रक्रियाओं, विचारों और कार्यों को बना सकते हैं, निष्पादित कर सकते हैं लेकिन स्रोत नहीं देख सकते हैं (टॉड या डीबीवर के साथ)। हमारे पास ओरेकल 12.1.0.2 का एक नया इंस्टॉल है, लेकिन एक ही समस्या है। क्या आपके पास 12.1.0.2 इंस्टालेशन में कुछ खास है? धन्यवाद – Carra

0

ईमानदारी से है, मैं इस तरह के मुद्दे कभी नहीं सुना है और मैं पुन: पेश नहीं कर सकते। तो, मैं तुम अजीब व्यवहार के लिए कारण नहीं बता सकता।

हालांकि, तथ्य यह है कि आपदेख सकते हैं 210 कोड, अन्य PL/SQL कोड को छोड़कर, मुझे विश्वास है कि user_source व्यू के साथ कोई समस्या हो सकती है। चूंकि ट्रिगर *_source व्यू में शामिल नहीं हैं। मैंने MOS की खोज की, आपकी समस्या से संबंधित कुछ भी फंड नहीं दे सका।

वैकल्पिक अपनी प्रक्रियाओं के लिए स्रोत कोड प्राप्त करने के user_source के लिए, आप कर सकते हैं: प्रयास करें dbms_metadata -

 
select dbms_metadata.get_ddl('PROCEDURE','PROCEDURE_NAME','USERNAME') from dual; 

यह अगर आप कुछ परिणाम प्राप्त देखने के लिए दिलचस्प हो जाएगा।

+0

मैंने मूल पोस्ट के लिए कुछ और जांच की है। आपके प्रश्न का उत्तर सहित। अब तक प्रयास के लिए धन्यवाद। –

संबंधित मुद्दे