常用SQL
查询回收站内容,大于20则需要清理
SELECT count(1) FROM dba_recyclebin;
清理回收站所有内容
purge dba_recyclebin;
查询所有表空间
SELECT 'RESULT='||df.tablespace_name "Tablespace",df.bytes/(1024*1024) "Total Size(MB)", sum(fs.bytes)/(1024*1024) "Free Size(MB)", round(sum(fs.bytes)*100/df.bytes) "% Free", round((df.bytes-sum(fs.bytes))*100/df.bytes) "% Used" FROM (SELECT a.bytes,a.tablespace_name FROM dba_free_space a UNION ALL SELECT b.BYTES_FREE,b.tablespace_name FROM V$TEMP_SPACE_HEADER b )fs, (SELECT tablespace_name, sum(bytes) bytes FROM dba_data_files GROUP BY tablespace_name UNION ALL SELECT tablespace_name, SUM(bytes) total FROM dba_temp_files GROUP BY tablespace_name) df WHERE fs.tablespace_name = df.tablespace_name GROUP BY df.tablespace_name, df.bytes;
查询某个表空间被谁占用
SELECT * FROM (SELECT owner,segment_name, sum(bytes)/1024/1024 Mbytese FROM dba_segments WHERE tablespace_name IN('CBS_DEFAULT_DAT') GROUP BY owner,segment_name ORDER BY Mbytese DESC ) WHERE rownum<=10;
统计信息定时任务是否正常,结果数大于 0则表明正常
SELECT count(1) FROM dba_autotask_job_history a WHERE a.client_name='auto optimizer stats collection' AND job_status='SUCCEEDED' AND a.window_start_time >=sysdate-2;
检查SQL是否绑定变量
SELECT substr(sql_text, 1, 40) "SQL", count(*), sum(executions) "TotExecs" FROM v$sqlarea WHERE executions < 5 GROUP BY substr(sql_text, 1, 40) HAVING count(*) > 30 ORDER BY 2 DESC;
SQL返回查询时间超过5秒的SQL
SELECT p.spid, s.sid, s.last_call_et, s.machine, s.program, s.terminal, w.event,q.sql_text FROM v$process p, v$session s, v$sqltext q, v$session_wait w WHERE p.addr = s.paddr AND s.sql_address = q.address AND s.STATUS = 'ACTIVE' AND p.background IS NULL AND s.sid = w.sid AND s.last_call_et > 5 ORDER BY s.last_call_et DESC, s.sid, q.piece;
检查分区表是否存在全局索引,如果查询返回纪录,则表明建立了全局索引,需要重新建立为本地索引或者全局分区索引
SELECT a.owner, a.table_name, a.index_name, a.partitioned, a.STATUS FROM dba_indexes a, dba_part_tables b WHERE a.table_name = b.table_name AND a.owner NOT IN ('SYS', 'SYSTEM') AND a.partitioned <> 'YES';
检查业务对象并行度设置
SELECT owner, object_name, degree FROM (SELECT a.owner, a.table_name object_name, a.degree FROM dba_tables a WHERE trim(a.degree) > '1' UNION ALL SELECT a.owner, a.index_name object_name, a.degree FROM dba_indexes a WHERE trim(a.degree) > '1' ) b WHERE b.owner NOT IN ('SYS', 'SYSTEM', 'SYSMAN', 'MGMT_VIEW') AND b.owner NOT IN (SELECT c.username FROM dba_users_with_defpwd c);
设置索引并行度为1
ALTER INDEX IDX_NAME noparallel;
设置表并行度为1
ALTER TABLE TABLE_NAME noparallel;
检查非正常的job
SELECT JOB,SCHEMA_USER,WHAT FROM dba_jobs WHERE broken='Y';
修复job:检查Oracle告警日志,分析job失败的原因。 找出对应的job号后(如20),用以下命令将其的broken改为N
exec dbms_job.broken(20,false);
检查是否存在失效对象
SELECT t.owner, t.object_type, t.object_name, t.STATUS FROM dba_objects t WHERE t.STATUS = 'INVALID' --如果没用,建议删除。 --如果有用,则需要重新编译。 --重编译对象 ALTER object_type object_owner.object_name compile; --重编译用户 execute dbms_utility.compile_schema(schema => '',compile_all => false); --重编译数据库 @?/rdbms/admin/utlrp.sql
在线创建索引
CREATE INDEX index_name ON table_name(col_name) tablespace tablespace_name online;
并行创建索引(如果分在线创建,请将online参数去掉)
CREATE INDEX index_name ON table_name(col_name) parallel 4 tablespace tablespace_name online; ALTER INDEX index_name noparallel;
在线重建索引
expdp sysdb/sys_db1 dumpfile=sysdb_expdb20120415.dmp directory=dpump_dir logfile=sysdb.log EXCLUDE=TABLE:\"IN\(\'MDSP_CDR\',\'T_BME_TASKRUNRESULT\',\'TB_INTERACTLOG\'\)\"
导出数据排除某些表
expdp sysdb/sys_db1 dumpfile=sysdb_expdb20120415.dmp directory=dpump_dir logfile=sysdb.log EXCLUDE=TABLE:\"IN\(\'MDSP_CDR\',\'T_BME_TASKRUNRESULT\',\'TB_INTERACTLOG\'\)\";
单表导入导出
expdp sysdb/sysdb TABLES=TB1 directory= dpump_dir dumpfile=sysdb_tb_mobileno.dmp impdp sysdb/sysdb t directory=dpump_dir dumpfile= dumpfile=sysdb_tb_mobileno.dmp TABLES= TB1;
在不同用户恢复表数据
expdp sysdb/sys_db1 directory=dmpdir content=ALL DUMPFILE=Tcategory_Relation.dmp TABLES=Tcategory_Relation impdp sysdb5/sys_db1 DIRECTORY=dmpdir DUMPFILE=Tcategory_Relation.dmp TABLES=Tcategory_Relation remap_schema=sysdb:sysdb5;
对表转移表空间,需要停业务操作,表重建后索引也要重建
ALTER TABLE table_name move tablespace <new tablespace>; ALTER INDEX index_name rebuild online;
对索引转移表空间
ALTER INDEX PK_MDSP_T_RENTINFO_2 rebuild online tablespace TS_MDSP_IDX;
降低高水位
ALTER TABLE table_name enable row movement; ALTER TABLE table_name shrink space compact; ALTER TABLE table_name shrink space cascade;
收集表的统计信息
exec dbms_stats.gather_table_stats(ownname=>'大写的数据库用户名',tabname=>'大写的表名',degree=>4,cascade=>true,force=>true,no_invalidate=>false);
收集用户的统计信息
exec dbms_stats.gather_schema_stats(ownname=> '大写的数据库用户名',estimate_percent => dbms_stats.AUTO_SAMPLE_SIZE,degree=>4,cascade=>true,force=>true,no_invalidate=>false);
如何检查失效的索引
SELECT a.owner, a.index_name, a.STATUS FROM dba_indexes a WHERE a.STATUS = 'UNUSABLE' UNION ALL SELECT a.index_owner, a.index_name, a.STATUS FROM dba_ind_partitions a WHERE a.STATUS = 'UNUSABLE';
检查失效索引并显示重建语句
SELECT 'alter index '|| a.owner||'.'|| a.index_name || ' rebuild online;' AS rebuild_index_sql FROM DBA_indexes a WHERE a.partitioned <> 'YES' AND ( a.STATUS = 'UNUSABLE') UNION SELECT 'alter index '|| t.index_owner||'.'|| t.index_name || ' rebuild partition ' || t.partition_name || ' online;' AS rebuild_index_sql FROM DBA_ind_partitions t,user_part_indexes n WHERE ( t.STATUS = 'UNUSABLE');
如何恢复删除的数据 ,如果数据被误删除,而且时间不是很长,可以从undo表空间将表数据恢复,请修改为现场的表明和时间
CREATE TABLE table_name_new AS SELECT * FROM table_name AS of timestamp to_timestamp ('2013-03-26 11:00:00','YYYY-MM-DD HH24:MI:SS');
创建snapshot
execute dbms_workload_repository.create_snapshot;
收集AWR报告
@?/rdbms/admin/awrrpt.sql
收集ASH报告
@?/rdbms/admin/ashrpt.sql
查询session历史信息
SELECT * FROM dba_hist_active_sess_history t WHERE t.sample_time > to_date('20130811 070000', 'yyyymmdd hh24miss') AND t.sample_time < to_date('20130811 090000', 'yyyymmdd hh24miss');
检查事务锁
SELECT 'session ' || c.locker || ' lock session ' || c.locked AS "result" FROM ( SELECT a.sid locked, b.sid locker FROM v$lock a, v$lock b WHERE a.request > 0 AND a.id1 = b.id1 AND a.id2 = b.ID2 AND a.type = b.type AND a.addr <> b.addr ) c, v$session d WHERE c.locker = d.sid;
检查锁并显示杀锁语句
SELECT DISTINCT 'kill -9 ' || p.spid || ';' AS "result" FROM ( SELECT a.sid locked, b.sid locker FROM v$lock a, v$lock b WHERE a.request > 0 AND a.id1 = b.id1 AND a.id2 = b.ID2 AND a.type = b.type AND a.addr <> b.addr ) c, v$session d, v$process p WHERE c.locker = d.sid AND d.paddr=p.addr;
清理归档日志操作
--方法一 rman target / crosscheck backup; DELETE obsolete; DELETE expired backup; crosscheck archivelog ALL; DELETE expired archivelog ALL; --方法2 rman target / allocate channel FOR maintenance type disk; DELETE obsolete device type disk;
如何获取SQL的执行计划,从AWR报告中找到想要获取的sql的SQL ID,然后用以下sql获取:
SELECT * FROM TABLE(dbms_xplan.display_cursor('atfwcg8anrykp'));
-
锁表查询的代码有以下的形式: select count(*) from v$locked_object; select * from v$locked_object; 查看哪个表被锁 select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id; 查看是哪个session引起的 select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time; 杀掉对应进程,执行命令: alter system kill session'1025,41'; 其中1025为sid,41为serial#.

浙公网安备 33010602011771号