【发布时间】:2011-06-19 06:18:20
【问题描述】:
如果我无权访问v$parameter 视图,是否有办法知道我的 Oracle 数据库的块大小?
谢谢!
f.
【问题讨论】:
-
注意:Oracle 支持每个表空间不同的块大小。所以 v$parameter 中的值只是一个“默认值”。
如果我无权访问v$parameter 视图,是否有办法知道我的 Oracle 数据库的块大小?
谢谢!
f.
【问题讨论】:
你可以这样做:
select distinct bytes/blocks from user_segments;
【讨论】:
是的,那你有一个大问题。查询 user_segments 可能真的很慢,尤其是在运行 SAP 或 Infor BAAN 时,它们会创建数万个段并倾向于使数据字典碎片化。最好的办法是说服您的 DBA 以某种方式授予您访问权限,可能是通过带有 v_$ 的视图。
替代方案,性能更好:当您可以创建段时,您有一些表空间访问权限(请注意,当您没有任何段时,不同的不起作用)。此列表通常较短,因此例如使用:
从 user_ts_quotas 中选择字节/块
当用户受到如此限制以至于没有配额时,本地 DBA 仍然会遇到社会工程问题 :-)
【讨论】:
在 oracle 中,块大小是按表空间设置的。您可以查询 user_tablespaces 或 dba_tablespaces(如果您有访问权限)并查看每个表空间的块大小;这些视图通常会立即运行。
您还可以将这 2 个中的任何一个连接到 dba_tables、user_tables 或 all_tables,然后将块数乘以块大小以获得表的总大小(以字节为单位)(除以 1024*1024 以获取以 MB 为单位的大小,等等)
【讨论】:
由于每个表空间的块大小不同,您最好使用以下查询:
select block_size, tablespace_name from dba_tablespaces;
【讨论】: