1、查看所有表空间大小、剩余量:
select dbf.tablespace_name,
dbf.totalspace "总量(M)",
dbf.totalblocks as 总块数,
dfs.freespace "剩余总量(M)",
dfs.freeblocks "剩余块数",(dfs.freespace / dbf.totalspace)*100"空闲比例"from(select t.tablespace_name,sum(t.bytes)/1024/1024 totalspace,sum(t.blocks) totalblocks
from dba_data_files t
groupby t.tablespace_name) dbf,(select tt.tablespace_name,sum(tt.bytes)/1024/1024 freespace,sum(tt.blocks) freeblocks
from dba_free_space tt
groupby tt.tablespace_name) dfs
where trim(dbf.tablespace_name)= trim(dfs.tablespace_name);2、查看当前用户各表所占表空间
Select Segment_Name,Sum(bytes)/1024/1024From User_Extents GroupBy Segment_Name
3. 使用如下语句查看一下谁在用临时段
SELECT se.username, se.SID, se.serial#, se.sql_address, se.machine, se.program, su.TABLESPACE, su.segtype, su.CONTENTSFROM v$session se, v$sort_usage su
WHERE se.saddr = su.session_addr;
连接数设置、字符集、端口监听、日期格式表被其他用户占用,处理方法
--用于查看数据库锁,诊断锁的来源及类型select object_id,session_id,locked_mode from v$locked_object;select b.owner,b.object_name,l.session_id,l.locked_mode from v$locked_object l, dba_objects b
where b.object_id=l.object_id;--找出数据库的serial#,以备杀死select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t2where t1.session_id=t2.sid orderby t2.logon_time;--杀死该sessionalter system killsession'sid,serial#';
触发器失效
Oracle数据库UserA用户权限丢失及触发器失效解决方法
停止EMS网管服务,保证EMS网管数据库没有被访问使用,然后执行如下步骤;
使用system用户登录数据库(使用sqlplus,PL/SQL Developer,SQL Developer等工具皆可),密码由现场人员输入,执行以下sql:
Select*from DBA_sys_privs where grantee='UserA';
查看UserA用户是否有如下第2步所示的所有权限,如果有则跳过第2步,若没有则继续第2步。
用system用户执行以下sql添加用户权限:
GRANT UNLIMITED TABLESPACETO UserA;GRANTCREATESESSIONTO UserA;GRANTCREATE SEQUENCE TO UserA;GRANTCREATETRIGGERTO UserA;GRANTCREATE CLUSTER TO UserA;GRANTCREATEPROCEDURETO UserA;GRANTCREATETYPETO UserA;GRANTCREATE OPERATOR TO UserA;GRANTCREATETABLETO UserA;GRANTCREATE INDEXTYPE TO UserA;GRANTCREATEVIEWTO UserA;
请用UserA/password登录数据库,执行以下查询:
Select OBJECT_NAME,STATUSFrom user_objects
Where object_type ='TRIGGER'and(object_name ='AAA'OR object_name ='BBB');
如果查询结果中,'AAA'或者object_name ='BBB'为INVALID,则表示触发器已失效,继续执行以下检查步骤。否则忽略后续步骤。
仍旧用UserA/password执行以下查询:
SELECT sequence_name, LAST_NUMBER
FROM user_sequences
WHERE sequence_name ='AAA'or sequence_name ='BBB';
如果查询结果没有'AAA'或者'BBB',则表示序列已经丢失,触发器引用了序列,因此触发器也失效了,需要继续执行后续步骤;
如果查询结果中'AAA'和'BBB'均存在,则忽略后续步骤。
用UserA用户执行以下sql重建序列和触发器:
CREATE SEQUENCE AAA
INCREMENT BY1STARTWITH1
MAXVALUE 99999 MINVALUE 1CYCLE
CACHE 20ORDER;CREATEORREPLACETRIGGER AAA BEFORE INSERTON"AA"FOR EACH ROWDECLARE newID INTEGER;BEGINselect AAA.nextval into newID
from dual;
:new.Id := newID;END;/CREATE SEQUENCE BBB
INCREMENT BY1STARTWITH1
MAXVALUE 99999 MINVALUE 1CYCLE
CACHE 20ORDER;CREATEORREPLACETRIGGER BBB BEFORE INSERTON"BB"FOR EACH ROWDECLARE newID INTEGER;BEGINselect BBB.nextval into newID
from dual;
:new.Id := newID;END;/
重复步骤3,检查触发器状态是否已正常,如已经正常则执行下面的步骤,否则联系开发同事支持。
用UserA用户调用存储过程:
begin
ruleandboxidsequencematch;end;/
重复步骤4,记下序列的LAST_NUMBER值,再执行以下sql:
selectmax(id)from alarmrule;selectmax(id)from alarmbox;
如果序列的当前值大于ID的最大值,就说明存储过程执行成功,至此问题解决。
查询存储过程:
selecttextfrom all_source where owner=userand name='SP_CREATEVIEW';
查询视图:
SET LONG 60000selecttextfrom user_views where view_name ='V_view_name';
在显示不完全的情况下添加:SET LONG 60000 语句