獲取oracle 系統資料的sql

taogchan發表於2011-03-29
ORACLE  
  特殊  
  Ø               ORACLE只能連線特定資料庫,不能自動掃描資料庫物件。  
   
  Ø               ORACLE表必須用使用者來區別,否則表可能重名。  
   
  Ø               ORACLE不能區別系統表或者是使用者表,因此只能由管理員選擇掃描某些特定使用者的表。  
   
  取得資料庫名的方法  
  只能由使用者指定資料庫,不能自動掃描到特定資料庫伺服器上的所有資料庫。  
   
  取得表的方法  
  儲存資料庫表的系統表檢視主要有:  
   
  DBA_ALL_TABLES  
   
  描述資料庫中所有的物件以及相關的表。  
   
  ALL_ALL_TABLES  
   
  描述資料庫中所有的使用者可以訪問的物件以及相關的表。  
   
  USER_ALL_TABLES  
   
  描述資料庫中當前使用者擁有的物件以及相關的表。  
   
   
  DBA_   TABLES  
   
  描述資料庫中所有相關的表。  
   
  ALL_   TABLES  
   
  描述資料庫中所有的使用者可以訪問的相關的表。  
   
  USER_   TABLES  
   
  描述資料庫中當前使用者擁有的相關的表。  
   
   
  因此,可以從ALL_TABLES中取得隸屬於指定使用者的表:  
   
  SELECT   TABLE_NAME   FROM   SYS.ALL_TABLES   WHERE   OWNER   =   'DBAUDIT';  
   
  取得隸屬於指定表空間的表:  
   
  SELECT   TABLE_NAME   FROM   SYS.ALL_TABLES   WHERE   TABLESPACE_NAME   =   'DBAUDIT';  
   
   
  也可以不指定使用者名稱,從而取得所有的表。  
   
  SELECT   TABLE_NAME   FROM   SYS.ALL_TABLES;  
   
  取得列的方法  
  儲存資料庫表的列屬性的系統表檢視主要有:  
   
  DBA_TAB_COLUMNS  
  描述資料庫中所有的表的列屬性。  
  ALL_TAB_COLUMNS  
  描述資料庫中所有的使用者可以訪問的表的列屬性。  
  USER_TAB_COLUMNS  
  描述資料庫中當前使用者擁有的表的列屬性。  
  ALL_TAB_COLS  
   
  描述資料庫中所有的使用者可以訪問的表的列屬性。  
   
   
  因此,可以從ALL_TAB_COLUMNS中取得隸屬於指定使用者的表:  
  SELECT   COLUMN_NAME   FROM   SYS.ALL_TAB_COLUMNS   WHERE   TABLE_NAME   =   'TASK'   AND   OWNER   =   'DBAUDIT';  
   
  取得檢視的方法  
  儲存資料庫檢視的系統表檢視主要有:  
   
  DBA_VIEWS  
  描述資料庫中所有的檢視的屬性。  
  ALL_VIEWS  
  描述資料庫中所有的使用者可以訪問的檢視的屬性。  
  USER_VIEWS  
   
  描述資料庫中所有的當前使用者擁有檢視的屬性。  
   
   
  因此,可以從ALL_VIEWS中取得隸屬於指定使用者的檢視:  
  SELECT   VIEW_NAME   FROM   SYS.ALL_VIEWS   WHERE   OWNER   =   'DBAUDIT';  
   
  取得儲存過程的方法  
  儲存系統物件的系統表檢視有:  
   
  DBA_OBJECTS  
   
  描述資料庫中所有的物件。  
   
  ALL_OBJECTS  
  描述資料庫中所有的可以訪問的物件。  
  USER_OBJECTS  
   
  描述資料庫中所有的當前使用者擁有的物件。  
   
  SYS_OBJECTS  
   
  描述資料庫中所有的系統物件。?  
   
   
  物件型別有:  
   
  CONSUMER   GROUP  
   
  CONTEXT  
   
  DIRECTORY  
   
  FUNCTION  
   
  INDEX  
   
  INDEX   PARTITION  
   
  INDEXTYPE  
   
  JAVA   CLASS  
   
  JAVA   DATA  
   
  JAVA   RESOURCE  
   
  JAVA   SOURCE  
   
  LIBRARY  
   
  LOB  
   
  MATERIALIZED   VIEW  
   
  OPERATOR  
   
  PACKAGE  
   
  PACKAGE   BODY  
   
  PROCEDURE  
   
  QUEUE  
   
  SEQUENCE  
   
  SYNONYM  
   
  TABLE  
   
  TABLE   PARTITION  
   
  TRIGGER  
   
  TYPE  
   
  TYPE   BODY  
   
  VIEW  
   
   
  因此,取得儲存過程可以用:  
   
  SELECT   OBJECT_NAME   FROM   SYS.ALL_OBJECTS   WHERE   OBJECT_TYPE   =   'PROCEDURE';  
   
  取得隸屬於某個使用者的儲存過程可以用:  
   
  SELECT   OBJECT_NAME   FROM   SYS.ALL_OBJECTS   WHERE   OBJECT_TYPE   =   'PROCEDURE'   AND   OWNER   =   ‘DBAUDIT';  
   
   
  同樣,取得其他的物件也可以用這個方法,包括表,檢視等。  
   
  取得儲存過程內容的方法  
  物件型別為型別、型別體、過程、函式、包、包體,JAVA原始碼的所有物件的原始碼都儲存在幾個系統表檢視中:  
   
  DBA_SOURCE  
   
  儲存所有資料庫物件的原始碼。  
   
  ALL_SOURCE  
  儲存所有可以訪問的資料庫物件的原始碼。  
  USER_SOURCE  
   
  儲存所有當前使用者擁有的資料庫物件的原始碼。  
   
   
  因此,取得儲存過程原始碼的方法:  
   
  SELECT   TEXT   FROM   SYS.ALL_SOURCE   WHERE   NAME   =   ‘XXX'   AND   TYPE   =   ‘PROCEDURE';  
   
  取得函式的方法  
  同上,取得函式可以用:  
   
  SELECT   OBJECT_NAME   FROM   SYS.ALL_OBJECTS   WHERE   OBJECT_TYPE   =   'FUNCTION';  
   
  取得隸屬於某個使用者的函式可以用:  
   
  SELECT   OBJECT_NAME   FROM   SYS.ALL_OBJECTS   WHERE   OBJECT_TYPE   =   'FUNCTION'   AND   OWNER   =   'DBAUDIT';  
   
   
  取得函式內容可以用:  
   
  SELECT   TEXT   FROM   SYS.ALL_SOURCE   WHERE   NAME   =   'XXX'   AND   TYPE   =   'FUNCTION';  
   
  取得觸發器的方法  
  儲存資料庫觸發器的系統表檢視主要有:  
   
  DBA_TRIGGERS  
  描述資料庫中所有的觸發器的屬性。  
  ALL_   TRIGGERS  
  描述資料庫中所有的使用者可以訪問的觸發器的屬性。  
  USER_   TRIGGERS  
   
  描述資料庫中所有的當前使用者擁有觸發器的屬性。  
   
   
  因此,可以從ALL_   TRIGGERS中取得隸屬於指定使用者的觸發器:  
  SELECT   TRIGGER_NAME   FROM   SYS.ALL_TRIGGERS   WHERE   OWNER   =   'DBAUDIT';  
   
   
  取得觸發器內容的方法:  
   
  SELECT   TRIGGER_BODY   FROM   SYS.ALL_TRIGGERS   WHERE   TRIGGER_NAME   =   'XXX';  
   
  取得索引的方法  
  儲存資料庫索引的系統表檢視主要有:  
   
  DBA_INDEXES  
  描述資料庫中所有的索引的屬性。  
  ALL_   INDEXES  
  描述資料庫中所有的使用者可以訪問的索引的屬性。  
  USER_   INDEXES  
   
  描述資料庫中所有的當前使用者擁有索引的屬性。  
   
   
  因此,可以從ALL_   INDEXES中取得隸屬於指定使用者的索引:  
  SELECT   INDEX_NAME,TABLE_NAME   FROM   SYS.ALL_INDEXES   WHERE   OWNER   =   'DBAUDIT';  
   
   
  取得索引相關的列的方法:  
   
  SELECT   COLUMN_NAME   FROM   SYS.ALL_IND_COLUMNS   WHERE   INDEX_NAME   =   'XXX'   AND   TABLE_OWNER   =   'DBAUDIT';  
   
  使用者  
  儲存資料庫使用者的系統表檢視主要有:  
   
  DBA_USERS  
  描述資料庫中所有的使用者的屬性。  
  ALL_USERS  
  描述資料庫中所有的使用者的屬性。  
  USER_USERS  
   
  描述資料庫中當前使用者的屬性。  
   
  因此,可以從ALL_USERS中取得使用者:  
  SELECT   USER_ID,   USERNAME   FROM   SYS.ALL_USERS;  
   
  角色  
  儲存角色的表檢視有:  
   
  DBA_ROLES  
   
  描述資料庫中所有角色。  
   
   
  取得角色方法:  
   
  SELECT   ROLE   FROM   SYS.DBA_ROLES;  
   
  表空間  
  SELECT   TABLESPACE_NAME   FROM   SYS.DBA_TABLESPACES;  
   
  資料檔案  
  SELECT   FILE_NAME,   FILE_ID,   TABLESPACE_NAME   FROM   SYS.DBA_DATA_FILES;  
   
  資料庫連線  
  儲存資料庫連線的系統表檢視主要有:  
   
  DBA_LINKS  
  描述資料庫中所有的連線的屬性。  
  ALL_LINKS  
  描述資料庫中所有的使用者可訪問的連線的屬性。  
  USER_LINKS  
   
  描述資料庫中當前使用者的連線屬性。  
   
   
  因此,可以從DBA_DB_LINKS中取得連線:  
  SELECT     FROM   SYS.DBA_DB_LINKS;  
   
   
  同義詞  
  SELECT     FROM   SYS.ALL_SYNONYMS   WHERE   TABLE_OWNER   =   'DBAUDIT';  
   
  程式包  
  取得程式包可以用:  
   
  SELECT   OBJECT_NAME   FROM   SYS.ALL_OBJECTS   WHERE   OBJECT_TYPE   =   'PACKAGE';  
   
  取得隸屬於某個使用者的程式包可以用:  
   
  SELECT   OBJECT_NAME   FROM   SYS.ALL_OBJECTS   WHERE   OBJECT_TYPE   =   'PACKAGE'   AND   OWNER   =   'DBAUDIT';  
   
   
  取得程式包內容可以用:  
   
  SELECT   TEXT   FROM   SYS.ALL_SOURCE   WHERE   NAME   =   'XXX'   AND   TYPE   =   'PACKAGE';  
   
  程式包體  
  取得程式包體可以用:  
   
  SELECT   OBJECT_NAME   FROM   SYS.ALL_OBJECTS   WHERE   OBJECT_TYPE   =   'PACKAGE   BODY';  
   
  取得隸屬於某個使用者的程式包可以用:  
   
  SELECT   OBJECT_NAME   FROM   SYS.ALL_OBJECTS   WHERE   OBJECT_TYPE   =   'PACKAGE   BODY   '   AND   OWNER   =   'DBAUDIT';  
   
   
  取得程式包內容可以用:  
   
  SELECT   TEXT   FROM   SYS.ALL_SOURCE   WHERE   NAME   =   'XXX'   AND   TYPE   =   'PACKAGE   BODY   ';  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22392018/viewspace-691265/,如需轉載,請註明出處,否則將追究法律責任。

相關文章