Oracle truncate table 与 delete tabel的区别

Posted by TQ on 八月 11th, 2009

一、

1.delete产生rollback,如果删除大数据量的表速度会很慢,同时会占用很多的rollback segments .truncate 是DDL操作,不产生rollback,速度快一些.
  Truncate table does not generate rollback information and redo records so it is much faster than delete.
  In default, it deallocates all space except the space allocated by MINEXTENTS unless you specify REUSE STORAGE clause.
2.不从tablespace中腾出空间,需要
  ALTER TABLESPACE AAA COALESCE; 才有空间
3.truncate 调整high water mark 而delete不.truncate之后,TABLE的HWM退回到 INITIAL和NEXT的位置(默认)
  delete 则不可以。
4.truncate 只能对TABLE
  delete 可以是table,view,synonym
5.TRUNCATE TABLE 的对象必须是本模式下的,或者有drop any table的权限 而 DELETE 则是对象必须是本模式下的,或被授予 DELETE ON SCHEMA.TABLE 或DELETE ANY TABLE的权限

二、 truncate是DDL語言.
delete是DML語言
DDL語言是自動提交的.
命令完成就不可回滾.
truncate的速度也比delete要快得多. 所以,delete 后要commit work,而truncate就不需要啦。

三、 truncate 会把 highwatermark 回归至 0 … 当下一次再插入新资料时就会快一些啦。
所以一般都是在 temp table 上使用的,不过要注意就是 truncate 不能在 pl/sql 上使用,要用 dynamic SQL 才可以。

四、

当你不再需要该表时, 用 drop;
当你仍要保留该表,但要删除所有记录时, 用 truncate;
当你要删除部分记录时(always with a WHERE clause), 用 delete.

五、

1.TRUNCATE TABLE

Index也會刪掉不是指drop index
sys@DEMO> create index

Oracle基本信息检查

Posted by TQ on 八月 10th, 2009

1. 检查Windows下的Oracle相关服务的状态

主要服务包括: OracleServiceORA10:Oracle实例服务
OracleOraDb10g_home1TNSListenerFslmyoracle: Oracle监听服务(OFS管理)
OracleMSCSServices:Oracle Fail Safe for MSCS服务
在当前活动节点上,服务状态应该是正常“已启动”状态。

2. 检查Oracle初始化参数

select * from v$parameter

3. 检查Oracle的实例状态

select instance_name,version,status,database_status
from v$instance;

其中”STATUS”表示Oracle当前的实例状态,必须为”OPEN”;”DATABASE_STATUS”表示Oracle当前数据库的状态,必须为”ACTIVE”。

4. 检查后台线程的状态

Select name,Description
From V$BGPROCESS
Where Paddr<>'00';

5. 检查系统全局区SGA信息

select * from v$sga;

检查SGA各部份的分配情况,与实际内存比较是否合理。

6. 检查SGA各部分占用内存状况

select * from v$sgastat;

检查有无占用大量Shared pool的对象,及是否有内存浪费情况。

7. 检查系统SCN号

select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe;
select dbms_flashback.get_system_change_number from dual;
select current_scn from v$database;

8. 检查数据库状态

select name,log_mode,open_mode from v$database;

9. 检查当前数据库的操作系统平台

select platform_name from v$database;

10. 检查数据库的大小,和空间使用情况

col tablespace format a20
select b.file_id  文件ID,
  b.tablespace_name  表空间,
  b.file_name     物理文件名,
  b.bytes       总字节数,
  (b.bytes-sum(nvl(a.bytes,0)))   已使用,
  sum(nvl(a.bytes,0))        剩余,
  sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比
  from dba_free_space a,dba_data_files b
  where a.file_id=b.file_id
  group by b.tablespace_name,b.file_name,b.file_id,b.bytes
  order by b.tablespace_name
/

  dba_free_space –表空间剩余空间状况
  dba_data_files –数据文件空间占用情况

11. 检查数据库的创建日期和归档方式

Select Created, Log_Mode, Log_Mode From V$Database;

12. 检查数据库是否处于归档模式,并启动了自动归档进程

archive log list;

13. 检查NLS信息(包括字符集)

select * from nls_database_parameters

‘NLS_LANGUAGE’ || ‘NLS_TERRITORY’ || ‘NLS_CHARACTERSET’ 即字符集。

14. 检查表空间的名称、状态及大小

select t.tablespace_name, t.status, round(sum(bytes/(1024*1024)),0) ts_size
    from dba_tablespaces t, dba_data_files d
    where t.tablespace_name = d.tablespace_name
group by t.tablespace_name, t.status;

15. 检查每个表空间占用空间的大小

Select Tablespace_Name,Sum(bytes)/1024/1024
From Dba_Segments Group By Tablespace_Name;

16. 检查表空间物理文件的名称及大小

select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;

17. 查询表空间的剩余大小

select tablespace_name,sum(bytes)/(1024*1024) as free_space
from dba_free_space
group by tablespace_name;

18. 检查表空间的使用情况

SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,
(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C
WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME
AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;

19. 检查表空间碎块状况

col tablespace_name form a25
select tablespace_name, count(*) chunks,
max(bytes)/1024/1024 max_chunk,
sum(bytes)/1024/1024 total_space
from dba_free_space group by tablespace_name;

如果最大可用块(max_chunk)与总大小(total_space)相比太小,要考虑接合表空间碎片或重建某些数据库对象。 碎片接合的方法: alter tablespace 表空间名 coalesce;

20. 检查回滚段名称、状态及大小

select segment_name, tablespace_name, r.status,
(initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,
max_extents, v.curext CurExtent
From dba_rollback_segs r, v$rollstat v
Where r.segment_id = v.usn(+)
order by segment_name ;

21. 检查控制文件状态

select * from v$controlfile;

22. 检查日志文件状态

select * from v$logfile;

23. 检查日志组信息

select * from v$log;

24. 检查数据文件状态

select file_name,status
from dba_data_files;

25. 检查数据文件存放路径

col file_name format a50
select tablespace_name,file_id,bytes/1024/1024,file_name
from dba_data_files order by file_id;

26. 检查数据文件的自动增长控制

select file_name,autoextensible from dba_data_files;

27. 检查临时数据文件路径

select file_name
from Dba_temp_files;

28. 检查闪回恢复区的路径

select name from v$recovery_file_dest;

29. 检查数据库库对象

select owner, object_type, status, count(*) count#
from all_objects group by owner, object_type, status;

30. 检查数据库的版本 

Select version FROM Product_component_version
Where SUBSTR(PRODUCT,1,6)='Oracle';

VERSION
---------------
11.1.0.6.0

依次为:版本号11、新特性版本号1、维护版本号0、普通的补丁设置号码6、特殊的平台补丁设置号码0

31. 检查数据库的创建日期和归档方式

Select Created, Log_Mode, Log_Mode From V$Database;

32. 检查当前所有对象

select * from tab;

33. 检查当前连接用户

show user;

34. 检查已有用户:

select username from dba_users;

35. 检查所有表、索引、存储过程、触发器、包等对象的状态

select owner,object_name,object_type
from dba_objects where status!='VALID'
and owner!='SYS' and owner!='SYSTEM';

36. 检查当前用户的缺省表空间、临时表空间

select username,default_tablespace, temporary_tablespace from user_users;

37. 检查当前用户的角色

select * from user_role_privs;

38. 检查当前用户的系统权限和表级权限

select * from user_sys_privs;
select * from user_tab_privs;

39. 检查用户下所有的表

select * from user_tables;

40. 检查各个表的大小

检查当前用户每个表占用空间的大小:

Select Segment_Name,Sum(bytes)/1024/1024
From User_Extents Group By Segment_Name

注:段名即表名

按数据对象大小排序

Select Segment_Name,segment_type, Sum(bytes)/1024/1024 as MB
From User_Extents
Group By Segment_Name, segment_type
Order by MB

41. 检查某表的创建时间

select object_name,created from user_objects where object_name=upper('&table_name');

42. 检查名称包含log字符的表

select object_name,object_id from user_objects
     where instr(object_name,'LOG')>0;

43. 检查某表的大小

select sum(bytes)/(1024*1024) as "size(M)" from user_segments
     where segment_name=upper('&table_name');

44. 检查放在内存区里的表

select table_name,cache from user_tables where instr(cache,'Y')>0;

45. 检查索引个数和类别

select index_name,index_type,table_name from user_indexes order by table_name;

46. 检查索引中被索引的字段

select * from user_ind_columns where index_name=upper('&index_name');

47. 检查索引的大小

select sum(bytes)/(1024*1024) as "size(M)" from user_segments
     where segment_name=upper('&index_name');

48. 检查是否有失效的索引

select index_name, owner, table_name, tablespace_name
from dba_indexes
where owner not in ('SYS','SYSTEM') and status != 'VALID';

如果有记录返回,考虑重建这些索引。

49. 检查是否有无效的对象

select object_name,      object_type,      owner,      status
from dba_objects
where status !='VALID'
and owner not in ('SYS','SYSTEM')
and object_type in  ('TRIGGER','VIEW','PROCEDURE','FUNCTION');

如果存在无效的对象,手工重新编译一下。

50. 检查序列号

select * from user_sequences;

last_number是当前值

51. 检查序列号的使用

select sequence_owner, sequence_name, min_value,
max_value, increment_by, last_number,
cache_size, cycle_flag from dba_sequences;

检查是否存在即将达到max_value的sequence 。

52. 检查视图的名称

select view_name from user_views;

53. 检查创建视图的select语句

set view_name,text_length from user_views;
set long 2000;                --说明:可以根据视图的text_length值设定set long 的大小
select text from user_views where view_name=upper('&view_name');

54. 检查同义词的名称

select * from user_synonyms;

55. 检查某表的约束条件

select constraint_name, constraint_type,search_condition, r_constraint_name
     from user_constraints where table_name = upper('&table_name');

select c.constraint_name,c.constraint_type,cc.column_name
 from user_constraints c,user_cons_columns cc
 where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')
 and c.owner = cc.owner and c.constraint_name = cc.constraint_name
 order by cc.position;

56. 检查函数和过程的状态

select object_name,status from user_objects where object_type='FUNCTION';
select object_name,status from user_objects where object_type='PROCEDURE';

57. 检查函数和过程的源代码

select text from all_source where owner=user and name=upper('&plsql_name');

58. 检查当前数据库有几个用户连接

用系统管理员权限执行,

select username,sid,serial#, machine, status from v$session;

USERNAME:建立该会话的用户名;
SID:会话(session)的ID号;
SERIAL#:会话的序列号,和SID一起用来唯一标识一个会话;
PROGRAM: 这个会话是用什么工具连接到数据库的;
MACHINE:这个会话是从哪台电脑连过来的
STATUS 当前这个会话的状态,ACTIVE表示会话正在执行某些任务,INACTIVE表示当前会话没有执行任何操作;

如果要停某个连接用

SQL> alter system kill session 'sid,serial#';

如果这命令不行,找它UNIX的进程数

SQL> select pro.spid
	from v$session ses,v$process pro
	where ses.sid=21 and ses.paddr=pro.addr;

说明:21是某个连接的sid数

然后用 kill 命令杀此进程号。

59. 检查定时作业的完成情况

select job,log_user,last_date,failures
from dba_jobs;

select  job, this_date, this_sec, next_date, next_sec, failures, what
from dba_jobs where failures !=0 or failures is not null;

如果FAILURES列是一个大于0的数的话,说明JOB运行失败,要进一步的检查。

– The End –
转自:itpub
部分经过修改。

第6篇 文章

Posted by TQ on 八月 9th, 2009

输入一些文字

15:50:08 sys@TQGZS> select FILE# ,NAME,BYTES from v$datafile where FILE#=1;

     FILE# NAME                                                    BYTES
---------- -------------------------------------------------- ----------
         1 /u01/oracle/oradata/tqgzs/system01.dbf              734003200

引用一下

我我我

SELECT    d.VALUE
       || '/'
       || LOWER (RTRIM (i.INSTANCE, CHR (0)))
       || '_ora_'
       || p.spid
       || '.trc' trace_file_name
  FROM (SELECT p.spid
          FROM v$mystat m, v$session s, v$process p
         WHERE m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p,
       (SELECT t.INSTANCE
          FROM v$thread t, v$parameter v
         WHERE v.NAME = 'thread'
           AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,
       (SELECT VALUE
          FROM v$parameter
         WHERE NAME = 'user_dump_dest') d
/

a1 b1
100 200

第9篇 文章

Posted by TQ on 八月 7th, 2009
winkstest@CCDB> SELECT name,ceil(bytes/1024/1024) MB,STATUS FROM v$datafile;
 
NAME                                                                 MB STATUS
------------------------------------------------------------ ---------- --------------
/oracle/oradata/ccdb/ccdb/system01.dbf                             1500 SYSTEM
/oracle/oradata/ccdb/ccdb/sysaux01.dbf                             1500 ONLINE
/oracle/oradata/ccdb/ccdb/undotbs01.dbf                            2985 ONLINE
/oracle/oradata/ccdb/ccdb/users01.dbf                               368 ONLINE
/oracle/oradata/ccdb/ccdb/example01.dbf                             100 ONLINE
/oracle/oradata/ccdb/ccdb/USER_DATA_01.DBF                            5 ONLINE
/oracle/oradata/ccdb/ccdb/WINKS_DATA_01.DBF                           5 ONLINE
/oracle/oradata/ccdb/ccdb/USER_DATA_01_WINKSTEST.DBF                  5 ONLINE
/oracle/oradata/ccdb/ccdb/WINKS_DATA_01_WINKSTEST.DBF                 5 ONLINE
/oracle/oradata/ccdb/ccdb/tq.dbf                                   4969 ONLINE
/oracle/oradata/ccdb/test/lmt_uniform.dbf                          8349 ONLINE
/oracle/oradata/ccdb/test/lmt_auto.dbf                             7138 ONLINE
 
已选择12行。

第7篇 文章

Posted by TQ on 八月 6th, 2009

InsertText

winkstest1@CCDB> select winks_Id,member_id,state,to_char(EXPIRE_DATE,’yyyy/mm/dd hh24:mi:ss’) as “EXPIRE_DATE” from member_winks where member_id =(select member_id from member where phone=15701234567) and winks_Id=266;

WINKS_ID MEMBER_ID STATE EXPIRE_DATE
———- ———- ———- ———————–
266 100001724 1 2009/08/06 18:23:48


select winks_Id,member_id,state,to_char(EXPIRE_DATE,'yyyy/mm/dd hh24:mi:ss') as "EXPIRE_DATE" from member_winks where member_id =(select member_id from member where phone=15701234567) and winks_Id=266;

  WINKS_ID  MEMBER_ID      STATE EXPIRE_DATE
---------- ---------- ---------- ----------------------
       266  100001724          1 2009/08/06 18:23:48


Copyright © 2009 TQ 试用 WP. All rights reserved.