1.曾經不小心把開發庫的數據庫表全部刪除,當時嚇的要死。結果找到下面的語句恢復到了1個小時之前的數據!很簡單。
注意使用管理員登錄系統:
select * from 表名 as of timestamp sysdate-1/12
如果drop了表,怎麼辦??見下面:
drop table 表名;
數據庫誤刪除表之後恢復,不過要記得刪除了哪些表名。
flashback table 表名 to before drop;
2.查詢得到當前數據庫中鎖,以及解鎖:
查鎖
SELECT s.username,
decode(l.type,'TM','TABLE LOCK',
'TX','ROW LOCK',
NULL) LOCK_LEVEL,
o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
FROM v$session s,v$lock l,dba_objects o
WHERE l.sid = s.sid
AND l.id1 = o.object_id(+)
AND s.username is NOT NULL;
解鎖
alter system kill session 'sid,serial';
如果解不了。直接倒os下kill進程kill -9 spid
因爲密碼輸入錯誤多次用戶自動被鎖定.
解決辦法:alter user user_name account unlock;
3.關於查詢數據庫用戶,權限的相關語句:
select * from dba_user;
select * from all_users;
select * from user_users;
查看用戶系統權限:
select * from dba_sys_privs;
select * from all_sys_privs;
10.select * from user_sys_privs;
查看用戶對象權限:
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
查看所有角色:
20.select * from dba_roles;
查看用戶所擁有的角色:
select * from dba_role_privs;
select * from user_role_privs;
幾個經常用到的oracle視圖:注意表名使用大寫....................
查詢全部索引
select * from user_indexes;
查詢全部表格
查看當前數據庫中正在執行的語句,然後可以繼續做很多很多事情,例如查詢執行計劃等等
(1).查看相關進程在數據庫中的會話
(1).查看相關進程在數據庫中的會話
查詢表的結構:表名大寫!!
select t.COLUMN_NAME,
行列互換:
Sql代碼
建立一個例子表:
CREATE TABLE t_col_row(
ID INT,
c1 VARCHAR2(10),
c2 VARCHAR2(10),
c3 VARCHAR2(10));
INSERT INTO t_col_row VALUES (1, 'v11', 'v21', 'v31');
INSERT INTO t_col_row VALUES (2, 'v12', 'v22', NULL);
INSERT INTO t_col_row VALUES (3, 'v13', NULL, 'v33');
INSERT INTO t_col_row VALUES (4, NULL, 'v24', 'v34');
INSERT INTO t_col_row VALUES (5, 'v15', NULL, NULL);
INSERT INTO t_col_row VALUES (6, NULL, NULL, 'v35');
INSERT INTO t_col_row VALUES (7, NULL, NULL, NULL);
COMMIT;
下面的是列轉行:創建了一個視圖
CREATE view v_row_col AS
SELECT id, 'c1' cn, c1 cv
FROM t_col_row
UNION ALL
SELECT id, 'c2' cn, c2 cv
FROM t_col_row
UNION ALL
SELECT id, 'c3' cn, c3 cv FROM t_col_row;
下面是創建了沒有空值的一個豎表:
CREATE view v_row_col_notnull AS
SELECT id, 'c1' cn, c1 cv
where c1 is not null
UNION ALL
SELECT id, 'c2' cn, c2 cv
where c2 is not null
UNION ALL
SELECT id, 'c3' cn, c3 cv
where c3 is not null;
Sql代碼
建立一個例子表:
CREATE TABLE t_col_row(
ID INT,
c1 VARCHAR2(10),
c2 VARCHAR2(10),
c3 VARCHAR2(10));
INSERT INTO t_col_row VALUES (1, 'v11', 'v21', 'v31');
INSERT INTO t_col_row VALUES (2, 'v12', 'v22', NULL);
INSERT INTO t_col_row VALUES (3, 'v13', NULL, 'v33');
INSERT INTO t_col_row VALUES (4, NULL, 'v24', 'v34');
INSERT INTO t_col_row VALUES (5, 'v15', NULL, NULL);
INSERT INTO t_col_row VALUES (6, NULL, NULL, 'v35');
INSERT INTO t_col_row VALUES (7, NULL, NULL, NULL);
COMMIT;
下面的是列轉行:創建了一個視圖
CREATE view v_row_col AS
SELECT id, 'c1' cn, c1 cv
FROM t_col_row
UNION ALL
SELECT id, 'c2' cn, c2 cv
FROM t_col_row
UNION ALL
SELECT id, 'c3' cn, c3 cv FROM t_col_row;
下面是創建了沒有空值的一個豎表:
CREATE view v_row_col_notnull AS
SELECT id, 'c1' cn, c1 cv
where c1 is not null
UNION ALL
SELECT id, 'c2' cn, c2 cv
where c2 is not null
UNION ALL
SELECT id, 'c3' cn, c3 cv
where c3 is not null;
建立一個例子表:
CREATE TABLE t_col_row(
ID INT,
c1 VARCHAR2(10),
c2 VARCHAR2(10),
c3 VARCHAR2(10));
INSERT INTO t_col_row VALUES (1, 'v11', 'v21', 'v31');
INSERT INTO t_col_row VALUES (2, 'v12', 'v22', NULL);
INSERT INTO t_col_row VALUES (3, 'v13', NULL, 'v33');
INSERT INTO t_col_row VALUES (4, NULL, 'v24', 'v34');
INSERT INTO t_col_row VALUES (5, 'v15', NULL, NULL);
INSERT INTO t_col_row VALUES (6, NULL, NULL, 'v35');
INSERT INTO t_col_row VALUES (7, NULL, NULL, NULL);
COMMIT;
下面的是列轉行:創建了一個視圖
CREATE view v_row_col AS
SELECT id, 'c1' cn, c1 cv
FROM t_col_row
UNION ALL
SELECT id, 'c2' cn, c2 cv
FROM t_col_row
UNION ALL
SELECT id, 'c3' cn, c3 cv FROM t_col_row;
下面是創建了沒有空值的一個豎表:
CREATE view v_row_col_notnull AS
SELECT id, 'c1' cn, c1 cv
where c1 is not null
UNION ALL
SELECT id, 'c2' cn, c2 cv
where c2 is not null
UNION ALL
SELECT id, 'c3' cn, c3 cv
where c3 is not null;
下面可能是dba經常使用的oracle視圖吧。呵呵
Sql代碼
示例:已知hash_value:3111103299,查詢sql語句:
select * from v$sqltext
where hashvalue='3111103299'
order by piece
查看消耗資源最多的SQL:
SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls
FROM V$SQLAREA
WHERE buffer_gets > 10000000OR disk_reads > 1000000
ORDERBY buffer_gets + 100 * disk_reads DESC;
查看某條SQL語句的資源消耗:
SELECT hash_value, buffer_gets, disk_reads, executions, parse_calls
FROM V$SQLAREA
WHERE hash_Value = 228801498AND address = hextoraw('CBD8E4B0');
查詢sql語句的動態執行計劃:
查詢oracle的版本:
select * from v$version;
查詢數據庫的一些參數:
select * from v$parameter
查找你的session信息
SELECT SID, OSUSER, USERNAME, MACHINE, PROCESS
FROM V$SESSION WHERE audsid = userenv('SESSIONID');
當machine已知的情況下查找session
SELECT SID, OSUSER, USERNAME, MACHINE, TERMINAL
FROM V$SESSION
WHERE terminal = 'pts/tl' AND machine = 'rgmdbs1';
查找當前被某個指定session正在運行的sql語句。假設sessionID爲100
select b.sql_text
from v$session a,v$sqlarea b
where a.sql_hashvalue=b.hash_value and a.sid=100
Sql代碼
示例:已知hash_value:3111103299,查詢sql語句:
select * from v$sqltext
where hashvalue='3111103299'
order by piece
查看消耗資源最多的SQL:
SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls
FROM V$SQLAREA
WHERE buffer_gets > 10000000OR disk_reads > 1000000
ORDERBY buffer_gets + 100 * disk_reads DESC;
查看某條SQL語句的資源消耗:
SELECT hash_value, buffer_gets, disk_reads, executions, parse_calls
FROM V$SQLAREA
WHERE hash_Value = 228801498AND address = hextoraw('CBD8E4B0');
查詢sql語句的動態執行計劃:
查詢oracle的版本:
select * from v$version;
查詢數據庫的一些參數:
select * from v$parameter
查找你的session信息
SELECT SID, OSUSER, USERNAME, MACHINE, PROCESS
FROM V$SESSION WHERE audsid = userenv('SESSIONID');
當machine已知的情況下查找session
SELECT SID, OSUSER, USERNAME, MACHINE, TERMINAL
FROM V$SESSION
WHERE terminal = 'pts/tl' AND machine = 'rgmdbs1';
查找當前被某個指定session正在運行的sql語句。假設sessionID爲100
select b.sql_text
from v$session a,v$sqlarea b
where a.sql_hashvalue=b.hash_value and a.sid=100
示例:已知hash_value:3111103299,查詢sql語句:
select * from v$sqltext
where hashvalue='3111103299'
order by piece
查看消耗資源最多的SQL:
SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls
FROM V$SQLAREA
WHERE buffer_gets > 10000000OR disk_reads > 1000000
ORDERBY buffer_gets + 100 * disk_reads DESC;
查看某條SQL語句的資源消耗:
SELECT hash_value, buffer_gets, disk_reads, executions, parse_calls
FROM V$SQLAREA
WHERE hash_Value = 228801498AND address = hextoraw('CBD8E4B0');
查詢sql語句的動態執行計劃:
查詢oracle的版本:
select * from v$version;
查詢數據庫的一些參數:
select * from v$parameter
查找你的session信息
SELECT SID, OSUSER, USERNAME, MACHINE, PROCESS
FROM V$SESSION WHERE audsid = userenv('SESSIONID');
當machine已知的情況下查找session
SELECT SID, OSUSER, USERNAME, MACHINE, TERMINAL
FROM V$SESSION
WHERE terminal = 'pts/tl' AND machine = 'rgmdbs1';
查找當前被某個指定session正在運行的sql語句。假設sessionID爲100
select b.sql_text
from v$session a,v$sqlarea b
where a.sql_hashvalue=b.hash_value and a.sid=100
樹形結構connect by 排序:
Sql代碼
查詢樹形的數據結構,同時對一層裏面的數據進行排序
SELECT last_name, employee_id, manager_id, LEVEL
下面是查詢結果
LAST_NAME
------------------------- ----------- ---------- ----------
King
Cambrault
Bates
Bloom
Fox
Kumar
Ozer
Smith
De Haan
Hunold
Austin
Ernst
Lorentz
Pataballa
Errazuriz
Ande
Banda
Sql代碼
查詢樹形的數據結構,同時對一層裏面的數據進行排序
SELECT last_name, employee_id, manager_id, LEVEL
下面是查詢結果
LAST_NAME
------------------------- ----------- ---------- ----------
King
Cambrault
Bates
Bloom
Fox
Kumar
Ozer
Smith
De Haan
Hunold
Austin
Ernst
Lorentz
Pataballa
Errazuriz
Ande
Banda
查詢樹形的數據結構,同時對一層裏面的數據進行排序
SELECT last_name, employee_id, manager_id, LEVEL
下面是查詢結果
LAST_NAME
------------------------- ----------- ---------- ----------
King
Cambrault
Bates
Bloom
Fox
Kumar
Ozer
Smith
De Haan
Hunold
Austin
Ernst
Lorentz
Pataballa
Errazuriz
Ande
Banda
有時候寫多了東西,居然還忘記最基本的sql語法,下面全部寫出來,基本的oracle語句都在這裏可以找到了。是很基礎的語句!
Sql代碼
在數據字典查詢約束的相關信息:
SELECT constraint_name, constraint_type,search_condition
FROM
2對錶結構進行說明:
3查看用戶下面有哪些表
4查看約束在那個列上建立:
10結合變量查找相關某個表中約束的相關列名:
12查詢數據字典看中間的元素:
SELECT
FROM
WHERE
OR
14查詢對象類型:
SELECT DISTINCT object_type FROM
17改變對象名:(表名,視圖,序列)
18添加表的註釋:
20查看視圖結構:
23在數據字典中查看視圖信息:
25查看數據字典中的序列:
33得到所有的時區名字信息:
34顯示對時區‘US/Eastern’的時區偏移量
35顯示數據庫時區和會話時區的值:
13普通的建表語句:
CREATE TABLE dept
(deptno
dname
loc
15使用子查詢建立表:
6添加列:// alter table EMP add column (dept_id number(7));錯誤!!
7刪除一列:
8添加列名同時和約束:
9改變列://注意約束不能夠修改 的!!
24增加一行:
5添加主鍵:
11添加一個有check約束的新列:
16刪除表:
19創建視圖:
21刪除視圖:
22找到工資最高的5個人。(top-n分析)(行內視圖)
26建立同義詞:
或者
27建立序列:(注意,這裏並沒有出現說是哪個表裏面的序列!!)
28使用序列:
29建立索引://默認就是nonunique索引,除非使用了關鍵字:unique
30建立用戶:(可能有錯,詳細查看幫助)