查询我的Oracle块大小

25

如果我没有访问 v$parameter 视图的权限,有没有一种方法可以确定我的 Oracle 数据库块的大小?

谢谢!

f.


注意:Oracle支持每个表空间使用不同的块大小。因此,v$parameter中的值仅为“默认值”。 - ibre5041
4个回答

24
你可以这样做:
select distinct bytes/blocks from user_segments;

6
这个查询非常耗费资源,最好考虑使用类似以下语句:select value from v$parameter where name='db_block_size' - Guido Leenders
1
@GuidoLeenders:“如果我无法访问v$parameter视图”! - Tony Andrews

5
在Oracle中,块大小是按表空间设置的。您可以查询user_tablespaces或dba_tablespaces(如果您有访问权限),并查看每个表空间的块大小; 这些视图通常会立即运行。
您还可以将这两个视图之一与dba_tables、user_tables或all_tables连接,并将块数乘以块大小以获取表的总大小(除以1024 * 1024以获得以MB为单位的大小等)。

4

由于每个表空间的块大小不同,建议您使用以下查询:

select block_size, tablespace_name from dba_tablespaces;

0

是的,那么你有一个严重的问题。查询 user_segments 可能非常慢,特别是在运行创建数万个段并倾向于碎片化数据字典的 SAP 或 Infor BAAN 时。最好说服你的 DBA 以某种方式授予你权限,也许通过具有 v_$ 的视图。

另一种执行效果更好的替代方法:当你可以创建段时,你具有一些表空间访问权限(请注意,在没有任何段时 distinct 不起作用)。这个列表通常较短,所以例如使用:

select bytes/blocks from user_ts_quotas

这仍然留下了一个社交工程问题,即当用户受到如此限制以至于没有配额时,需要与本地 DBA 协商解决 :-)


2
真的吗?他想知道块大小,但没有访问v$parameter视图的权限。即使对user_segments的查询需要5分钟,他仍然在5分钟内得到了答案。除非有特殊需要每天多次检查数据库块大小,否则向DBA请求特权以更快地找出答案似乎有些过头了? - Tony Andrews

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接