今日早上看Oracle官方文档《Administrator's Guide》时,在密码文件章节,关于orapwd命令entries参数的说明如下:

This argument specifies the number of entries that you require the password file to accept. This number corresponds to the number of distinct users allowed to connect to the database as SYSDBA or SYSOPER. The actual number of allowable entries can be higher than the number of users, because theORAPWD utility continues to assign password entries until an operating system block is filled. For example, if your operating system block size is 512 bytes, it holds four password entries. The number of password entries allocated is always a multiple of four.

大意是,entries参数并不是指多少个用户可被赋予sysdba或sysoper权限。实际数量可能高于entries参数指定的值,这与操作系统的block size有关。

按它的说法,操作系统的block size为512字节,entries指定为1的话,我可以给4个用户赋予sysdba或sysoper权限。

好奇,忍不住研究了一下。

一、查看操作系统的block size,本机为RHEL 6.3

[root@node2 ~]# tune2fs -l /dev/sdb |grep 'Block size'
Block size: 4096

block size为4096字节,为512的8倍,按照上面的逻辑,可以给最多32个用户赋予sysdba或sysoper权限。

二、创建密码文件

[oracle@node2 dbs]$ orapwd file=orapworcl password=oracle entries=1 force=y

三、构造用户进行测试

如果能给最多32个用户赋予sysdba或sysoper权限的话,那么创建32个用户并赋予sysdba权限不会有问题,赋予第33个用户sysdba权限的时候会报错,实验一下。

首先创建32个用户并赋予sysdba权限,脚本如下:

declare
sqltext1 varchar2(100);
sqltext2 varchar2(100);
begin
for i in 1..32
loop
sqltext1 := 'create user test'||i||' identified by test'||i;
sqltext2 := 'grant sysdba to test'||i;
execute immediate sqltext1;
execute immediate sqltext2;
end loop;
end;

执行结果如下:

declare
*
ERROR at line 1:
ORA-01996: GRANT failed: password file
'/u01/app/oracle/product/11.2.0.1/db_1/dbs/orapworcl' is full
ORA-06512: at line 10

创建32个用户并赋予sysdba权限竟然没有成功。

四、查看创建成功的用户和被赋予sysdba权限的用户

SQL> select username from dba_users where username like 'TEST%';

USERNAME
------------------------------
TEST4
TEST5
TEST2
TEST1
TEST3 6 rows selected. SQL> select username from v$pwfile_users where username !='SYS' and sysdba='TRUE'; USERNAME
------------------------------
TEST1
TEST2
TEST3
TEST4

发现只成功创建了5个用户且只有4个用户被赋予sysdba权限。

难道官方文档关于entries的说明有误?将operating system block size is 512 bytes作为关键字在百度上搜了下,原来oracle所谓的block size和系统的block size不一致,可根据select distinct lebsz from x$kccle进行查询,lebsz指的是log file的块大小,它也等于操作系统物理扇区大小

Linux: file Block size is selected at the time of high-level formatting。

The log block size is platform. specific, and can be found out using the following query: (size in bytes)

most platforms have log block size of 512, but HPUX has 1k, and tru64 has blocksize of 2k if my memory serves me well.

具体解释可见:http://blog.itpub.net/59069/viewspace-442240/

五、查询Oracle的block size

SQL> select distinct lebsz from x$kccle; 

     LEBSZ
----------
512

看来,本机的物理扇区大小是512,这也不难解释当entries指定为1的时候,最多只能给4个用户赋予sysdba的权限。

如果是这样的话,那我将entries指定为5,则可以给8个用户赋予sysdba权限,下面来试试。

六、删除上面新建的5个用户

declare
sqltext varchar2(100);
begin
for i in 1..5
loop
sqltext := 'drop user test'||i;
execute immediate sqltext;
end loop;
end;

七、重新创建密码文件,将entries指定为5

[oracle@node2 dbs]$ orapwd file=orapworcl password=oracle entries=5 force=y

八、新建8个用户并赋予sysdba权限

declare
sqltext1 varchar2(100);
sqltext2 varchar2(100);
begin
for i in 1..8
loop
sqltext1 := 'create user test'||i||' identified by test'||i;
sqltext2 := 'grant sysdba to test'||i;
execute immediate sqltext1;
execute immediate sqltext2;
end loop;
end;

语句执行没有问题

九、新建第9个用户并赋予sysdba权限

SQL> create user test9 identified by test9;

User created.

SQL> grant sysdba to test9;
grant sysdba to test9
*
ERROR at line 1:
ORA-01996: GRANT failed: password file
'/u01/app/oracle/product/11.2.0.1/db_1/dbs/orapworcl' is full

果然出现报错!

由此来看, 官方文档中所说的 “if your operating system block size is 512 bytes, it holds four password entries. The number of password entries allocated is always a multiple of four” 确实没错!

关于orapwd命令entries参数的探究的更多相关文章

  1. [Oracle] SQL*Loader 详细使用教程(2)- 命令行参数

    sqlldr工具   SQL*Loader的客户端工具是sqlldr,在操作系统的命令行下输入sqlldr,后面不接任何参数,将显示帮助信息如下所示(所有命令行参数的简单描述及其默认值),所以你并不需 ...

  2. find命令高级参数

    find 命令参数大全  转自[https://www.cnblogs.com/yorkyang/p/6294894.html] Linux中find常见用法示例 ·find   path   -op ...

  3. Linux操作系统的文件查找工具locate和find命令常用参数介绍

    Linux操作系统的文件查找工具locate和find命令常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.非实时查找(数据库查找)locate工具  locate命 ...

  4. linux-linux top 命令各参数详解

    简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按 ...

  5. python处理命令行参数

    直接从命令行执行py文件的时候如果带有参数,如何获取这些参数,如何解析? http://blog.chinaunix.net/uid-20786165-id-3182268.html sys.argv ...

  6. .NET Core采用的全新配置系统[5]: 聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数]

    较之传统通过App.config和Web.config这两个XML文件承载的配置系统,.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命令行参 ...

  7. Linux下的几个好用的命令与参数

    将所有文件的编码,转换为UTF-8 find . ! -type d -exec enca -L zh_CN -x UTF-8 {} \; 将指定目录下所有文件权限设定为644 find . ! -t ...

  8. Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

    特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $# 传递给脚本或函数的参数个数. $* 传 ...

  9. powershell脚本,命令行参数传值,并绑定变量的例子

    这是小技巧文章,所以文章不长.但原创唯一,非常重要.我搜了下,还真没有人发 powershell怎样 [命令行 参数 绑定],所以我决定写成博客. 搜索关键字如下: powershell 命令行 参数 ...

随机推荐

  1. 练习1-16:修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本(C程序设计语言 第2版)

    该书英文配套答案 Answer to Exercise -, page Revise the main routine of the longest-line program so it will c ...

  2. wpf下datagrid使用过程中需要注意的几点(一)

    MainWindow.xaml中的代码如下: <DataGrid CanUserAddRows="False" ItemsSource="{Binding}&quo ...

  3. [翻译]理解Ruby中的blocks,Procs和lambda

    原文出处:Understanding Ruby Blocks, Procs and Lambdas blocks,Procs和lambda(在编程领域被称为闭包)是Ruby中很强大的特性,也是最容易引 ...

  4. 【C语言学习】《C Primer Plus》第6章 C控制语句:循环

    学习总结 1.循环的语法跟其他语言的没差多少,可能大多数语言都在C的基础上发展出来的,所以大同小异不奇怪. 2.在判断表达式里,C语言只有0被认为是假,所有非零值正整数都被认为真. #include ...

  5. 移动App开发需要更多的PaaS平台而不是IaaS

    时代的变迁,创业的大潮,越来越多的人关注了有点开发,越来越多的人了解了互联网服务术语:PaaS.IaaS.SaaS.BaaS等.今天大家在开发App的时候这么多复杂的云服务如何来选择呢? IaaS服务 ...

  6. 如何在IIS7/7.5上配置IISADMPWD

    问题 很多IIS用户还记得在早期的IIS版本上有一个web应用, IISADMPWD. 该应用是与IIS5 和IIS6一起发布的. 主要用于为域用户提供修改密码的功能, 同时也可以修改本机用户的密码. ...

  7. 走进AngularJs(五)自定义指令----(下)

    自定义指令学习有段时间了,学了些纸上谈兵的东西,还没有真正的写个指令出来呢...所以,随着学习的接近尾声,本篇除了介绍剩余的几个参数外,还将动手结合使用各参数,写个真正能用的指令出来玩玩. 我们在自定 ...

  8. Java提高篇(三五)-----Java集合细节(一):请为集合指定初始容量

    集合是我们在Java编程中使用非常广泛的,它就像大海,海纳百川,像万能容器,盛装万物,而且这个大海,万能容器还可以无限变大(如果条件允许).当这个海.容器的量变得非常大的时候,它的初始容量就会显得很重 ...

  9. [翻译].NET随机数

    原文链接:http://csharpindepth.com/Articles/Chapter12/Random.aspx   随机数 当你在Stack Overflow上看到看到某个问题标题当中有“随 ...

  10. Linq动态条件

    很多情况下,我们开发程序,需要动态拼接SQL查询语句; 比如  select top 1 * from User where age= 18  and  name = 'renruiquan' 其中红 ...