Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

java.sql.Connection में होस्ट, पोर्ट, सिड, यूजर और पासवर्ड की जानकारी कैसे प्राप्त करें?

सत्र सिड:

SELECT sys_context('USERENV', 'SID') FROM DUAL;

ORACLE_SID:

SELECT sys_context('userenv','instance_name') FROM dual;

होस्ट (डेटाबेस मशीन):

SELECT UTL_INADDR.get_host_name FROM dual;

पासवर्ड:देखें http://www.dba-oracle.com/t_password_storage.htm

क्लाइंट साइड पोर्ट:

Select port from v$session;

Oracle सर्वर प्रक्रिया का सर्वर OS PID क्लाइंट प्रक्रिया से जुड़ा है

SELECT p.spid
FROM   v$process p, v$session s
WHERE s.paddr = p.addr and 
sys_context('USERENV', 'SID') = s.sid;

सर्वर साइड पोर्ट:

यह वास्तव में कठिन है क्योंकि सर्वर प्रोसेस पोर्ट को एक अलग पोर्ट पर मैप किया जाता है, फिर प्रारंभिक - उदाहरण के लिए पोर्ट 12102 में श्रोता। फ़ायरवॉल को बंद करने की आवश्यकता है और जबकि फ़ायरवॉल के माध्यम से मैपिंग के बाद कनेक्शन नहीं मिल सकते हैं। इसे ठीक किया जा सकता है लेकिन यह एक और कहानी है)

कोड के नीचे

  • आवश्यक विशेषाधिकार प्रदान करता है

  • एक जावा संग्रहीत फ़ंक्शन को परिभाषित करता है "Util.RunThis" जो डेटाबेस सर्वर पर एक ओएस कमांड को फ़ंक्शन और रिटर्न स्ट्रिंग में पारित करता है।

  • "Util.RunThis" को PL/SQL फ़ंक्शन "RUN_CMD" में मैप किया गया है

  • "GET_PORT" एक PL/SQL फ़ंक्शन है जो क्लाइंट सत्र से जुड़े डेटाबेस सर्वर प्रक्रिया के उपयोग किए गए पोर्ट का एक संख्यात्मक मान लौटाता है। GET_PORT के अंदर SELECT का उपयोग डेटाबेस सर्वर प्रोसेस पिड को [SPID] को नीचे कमांड में बदलने के लिए निर्धारित करने के लिए किया जाता है

      /usr/sbin/lsof -Pan -p [SPID] -i
    
  • अंत में एक साधारण चयन का आह्वान करते हुए हमें वर्तमान सत्र से जुड़ी डेटाबेस सर्वर प्रक्रिया का पोर्ट मिलता है

      connect / as sysdba
    
      grant select on sys.v_$process to scott;        
      grant select on sys.v_$session to scott;
    
      begin
        dbms_java.grant_permission
            ('SCOTT',
             'SYS:java.io.FilePermission',
             '<<ALL FILES>>',
             'execute'); 
      end;
      /
    
      connect scott/[email protected]
    
      create or replace and compile java source named "Util"
      as
       import java.io.*;
       import java.lang.*;
       import java.nio.charset.Charset;
       import java.nio.*;
       public class Util extends Object
       {
         public static String RunThis(String args)
         {
           Runtime rt = Runtime.getRuntime();
           String rc = args;
    
           try
           {
    
             Process p = rt.exec(args);
    
             int bufSize = 4096;
             BufferedInputStream bis =
             new BufferedInputStream(p.getInputStream(), bufSize);
             int len;
             byte buffer[] = new byte[bufSize];
    
             // Echo back what the program spit out
             while ((len = bis.read(buffer, 0, bufSize)) != -1)
             {
               String xxx = new String(buffer, Charset.forName("UTF-8"));
               rc = rc + xxx;
             }
             p.waitFor();
    
             rc = rc + "ABC";
    
           }
           catch (Exception e)
           {
             e.printStackTrace();
             rc = "Exception!!!" ;
           }
    
           finally
           {
             return rc;
           }
         }
       }
      /
    
      create or replace function RUN_CMD( p_cmd in varchar2) return VARCHAR2
      as language java
      name 'Util.RunThis(java.lang.String) return java.lang.String';
      /
    
      create or replace function GET_PORT return number
      as
        SPID NUMBER;
        retval varchar2(32000);
        y varchar2(1024);
        cmd VARCHAR2(256);
      begin
        SELECT 
          p.spid 
        INTO 
          SPID
        FROM   
          sys.v_$process p, 
          sys.v_$session s
        WHERE 
          s.paddr = p.addr and 
          sys_context('USERENV', 'SID') = s.sid;
    
        cmd :=  '/usr/sbin/lsof -Pan -p [SPID] -i';
    
        /* raw string data returned from Shell executing cmd */
        retval := run_cmd(replace(cmd,'[SPID]', SPID));
    
        /* get last occurance of : marking redirected port */
        y := substr(retval,INSTR(retval,':', -1)+1,1024);
    
        /* return the numeric port by stripping info like " (ESTABLISHED)" */
        return to_number(substr(y,1,INSTR(y, ' ')-1));
      end;
      /
      show errors
    
      select get_port from dual;
    
      /*-------------------- OUTPUT -------------------------- */
    
      SQL> connect / as sysdba
    
      grant select on sys.v_$process to scott;
    
      grant select on sys.v_$session to scott;
    
      begin
        dbms_java.grant_permission
            ('SCOTT',
             'SYS:java.io.FilePermission',
             '<<ALL FILES>>',
             'execute');
      end;
      /Connected.
      SQL> SQL>
      Grant succeeded.
    
      SQL> SQL>
      Grant succeeded.
    
      SQL> SQL>   2    3    4    5    6    7    8
    
      PL/SQL procedure successfully completed.
    
      SQL> connect scott/[email protected]
    
      Connected.
      SQL> create or replace and compile java source named "Util"
        2  as
       import java.io.*;
       import java.lang.*;
       import java.nio.charset.Charset;
        3    4    5    6   import java.nio.*;
        7   public class Util extends Object
        8   {
        9     public static String RunThis(String args)
         {
           Runtime rt = Runtime.getRuntime();
       10   11   12       String rc = args;
       13
       14       try
       15       {
       16
       17         Process p = rt.exec(args);
    
       18   19         int bufSize = 4096;
       20         BufferedInputStream bis =
       21         new BufferedInputStream(p.getInputStream(), bufSize);
       22         int len;
             byte buffer[] = new byte[bufSize];
       23   24
             // Echo back what the program spit out
             while ((len = bis.read(buffer, 0, bufSize)) != -1)
       25   26   27         {
       28           String xxx = new String(buffer, Charset.forName("UTF-8"));
       29           rc = rc + xxx;
       30         }
             p.waitFor();
       31   32
             rc = rc + "ABC";
    
       33   34   35       }
       36       catch (Exception e)
       37       {
       38         e.printStackTrace();
       39         rc = "Exception!!!" ;
       40       }
       41
       42       finally
       43       {
       44         return rc;
       45       }
         }
       46   47   }
      / 48
    
      Java created.
    
      SQL> create or replace function RUN_CMD( p_cmd in varchar2) return VARCHAR2
      as language java
      name 'Util.RunThis(java.lang.String) return java.lang.String';
      /  2    3    4
    
      Function created.
    
      SQL> create or replace function GET_PORT return number
      as
        SPID NUMBER;
        retval varchar2(32000);
        2    3    4    5    y varchar2(1024);
        cmd VARCHAR2(256);
      begin
        6    7    8    SELECT
          p.spid
        INTO
        9   10   11      SPID
        FROM
          sys.v_$process p,
          sys.v_$session s
        WHERE
       12   13   14   15   16      s.paddr = p.addr and
          sys_context('USERENV', 'SID') = s.sid;
    
        cmd :=  '/usr/sbin/lsof -Pan -p [SPID] -i';
    
       17   18   19   20   21    /* raw string data returned from Shell executing cmd */
        retval := run_cmd(replace(cmd,'[SPID]', SPID));
    
       22   23   24    /* get last occurance of : marking redirected port */
        y := substr(retval,INSTR(retval,':', -1)+1,1024);
    
        /* return the numeric port by stripping info like " (ESTABLISHED)" */
       25   26   27   28    return to_number(substr(y,1,INSTR(y, ' ')-1));
      end;
      /
      show errors 29   30
      Function created.
    
      SQL>
      No errors.
      SQL> select get_port from dual;
    
        GET_PORT
      ----------
           36586
    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पीएल/एसक्यूएल प्रोग्राम को निरस्त करें

  2. java.sql.SQLException:ORA-00904

  3. समानांतर में कई प्रक्रियाओं को चलाएँ/निष्पादित करें - Oracle PL/SQL

  4. क्या डीबीडी ::ओरेकल का उपयोग करके एक ही क्वेरी में एकाधिक कथन निष्पादित करना संभव है?

  5. oci_fetch_array के साथ त्रुटि, php द्वारा ऑरैकल से डेटा पुनर्प्राप्त कर सकता है