【问题标题】:Query my block size oracle查询我的区块大小预言机
【发布时间】:2011-06-19 06:18:20
【问题描述】:

如果我无权访问v$parameter 视图,是否有办法知道我的 Oracle 数据库的块大小?

谢谢!

f.

【问题讨论】:

  • 注意:Oracle 支持每个表空间不同的块大小。所以 v$parameter 中的值只是一个“默认值”。

标签: oracle storage admin


【解决方案1】:

你可以这样做:

select distinct bytes/blocks from user_segments;

【讨论】:

  • 这个查询非常昂贵,最好考虑 select value from v$parameter where name = 'db_block_size'
  • @GuidoLeenders:“如果我无权访问 v$parameter 视图”!
【解决方案2】:

是的,那你有一个大问题。查询 user_segments 可能真的很慢,尤其是在运行 SAP 或 Infor BAAN 时,它们会创建数万个段并倾向于使数据字典碎片化。最好的办法是说服您的 DBA 以某种方式授予您访问权限,可能是通过带有 v_$ 的视图。

替代方案,性能更好:当您可以创建段时,您有一些表空间访问权限(请注意,当您没有任何段时,不同的不起作用)。此列表通常较短,因此例如使用:

从 user_ts_quotas 中选择字节/块

当用户受到如此限制以至于没有配额时,本地 DBA 仍然会遇到社会工程问题 :-)

【讨论】:

  • 真的吗?他想知道块大小并且无法访问 v$parameter 视图。即使对 user_segments 的查询花费了 5 分钟,他仍然在 5 分钟内得到了答案。除非有特殊需要每天多次检查数据库块大小,否则似乎 OTT 会向 DBA 请求特权只是为了更快地找出来?
【解决方案3】:

在 oracle 中,块大小是按表空间设置的。您可以查询 user_tablespaces 或 dba_tablespaces(如果您有访问权限)并查看每个表空间的块大小;这些视图通常会立即运行。

您还可以将这 2 个中的任何一个连接到 dba_tables、user_tables 或 all_tables,然后将块数乘以块大小以获得表的总大小(以字节为单位)(除以 1024*1024 以获取以 MB 为单位的大小,等等)

【讨论】:

    【解决方案4】:

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

    select block_size, tablespace_name from dba_tablespaces;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 2023-01-18
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多