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