Oracle常用知识总结(一)

2014-11-24 15:53:23 · 作者: · 浏览: 5

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

ORA-28000:账户被锁定

因为密码输入错误多次用户自动被锁定.

解决办法: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视图:注意表名使用大写....................

查询oracle中所有用户信息

select * from dba_user;

只查询用户和密码

select username,password from dba_users;

查询当前用户信息

select * from dba_ustats;

查询用户可以访问的视图文本

select * from dba_varrays;

查询数据库中所有视图的文本

select * from dba_views;

查询全部索引

select * from user_indexes;

查询全部表格

select * from user_tables;

查询全部约束

select * from user_constraints;

查询全部对象

select * from user_objects;

查看当前数据库中正在执行的语句,然后可以继续做很多很多事情,例如查询执行计划等等

(1).查看相关进程在数据库中的会话

Select a.sid,a.serial#,a.program, a.status ,

substr(a.machine,1,20), a.terminal,b.spid

from v$session a, v$process b

where a.paddr=b.addr

and b.spid = &spid;

(2).查看数据库中被锁住的对象和相关会话

select a.sid,a.serial#,a.username,a.program,

c.owner, c.object_name

from v$session a, v$locked_object b, all_objects c

where a.sid=b.session_id and

c.object_id = b.object_id;

(3).查看相关会话正在执行的SQL

select sql_text from v$sqlarea where address =

( select sql_address from v$session where sid = &sid );

(1).查看相关进程在数据库中的会话

Select a.sid,a.serial#,a.program, a.status ,

substr(a.machine,1,20), a.terminal,b.spid

from v$session a, v$process b

where a.paddr=b.addr

and b.spid = &spid;

(2).查看数据库中被锁住的对象和相关会话

select a.sid,a.serial#,a.username,a.program,

c.owner, c.object_name

from v$session a, v$locked_object b, all_objects c

where a.sid=b.session_id and

c.object_id = b.object_id;

(3).查看相关会话正在执行的SQL

select sql_text from v$sqlarea where address =

( select sql_address from v$session where sid = &sid );

查询表的结构:表名大写!!

select t.COLUMN_NAME,

t.DATA_TYPE,

nvl(t.DATA_PRECISION, t.DATA_LENGTH),

nvl(T.DATA_SCALE, 0),

c.comments

from all_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 = UPPER('OM_EMPLOYEE_T')

order by t.COLUMN_ID

行列互换:

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);

I