【Oracle】表空间管理

前端之家收集整理的这篇文章主要介绍了【Oracle】表空间管理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

表空间管理为主、附带 权限管理、数据字典

  1. /*
  2. 表空间是逻辑结构,数据文件是物理结构
  3. 一个表空间对应多个段segment 段可以对应多个数据文件、跨磁盘
  4. 一个段对应多个盘区 extent 一个盘区只能位于一个数据文件
  5. 一个盘区对应多个 数据块 block
  6. */
  7.  
  8. --通过数据字典查询 表空间
  9. select * from dba_data_files; --可以看出 一个表空间对应多个数据文件
  10. /*
  11. 默认表空间
  12. example 存放各种样例
  13. sysaux system的辅助空间。主要用于存储数据字典之外的其他数据对象,这样可以减少system表空间的负荷
  14. system 存放数据字典,包括表、视图、存储过程的定义等
  15. temp 存放sql语句处理的表和索引的信息。数据排序就用这个表空间
  16. undotbs1 存放撤销数据的表空间
  17. users 通常用于存放 应用系统所使用的数据库对象
  18. SYSTEM 表空间
  19. 进行数据库操作所必须要求的表空间
  20. 包含数据字典的信息、存储过程和数据库触发子的定义
  21. 包括系统回滚段
  22. 可以存储用户数据,但最好不要存储用户数据
  23. 非SYSTEM 表空间
  24. 可以包括回滚段、临时段、应用数据、应用索引和用户空间
  25. 提供了一种更加灵活的数据库管理基础
  26. */
  27. select owner,count(1) from dba_segments group by owner;
  28. --创建表空间语法
  29. create tablespace <tablespace name>
  30. data files 数据文件名以及大小
  31. storage 设置表空间的存储参数 (存储子句)
  32. bring online after creation 表空间在线
  33. leave offline after creation 表空间离线
  34. --查看表空间信息
  35. select * from dba_tablespaces;
  36. --查看数据文件的信息
  37. select file_name,tablespace_name from dba_data_files;
  38. --创建表空间 例句
  39. create tablespace user_space
  40. datafile 'D:\app\Administrator\oradata\bonc\DB_TEST.DBF'
  41. size 30M
  42. default storage
  43. (
  44. initial 10k
  45. next 50k
  46. minextents 1
  47. maxextents 99
  48. pctincrease 10
  49. )
  50. online;
  51. --创建临时表空间 例句
  52. CREATE TEMPORARY TABLESPACE DB_TEMP
  53. TEMPFILE 'D:\app\gloryzheng\oradata\dbz\DB_TEMP.DBF'
  54. SIZE 320M
  55. AUTOEXTEND ON
  56. NEXT 320M MAXSIZE UNLIMITED
  57. EXTENT MANAGEMENT LOCAL;
  58. --删除表空间
  59. drop tablespace user_space including contents cascade constraints;
  60. --使表空间在线
  61. set tablespace users online;
  62. --修改表空间
  63. alter tablespace user_space
  64. add datafile 'D:\app\Administrator\oradata\bonc\DB_TEST2.DBF'
  65. rename datafile 'D:\app\Administrator\oradata\bonc\DB_TEST.DBF' to 'D:\app\Administrator\oradata\bonc\DB_TEST1.DBF'
  66. default storage
  67. online
  68. offline
  69. normal
  70. temporary
  71. immediate;
  72. begin backup
  73. end;
  74.  
  75. --删除用户并级联删除
  76. drop user tourdb cascade;
  77.  
  78. --为tourdb 创建表空间
  79. CREATE TABLESPACE DB_ZHENG
  80. LOGGING
  81. DATAFILE 'D:\app\Administrator\oradata\orcl\DB_ZHENG.DBF'
  82. SIZE 320M
  83. AUTOEXTEND ON
  84. NEXT 320M MAXSIZE UNLIMITED
  85. EXTENT MANAGEMENT LOCAL;
  86.  
  87. --创建用户并指定表空间
  88. CREATE USER tourdb IDENTIFIED BY ch7YH3vd
  89. ACCOUNT UNLOCK
  90. DEFAULT TABLESPACE DB_DATA
  91. TEMPORARY TABLESPACE DB_TEMP;
  92. --修改密码
  93. alert user scott identified by tiger;
  94. --增加表空间的配额
  95. alter user gloryzheng quota unlimited on DB_ZHENG;
  96. alter user gloryzheng quota 10m on db_zheng;
  97.  
  98. --查看当前用户的权限
  99. select * from user_sys_privs where privilege like '%grant%';
  100. --查看所有用户的权限
  101. select * from user_tab_privs where owner like'%gloryzheng%';
  102. --查看字符集
  103. select * from v$nls_parameters t where t.PARAMETER ='NLS_LANGUAGE' or t.PARAMETER ='NLS_CHARACTERSET';
  104. --数据库服务器字符集
  105. select * from nls_database_parameters;
  106. --客户端字符集
  107. select * from nls_instance_parameters;
  108. --session字符集
  109. select * from nls_session_parameters;
  110.  
  111. --在环境变量中 新建 系统变量 变量名:NLS_LANG 变量值 为服务器字符集中 NLS_LANGUAGE的值+.+NL_CHARACTERSET的值 即可解决字符集问题
  112.  
  113. --授权用户 对表操作
  114. --会话权限
  115. grant create session to gloryzheng,tour,tourdb,bkepler;
  116. --授权查询任何表
  117. grant select any table to gloryzheng,bkepler;
  118. --授权查询任何字典
  119. grant select any dictionary to gloryzheng,bkepler;
  120. --创建表权限
  121. grant create any table to gloryzheng,bkepler;
  122. --删除表权限
  123. grant drop any table to gloryzheng,bkepler;
  124. --授予插入表的权限
  125. grant insert any table to gloryzheng,bkepler;
  126. --授予创建存储过程的权限
  127. grant create procedure to gloryzheng;
  128. --授予dba角色
  129. grant dba to gloryzheng,bkepler;
  130. --回收dba角色
  131. revoke dba from gloryzheng,bkepler;
  132. --删除角色
  133. drop role xxx
  134.  
  135. --查看用户相关 数据字典
  136. select table_name from user_tables; select *from tab;--查看用户所拥有的表
  137. select view_name from user_views; --查看用户所拥有的视图
  138. select trigger_name from user_triggers;--查看用户所拥有的触发器
  139. select sequence_name from user_sequence;--查看用户拥有的序列
  140. select index_name from user_indexs;--查看用户拥有的索引
  141. select *from session_privs;--查看用户所拥有的权限
  142. conn scott/tiger;--切换用户
  143. conn scott/tiger as sysdba;--将用户赋予某种角色登录
  144. conn system/unis; select username from dba_users;--查看所有用户
  145.  
  146. --登录sql Plus
  147. sqlplus 用户名/密码@db1 as sysdba;
  148. --导出用户文件 用户名/密码为登录现有数据库所用
  149. exp scott/Manager123@localhost:1521/db1 file=d:/scott.dmp
  150. --如果导出表时 用户dba角色 那么导入表时 用户也应该是dba角色 用户名、密码为目标数据库所有
  151. imp 用户名/密码@SID (目标数据库名) file=dmp文件路径 fromuser=导出用户名 touser=导入用户名
  152.  
  153. --查询表空间使用情况
  154. 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')
  155. || '%' "使用比",F.TOTAL_BYTES "空闲空间(M)",F.MAX_BYTES "最大块(M)"
  156. FROM (SELECT TABLESPACE_NAME,Round(Sum(BYTES) / ( 1024 * 1024 ),2) TOTAL_BYTES,Round(Max(BYTES) / ( 1024 * 1024 ),2) MAX_BYTES
  157. FROM SYS.DBA_FREE_SPACE
  158. GROUP BY TABLESPACE_NAME) F,(SELECT DD.TABLESPACE_NAME,Round(Sum(DD.BYTES) / ( 1024 * 1024 ),2) TOT_GROOTTE_MB
  159. FROM SYS.DBA_DATA_FILES DD
  160. GROUP BY DD.TABLESPACE_NAME) D
  161. WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
  162. ORDER BY 1;
  163.  
  164. --查询表空间的free space
  165. select tablespace_name,count(*) AS extends,round(sum(bytes) / 1024 / 1024,2) AS MB,sum(blocks) AS blocks from dba_free_space group BY tablespace_name;
  166.  
  167. --查询表空间的总容量
  168. select tablespace_name,sum(bytes) / 1024 / 1024 as MB from dba_data_files group by tablespace_name;
  169.  
  170.  
  171. --查询表空间使用率
  172. --例句1
  173. SELECT total.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)
  174. || '%' AS Used_Pct
  175. FROM (SELECT tablespace_name,Sum(bytes) / 1024 / 1024 AS MB
  176. FROM dba_free_space
  177. GROUP BY tablespace_name) free,(SELECT tablespace_name,Sum(bytes) / 1024 / 1024 AS MB
  178. FROM dba_data_files
  179. GROUP BY tablespace_name) total
  180. WHERE free.tablespace_name = total.tablespace_name;
  181. --例句2
  182. SELECT a.tablespace_name "表空间名",total "表空间大小",free "表空间剩余大小",( total - free ) "表空间使用大小",Round(( total - free ) / total,4) * 100 "使用率 %"
  183. FROM (SELECT tablespace_name,Sum(bytes) free
  184. FROM DBA_FREE_SPACE
  185. GROUP BY tablespace_name) a,Sum(bytes) total
  186. FROM DBA_DATA_FILES
  187. GROUP BY tablespace_name) b
  188. WHERE a.tablespace_name = b.tablespace_name;
  189. --例句3
  190. SELECT TABLESPACE_NAME "TABLESPACE",To_char(Round(BYTES / 1024,'99990.00')
  191. || '' "TOTAL",To_char(Round(FREE / 1024,'99990.00')
  192. || 'G' "FREE",To_char(Round(( BYTES - FREE ) / 1024,'99990.00')
  193. || 'G' "USED",To_char(Round(10000 * USED / BYTES) / 100,'99990.00')
  194. || '%' "PERCENT"
  195. FROM (SELECT A.TABLESPACE_NAME TABLESPACE_NAME,Floor(A.BYTES / ( 1024 * 1024 )) BYTES,Floor(B.FREE / ( 1024 * 1024 )) FREE,Floor(( A.BYTES - B.FREE ) / ( 1024 * 1024 )) USED
  196. FROM (SELECT TABLESPACE_NAME TABLESPACE_NAME,Sum(BYTES) BYTES
  197. FROM DBA_DATA_FILES
  198. GROUP BY TABLESPACE_NAME) A,(SELECT TABLESPACE_NAME TABLESPACE_NAME,Sum(BYTES) FREE
  199. FROM DBA_FREE_SPACE
  200. GROUP BY TABLESPACE_NAME) B
  201. WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME);
  202. --WHERE TABLESPACE_NAME LIKE 'CDR%' --这一句用于指定表空间名称
  203. ORDER BY Floor(10000 * USED / BYTES) DESC;
  204. --例句4
  205. select tablespace_name,max_gb,used_gb,round(100 * used_gb / max_gb) pct_used
  206. from (select a.tablespace_name tablespace_name,round((a.bytes_alloc - nvl(b.bytes_free,0)) / power(2,30),2) used_gb,round(a.maxbytes / power(2,2) max_gb
  207. from (select f.tablespace_name,sum(f.bytes) bytes_alloc,sum(decode(f.autoextensible,'YES',f.maxbytes,'NO',f.bytes)) maxbytes
  208. from dba_data_files f
  209. group by tablespace_name) a,(select f.tablespace_name,sum(f.bytes) bytes_free
  210. from dba_free_space f
  211. group by tablespace_name) b
  212. where a.tablespace_name = b.tablespace_name(+)
  213. union all
  214. select h.tablespace_name tablespace_name,round(sum(nvl(p.bytes_used,round(sum(decode(f.autoextensible,f.bytes)) / power(2,2) max_gb
  215. from v$temp_space_header h,v$temp_extent_pool p,dba_temp_files f
  216. where p.file_id(+) = h.file_id
  217. and p.tablespace_name(+) = h.tablespace_name
  218. and f.file_id = h.file_id
  219. and f.tablespace_name = h.tablespace_name
  220. group by h.tablespace_name)
  221. order by 4;

猜你在找的Oracle相关文章