欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Oracle数据库表空间的整理语句分享

程序员文章站 2022-05-25 12:16:59
1. 查看所有表空间大小 SQL> selecttablespace_name,sum(bytes)/1024/1024 from dba_data_files 2 gr...

1. 查看所有表空间大小

SQL> selecttablespace_name,sum(bytes)/1024/1024 from dba_data_files

2 group by tablespace_name;

2. 已经使用的表空间大小

SQL> selecttablespace_name,sum(bytes)/1024/1024 from dba_free_space

2 group by tablespace_name;

3. 所以使用空间可以这样计算

select a.tablespace_name,total,free,total-freeused from

( selecttablespace_name,sum(bytes)/1024/1024 total from dba_data_files

group by tablespace_name) a,

( selecttablespace_name,sum(bytes)/1024/1024 free from dba_free_space

group by tablespace_name) b

wherea.tablespace_name=b.tablespace_name;

4. 下面这条语句查看所有segment的大小。

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

5. 还有在命令行情况下如何将结果放到一个文件里。

SQL> spool out.txt

SQL> select * from v$database;

SQL> spool off

查看临时表空间的使用率

select *

from (Selecta.tablespace_name,

to_char(a.bytes / 1024 / 1024 ) total_bytes,

to_char(b.bytes / 1024 / 1024) free_bytes,

to_char(a.bytes / 1024 / 1024 - b.bytes / 1024 / 1024) use_bytes,

to_char((1 - b.bytes /a.bytes) * 100) || '%' use

from (selecttablespace_name, sum(bytes) bytes

fromdba_data_files

group bytablespace_name) a,

(selecttablespace_name, sum(bytes) bytes

fromdba_free_space

group by tablespace_name) b

where a.tablespace_name =b.tablespace_name

union all

select c.tablespace_name,

to_char(c.bytes / 1024 / 1024) total_bytes,

to_char((c.bytes -d.bytes_used) / 1024 / 1024) free_bytes,

to_char(d.bytes_used / 1024 / 1024) use_bytes,

to_char(d.bytes_used * 100 / c.bytes, '99.99') || '%' use

from (selecttablespace_name, sum(bytes) bytes

fromdba_temp_files

group by tablespace_name) c,

(selecttablespace_name, sum(bytes_cached) bytes_used

fromv$temp_extent_pool

group bytablespace_name) d

where c.tablespace_name =d.tablespace_name)

SELECT UPPER(F.TABLESPACE_NAME) "表空间名",

D.TOT_GROOTTE_MB"表空间大小(M)",

D.TOT_GROOTTE_MB- F.TOTAL_BYTES "已使用空间(M)",

TO_CHAR(ROUND((D.TOT_GROOTTE_MB- F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,

2),

'990.99')"使用比",

F.TOTAL_BYTES"空闲空间(M)",

F.MAX_BYTES"最大块(M)"

FROM(SELECT TABLESPACE_NAME,

ROUND(SUM(BYTES)/ (1024 * 1024), 2) TOTAL_BYTES,

ROUND(MAX(BYTES)/ (1024 * 1024), 2) MAX_BYTES

FROMSYS.DBA_FREE_SPACE

GROUPBY TABLESPACE_NAME) F,

(SELECTDD.TABLESPACE_NAME,

ROUND(SUM(DD.BYTES)/ (1024 * 1024), 2) TOT_GROOTTE_MB

FROMSYS.DBA_DATA_FILES DD

GROUPBY DD.TABLESPACE_NAME) D

WHERED.TABLESPACE_NAME = F.TABLESPACE_NAME

ORDERBY 4 DESC

--查询表空间使用情况

SELECTUPPER(F.TABLESPACE_NAME) "表空间名",

D.TOT_GROOTTE_MB"表空间小(M)",

D.TOT_GROOTTE_MB- F.TOTAL_BYTES "已使用空间(M)",

TO_CHAR(ROUND((D.TOT_GROOTTE_MB- F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",

F.TOTAL_BYTES"空闲空间(M)",

F.MAX_BYTES"最块(M)"

FROM(SELECT TABLESPACE_NAME,

ROUND(SUM(BYTES)/ (1024 * 1024), 2) TOTAL_BYTES,

ROUND(MAX(BYTES)/ (1024 * 1024), 2) MAX_BYTES

FROMSYS.DBA_FREE_SPACE

GROUPBY TABLESPACE_NAME) F,

(SELECTDD.TABLESPACE_NAME,

ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB

FROMSYS.DBA_DATA_FILES DD

GROUPBY DD.TABLESPACE_NAME) D

WHERED.TABLESPACE_NAME = F.TABLESPACE_NAME

ORDERBY 1

--查询表空间的free space

selecttablespace_name,

count(*)as extends,

round(sum(bytes)/ 1024 / 1024, 2) as MB,

sum(blocks)as blocks

fromdba_free_space

groupby tablespace_name;

--查询表空间的总容量

selecttablespace_name, sum(bytes) / 1024 / 1024 as MB

fromdba_data_files

groupby tablespace_name;

--查询表空间使用率

selecttotal.tablespace_name,

round(total.MB,2) as Total_MB,

round(total.MB- free.MB, 2) as Used_MB,

round((1- free.MB / total.MB) * 100, 2) || '%' as Used_Pct

from(select tablespace_name, sum(bytes) / 1024 / 1024 as MB

fromdba_free_space

groupby tablespace_name) free,

(selecttablespace_name, sum(bytes) / 1024 / 1024 as MB

fromdba_data_files

groupby tablespace_name) total

wherefree.tablespace_name = total.tablespace_name;

SELECT UPPER(F.TABLESPACE_NAME) "表空间名",

D.TOT_GROOTTE_MB"表空间大小(M)",

D.TOT_GROOTTE_MB- F.TOTAL_BYTES "已使用空间(M)",

TO_CHAR(ROUND((D.TOT_GROOTTE_MB- F.TOTAL_BYTES) /

D.TOT_GROOTTE_MB* 100,

2),

'990.99') "使用比",

F.TOTAL_BYTES"空闲空间(M)",

F.MAX_BYTES"最大块(M)"   FROM (SELECTTABLESPACE_NAME,

ROUND(SUM(BYTES) /

(1024 * 1024),

2) TOTAL_BYTES,

ROUND(MAX(BYTES)/

(1024 * 1024),

2) MAX_BYTES   FROM SYS.DBA_FREE_SPACE  GROUP BY TABLESPACE_NAME) F,

(SELECTDD.TABLESPACE_NAME,

ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB   FROMSYS.DBA_DATA_FILES DD   GROUP BYDD.TABLESPACE_NAME) D   WHERE D.TABLESPACE_NAME =F.TABLESPACE_NAME   ORDER BY 4 DESC

/*第1步:创建临时表空间*/

create temporary tablespaceuser_temp

tempfile'D:\oracle\oradata\Oracle9i\user_temp.dbf'

size 50m

autoextend on

next 50m maxsize 20480m

extent management local;

/*第2步:创建数据表空间*/

create tablespaceuser_data

logging

datafile'D:\oracle\oradata\Oracle9i\user_data.dbf'

size 50m

autoextend on

next 50m maxsize 20480m

extent management local;

/*第3步:创建用户并指定表空间 username为需要创建的用户名,password为需要的密码*/

create userusernameidentified bypassword

default tablespaceuser_data

temporary tablespaceuser_temp;

/*第4步:给用户授予权限 */

grant connect,resource,dba tousername;

2.删除表空间和用户

可以先将其offline

altertablespace xx offline;

将磁盘上的数据文件一同删除

droptablespace xxx including contents and datafiles;

删除用户:

dropuser xxx;

如果用户的schema中有objects ,需要加cascade参数,即drop user xxxcascade;

3.导入导出数据

数据的导入:

(1)将D:\daochu.dmp 中的数据导入 TEST数据库中。

imp system/manager@TEST file=d:\daochu.dmp

上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。

在后面加上 ignore=y 就可以了。

(2)将d:\daochu.dmp中的表table1 导入

impsystem/manager@TEST file=d:\daochu.dmp tables=(table1)

数据导出:

(1) 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中

exp system/manager@TEST file=d:\daochu.dmp full=y

(2)将数据库中system用户与sys用户的表导出

expsystem/manager@TEST file=d:\daochu.dmp owner=(system,sys)

(3)将数据库中的表table1 、table2导出

expsystem/manager@TEST file=d:\daochu.dmp tables=(table1,table2)

(4)将数据库中的表table1中的字段filed1以"00"打头的数据导出

expsystem/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" wherefiled1 like '00%'\"

注:上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。

不过在上面命令后面加上 compress=y 就可以了