【轉載】Oracle系統表整理+經常使用SQL語句收集

-- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX開頭的絕大部分都是視圖
-- DBA_TABLES意爲DBA擁有的或能夠訪問的全部的關係表。
-- ALL_TABLES意爲某一用戶擁有的或能夠訪問的全部的關係表。
-- USER_TABLES意爲某一用戶所擁有的全部的關係表。
-- 當某一用戶自己就爲數據庫DBA時,DBA_TABLES與ALL_TABLES等價。
-- DBA_TABLES >= ALL_TABLES >= USER_TABLES
-- 須要注意的是在ORACLE數據庫中大小寫是敏感的,而此三表中數據默認都是大寫的,因此在進行查詢的時候注意小寫的數據可能會形成數據沒法查到。html

SELECT * FROM dba_views WHERE view_name LIKE 'DBA%';
SELECT * FROM dba_views WHERE view_name LIKE 'ALL%';
SELECT * FROM dba_views WHERE view_name LIKE 'USER%';
SELECT * FROM dba_views WHERE view_name LIKE 'V_$%'; -- 針對某個實例的視圖
SELECT * FROM dba_views WHERE view_name LIKE 'GV_$%'; -- 全局視圖,針對多個實例環境
SELECT * FROM dba_views WHERE view_name LIKE 'SESSION%';
SELECT * FROM dba_views WHERE view_name LIKE 'INDEX%';

SELECT count(1) FROM dba_tables;
SELECT count(1) FROM all_tables;
SELECT count(1) FROM user_tables;

-- V$/GV$開頭的絕大部分都是V_$/GV_$表的別名linux

SELECT * FROM dba_synonyms WHERE synonym_name LIKE 'V$%';
SELECT * FROM dba_synonyms WHERE synonym_name LIKE 'GV$%';

-- X$沒有對應的X_$sql

SELECT * FROM dba_synonyms WHERE synonym_name LIKE 'X$%';

-- 比較經常使用的DBA開頭的視圖有數據庫

select * from dba_users; --數據庫用戶信息
select * from dba_roles; --角色信息
select * from dba_segments; --表段信息
select * from dba_extents; --數據區信息
select * from dba_objects; --數據庫對象信息
select * from dba_lobs; --lob數據信息
select * from dba_tablespaces; --數據庫表空間信息
select * from dba_data_files; --數據文件設置信息
select * from dba_temp_files; --臨時數據文件信息
select * from dba_rollback_segs; --回滾段信息
select * from dba_ts_quotas; --用戶表空間配額信息
select * from dba_free_space; --數據庫空閒空間信息
select * from dba_profiles; --數據庫用戶資源限制信息
select * from dba_sys_privs; --用戶的系統權限信息
select * from dba_tab_privs; --用戶具備的對象權限信息
select * from dba_col_privs; --用戶具備的列對象權限信息
select * from dba_role_privs; --用戶具備的角色信息
select * from dba_audit_trail; --審計跟蹤記錄信息
select * from dba_stmt_audit_opts; --審計設置信息
select * from dba_audit_object; --對象審計結果信息
select * from dba_audit_session; --會話審計結果信息
select * from dba_indexes; --用戶模式的索引信息

-- 比較經常使用的ALL開頭的視圖有express

select * from all_users; --數據庫全部用戶的信息
select * from all_objects; --數據庫全部的對象的信息
select * from all_def_audit_opts; --全部默認的審計設置信息
select * from all_tables; --全部的表對象信息
select * from all_indexes; --全部的數據庫對象索引的信息
select * from all_tab_comments; --查詢全部用戶的表,視圖等
select * from all_col_comments; --查詢全部用戶的表的列名和註釋.
select * from all_tab_columns; --查詢全部用戶的表的列名等信息(詳細可是沒有備註)

-- 比較經常使用的ALL開頭的視圖有windows

select * from user_objects; --用戶對象信息
select * from user_source; --數據庫用戶的全部資源對象信息
select * from user_segments; --用戶的表段信息
select * from user_tables; --用戶的表對象信息
select * from user_tab_columns; --用戶的表列信息
select * from user_constraints; --用戶的對象約束信息
select * from user_sys_privs; --當前用戶的系統權限信息
select * from user_tab_privs; --當前用戶的對象權限信息
select * from user_col_privs; --當前用戶的表列權限信息
select * from user_col_comments; -- 查詢本用戶的表的列名和註釋
select * from user_role_privs; --當前用戶的角色權限信息
select * from user_indexes; --用戶的索引信息
select * from user_ind_columns; --用戶的索引對應的表列信息
select * from user_cons_columns; --用戶的約束對應的表列信息
select * from user_clusters; --用戶的全部簇信息
select * from user_clu_columns; --用戶的簇所包含的內容信息
select * from user_cluster_hash_expressions; --散列簇的信息

-- 比較經常使用的V$開頭的別名有服務器

select * from v$database; --數據庫信息
select * from v$datafile; --數據文件信息
select * from v$controlfile; --控制文件信息
select * from v$logfile; --重作日誌信息
select * from v$instance; --數據庫實例信息
select * from v$log; --日誌組信息
select * from v$loghist; --日誌歷史信息
select * from v$sga; --數據庫SGA信息
select * from v$parameter; --初始化參數信息
select * from v$process; --數據庫服務器進程信息
select * from v$bgprocess; --數據庫後臺進程信息
select * from v$controlfile_record_section; --控制文件記載的各部分信息
select * from v$thread; --線程信息
select * from v$datafile_header; --數據文件頭所記載的信息
select * from v$archived_log; --歸檔日誌信息
select * from v$archive_dest; --歸檔日誌的設置信息
select * from v$logmnr_contents; --歸檔日誌分析的DML DDL結果信息
select * from v$logmnr_dictionary; --日誌分析的字典文件信息
select * from v$logmnr_logs; --日誌分析的日誌列表信息
select * from v$tablespace; --表空間信息
select * from v$tempfile; --臨時文件信息
select * from v$filestat; --數據文件的I/O統計信息
select * from v$undostat; --Undo數據信息
select * from v$rollname; --在線回滾段信息
select * from v$session; --會話信息
select * from v$transaction; --事務信息
select * from v$rollstat; --回滾段統計信息
select * from v$pwfile_users; --特權用戶信息
select * from v$sqlarea; --當前查詢過的sql語句訪問過的資源及相關的信息
select * from v$sql; --與v$sqlarea基本相同的相關信息
select * from v$sysstat; --數據庫系統狀態信息

-- 比較經常使用的SESSION開頭的視圖有session

select * from session_roles; --會話的角色信息
select * from session_privs; --會話的權限信息

-- 比較經常使用的INDEX開頭的視圖有oracle

select * from index_stats; --索引的設置和存儲信息

-- 僞表,參考oracle 中 dual 詳解:http://blog.csdn.net/ozhouhui/article/details/7935196dom

select * from dual; --系統僞列表信息
select sysdate from dual; --可將Sysdate視爲一個其結果爲當前日期和時間的函數,在任何可使用Oracle函數的地方均可以使用Sysdate。也能夠將它視爲每一個表的一個隱藏的列或僞列。
select current_date from dual; --報告會話的時區中的系統日期。注:能夠設置本身的時區,以區別於數據庫的時區。
select SYSTIMESTAMP from dual; --報告TIMESTAMP數據類型格式的系統日期。

-- 系統權限
-- GRANTEE 接受該權限的用戶名
-- OWNER 對象的擁有者
-- GRANTOR 賦予權限的用戶

SELECT * FROM dba_sys_privs WHERE grantee = 'SYS';
SELECT * FROM dba_sys_privs WHERE grantee = 'CONNECT';
SELECT * FROM dba_sys_privs WHERE grantee = 'RESOURCE';

-- 角色權限
-- 查看某個用戶有哪些角色

select * from dba_role_privs where grantee='SYS';

-- 查看某個角色被賦予了哪些用戶

SELECT * FROM dba_role_privs WHERE granted_role = 'DBA';

-- 對象權限

SELECT * FROM dba_tab_privs;

-- 授予某個用戶某些角色

GRANT connect,resource TO 'USER';
GRANT dba to 'USER'; --給普通用戶授予dba角色時,要從新鏈接才能生效
REVOKE dba to 'USER';

-- 直接授予某個用戶某些權限

GRANT CREATE VIEW TO 'USER';

-- 查看某個系統用戶是否有SYSDBA或者SYSOPER權限
-- oracle:DBA,SYSDBA,SYSOPER三者的區別:http://blog.chinaunix.net/uid-22457844-id-3045741.html

select * from V$PWFILE_USERS;

-- 鎖定、解鎖用戶

SELECT * FROM dba_users WHERE username = 'SCOTT';
ALTER USER SCOTT account LOCK; --鎖定用戶
ALTER USER SCOTT account UNLOCK; --解鎖用戶
COMMIT;

-- oracle10g 修改用戶密碼: http://blog.163.com/benbenfafa_88/blog/static/64930162200972594612972/
-- User Default Password Check in Oracle 11g: http://www.dbform.com/html/2009/673.html

SELECT password FROM dba_users WHERE username = 'SCOTT';
alter user SCOTT identified by new_password; --修改用戶密碼

-- SERVICE_NAMES: http://docs.oracle.com/database/121/REFRN/GUID-AC956707-D568-4F8A-BF2E-99BA41E0A64F.htm#REFRN10194

SELECT * FROM global_name; -- 查看oracle的全局數據庫名
SELECT * FROM v$database; -- 查看數據庫名 show parameter db_name;

-- 數據庫實例名對應着SID
-- SID: http://docs.oracle.com/database/121/LADBI/glossary.htm#LADBI8021
-- linux下在配置oracle環境變量的狀況可使用 echo $ORACLE_SID,若是沒有可使用ps -ef |grep oracle 來查詢,結果中的xxxx就是對應的SID。
-- oracle 2548 1 0 Aug17 ? 00:00:00 ora_pmon_xxxx
-- 在windows環境下,oracle是之後臺服務的方式被管理的,因此看"控制面板->管理工具->服務 裏面的名稱:"OracleServiceORCL",則ORCL就是sid;

SELECT * FROM v$instance; --查看數據庫實例名 show parameter instance_name;
select instance from v$thread;

-- show parameter是oracle的命令,不是標準SQL語句
-- 能夠在sqlplus或者pl/sql dev的命令窗口執行
-- show parameter aaaa;等價於SELECT * FROM v$parameter WHERE name like '%aaaa%';

SELECT * FROM v$parameter WHERE name like '%name%'; --等價於show parameter name;
select * from v$parameter where name like '%db_domain%'; --查詢數據庫域名
select username from all_users where username like '%SCOTT%';
drop user SCOTT cascade;
commit;

-- ERROR at line 1:
-- ORA-01940: cannot drop a user that is currently connected

select 'ALTER SYSTEM KILL SESSION '||''''||SID||','||SERIAL#||''''||';' as KILLER from v$session where username='SCOTT';

-- KILLER
-- ALTER SYSTEM KILL SESSION '363,35';
-- ALTER SYSTEM KILL SESSION '364,51';
commit;

select * from dba_roles where role like '%CONNECT%';
drop role CONNECT;
commit;
select * from dba_tablespaces where tablespace_name like 'EXAMPLE';
drop tablespace EXAMPLE including contents and datafiles cascade constraints ;


-- including contents 刪除表空間中的內容,若是刪除表空間以前表空間中有內容,而未加此參數,表空間刪不掉,因此習慣性的加此參數。
-- including datafiles 刪除表空間中的數據文件。
-- cascade constraints 同時刪除 tablespace 中表的外鍵參照。


-- 如何建立dblink和視圖
-- http://docs.oracle.com/database/121/SQLRF/statements_5006.htm#i2061505
-- 若是須要建立全局 DBLink,則須要先肯定用戶有建立 dblink 的權限:

select * from user_sys_privs where privilege like upper('%DATABASE LINK%');

-- 若是沒有,則須要使用 sysdba 角色給用戶賦權:

grant create public database link to dbusername;

-- 若是建立全局 dblink,必須使用 systm 或 sys 用戶,在 database 前加 public。

create /* public */ database link dblink1
connect to dbusername identified by dbpassword
using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';

-- 建立dblink後,就能夠直接在dblink上建立視圖

create or replace view cptp as (select SJDH from dbusername.cptp@dblink1); drop view cptp;

-- 鎖表查詢SQL

SELECT object_name, machine, s.sid, s.serial#
FROM gv$locked_object l, dba_objects o, gv$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid;

-- 解除鎖表

alter system kill session 'sid, serial#';

-- 備份某個表

create table new_table as select * from old_table;

-- 查看數據庫是否在rac環境的集羣中的

show parameter cluster_database;
select * from v$parameter where name = 'cluster_database';

-- 列操做
-- 增長和修改列不須要加關鍵字COLUMN
-- 刪除單列的話,必定要加COLUMN,刪除多列的時候,不能加COLUMN關鍵字

-- 增長一列

alter table emp4 add test varchar2(10);

-- 修改一列

alter table emp4 modify test varchar2(20);

-- 刪除一列

alter table emp4 drop column test;

-- 增長多列

alter table emp4 add (test varchar2(10),test2 number);

-- 修改多列

alter table emp4 modify (test varchar2(20),test2 varchar2(20));

-- 刪除多列

alter table emp4 drop (test,test2);

-- Windows下以管理員身份啓動數據庫

net start oracleserviceorcl -- 後面的orcl是你安裝的數據庫實例名
net start oracleoradb11g_home1tnslistener --非必須

-- linux下以sysdba用戶登陸,而後啓動數據庫

sqlplus / as sysdba
startup

-- sqlplus登錄方式

sqlplus / as sysdba --以操做系統權限認證的oracle sys管理員登錄

sqlplus /nolog
conn / as sysdba --以操做系統權限認證的oracle sys管理員登錄

sqlplus sys/password@orcl as sysdba --以sys用戶登錄必須使用as sysdba

sqlplus /nolog --不在cmd或者teminal當中暴露密碼的登錄方式
conn sys/password as sysdba

sqlplus --不顯露密碼的方式登錄
Enter user-name:sys
Enter password:password as sysdba --以sys用戶登錄的話 必需要加上as sysdba子句

sqlplus scott/tiger@orcl --非管理員用戶登錄


desc v$database; --查詢v$database數據庫的表結構

 

--在sqlplus中執行sql腳本,下面兩種方式均可以
START file_name
@file_name


--判斷表是否存在,若是存在則刪除

declare
num number;
begin
select count(1) into num from all_tables where TABLE_NAME = 'EMP' and OWNER='SCOTT';
if num=1 then
execute immediate 'drop table EMP';
end if;
end;
/
--建立表
CREATE TABLE EMP
(EMPNO NUMBER(4) NOT NULL,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7, 2),
COMM NUMBER(7, 2),
DEPTNO NUMBER(2));

 


能夠將上述存儲過程加載到每個create table前面。

--ORACLE 判斷序列是否存在,若是存在就刪除

declare
V_NUM number;

BEGIN
----屢次刪除時,每次都將v_num設置成爲0
V_NUM := 0;
----判斷序列 seq_name_1 是否存在(區分大小寫)
select count(0) into V_NUM from user_sequences where sequence_name = 'SEQ_BUSINESS_PROCESS_INDEX_ID';
----若是存在當即刪除
if V_NUM > 0 then
execute immediate 'DROP SEQUENCE SEQ_BUSINESS_PROCESS_INDEX_ID';
end if;
END;


-- 設置sqlplus模式顯示總行數

show pagesize; --查看當前的pagesize
set pagesize 300;

 

-- 設置sqlplus模式顯示行寬度

show linesize; --查看當前的linesize
set linesize 300;

-- 修改安裝目錄glogin.sql文件才能保證以前的設置永久生效

set pagesize 300;
set linesize 300;

-- 刪除表對象

select 'drop table '||segment_name from dba_segments where owner='VPMUSER' and segment_type='TABLE';


-- 建立表對象

select
'create table '||segment_name || ' as select * from '||segment_name ||'@DBLINK'
from dba_segments where owner='VPMUSER' and segment_type='TABLE';

-- 檢查表是否完整導入

select segment_name from dba_segments@aaa where owner='VPMUSER' and segment_type='TABLE'
and (segment_name not like 'BIN$%'
and segment_name not like '%201%')
minus
select segment_name from dba_segments where owner='VPMUSER' and segment_type='TABLE' and segment_name not like 'BIN$%'

--查詢用戶全部表的語句1

select t.table_name,t.comments from user_tab_comments t

--查詢用戶全部表的語句2:

select r1, r2, r3, r5
from (select a.table_name r1, a.column_name r2, a.comments r3
from user_col_comments a),
(select t.table_name r4, t.comments r5 from user_tab_comments t)
where r4 = r1

-- 查找表的全部索引(包括索引名,類型,構成列):

select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 要查詢的表

-- 查找表的主鍵(包括名稱,構成列):

select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'P' and au.table_name = 要查詢的表

-- 查找表的惟一性約束(包括名稱,構成列):

select column_name from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'U' and au.table_name = 要查詢的表

-- 查找表的外鍵(包括名稱,引用表的表名和對應的鍵名,下面是分紅多步查詢):

select * from user_constraints c where c.constraint_type = 'R' and c.table_name = 要查詢的表

-- 查詢外鍵約束的列名:

select * from user_cons_columns cl where cl.constraint_name = 外鍵名稱

-- 查詢引用表的鍵的列名:

select * from user_cons_columns cl where cl.constraint_name = 外鍵引用表的鍵名

-- 查詢表的全部列及其屬性

select t.*,c.COMMENTS from user_tab_columns t,user_col_comments c where t.table_name = c.table_name and t.column_name = c.column_name and t.table_name = 要查詢的表

--備份表數據

create table emp as select * from scott.emp

--還原表數據

insert into emp select * from scott.emp

--查看已經執行過的sql這些是存在共享池中的,用戶名須要大寫,必須具備DBA 的權限

select * from v$sqlarea t where t.PARSING_SCHEMA_NAME in ('用戶名') order by t.LAST_ACTIVE_TIME desc

--ORACLE11G 字符集更改(這裏更改成AL32UTF8)
sqlplus sys as sysdba

--執行下面命令,有可能形成數據庫中已有數據混亂的狀況,因此在進行操做前,要進行數據庫的備份操做

shutdown immediate;
STARTUP MOUNT;
ALTER SESSION SET SQL_TRACE=TRUE;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE character set INTERNAL_USE AL32UTF8;
ALTER SESSION SET SQL_TRACE=FALSE;
shutdown immediate;
startup;

--察看 NLS_LANG 信息:

SELECT parameter, value FROM v$nls_parameters WHERE parameter LIKE '%CHARACTERSET';

UPDATE STAFF
SET MODIFY_TIME = TO_DATE('2016/04/22 00:01:00', 'yyyy/MM/dd hh24:mi:ss')
WHERE MODIFY_TIME < TO_DATE('2016/04/22 00:01:00', 'yyyy/MM/dd hh24:mi:ss');

UPDATE STAFF
SET MODIFY_TIME = TO_TIMESTAMP('19-03-2008 02:36:00.360000', 'dd-MM-yyyy hh24:mi:ss.ff')
WHERE STAFF_ID = '01';

感謝Aloys寒風

原文地址:https://www.cnblogs.com/jiangxinnju/p/5840420.html

2018年1月3日 11:28:49 補充Oracle分區信息

--顯示數據庫全部分區表的信息

SELECT * FROM DBA_PART_TABLES t;

--顯示當前用戶可訪問的全部分區表信息

SELECT * FROM ALL_PART_TABLES t;

--顯示當前用戶全部分區表的信息

SELECT * FROM USER_PART_TABLES t;

--顯示當前用戶全部組合分區表的子分區信息

SELECT * FROM USER_TAB_SUBPARTITIONS t;

--顯示當前用戶可訪問的全部組合分區表的子分區信息

SELECT * FROM ALL_TAB_SUBPARTITIONS t;

--顯示當前用戶可訪問的全部組合分區表的子分區信息

SELECT * FROM ALL_TAB_SUBPARTITIONS t;
相關文章
相關標籤/搜索