欢迎投稿

今日深度:

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

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


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 就可以了

www.htsjk.Com true http://www.htsjk.com/oracle/24520.html NewsArticle Oracle数据库表空间的整理语句分享,oracle数据库 1. 查看所有表空间大小 SQL selecttablespace_name,sum(bytes)/1024/1024 from dba_data_files 2 group by tablespace_name; 2. 已经使用的表空间大小 SQL selecttables...
评论暂时关闭