Posts belonging to Category 'Oracle'

Create spfile from pfile命令要注意

自从9i版本开始,Oracle数据库开始引进另外一种初始化参数文件,spfile.简单说明一点:①该参数是一个二进制文件,不可以用文本编辑器直接编辑修改;②一般驻留在Database  server端;③对参数的修改在数据库重新启动后仍然生效;④可以通过RMAN工具进行备份。Oracle现在已经不推荐使用PFILE了。数据库在启动的过程当中默认读取参数文件的顺序是:在$ORACLE_HOME/dbs路径下查找并使用名为spfileSID.ora的参数文件启动,次之查找spfile.ora文件,最后才会查找名为initSID.ora的pfile来启动数据库,若这三个文件都没有查到,则数据库在默认情况下就启不来。当然,我们也可以在启动的过程中显示指定使用一个非默认路径下的某个非默认命名的pfile来启动数据库,命令类似于{SQL>startup pfile=/u01/app/…./init.ora}。但是,我们却不可以在启动的过程中显示指定用某个SPFILE来启动数据库!
在这里,我想说明的是:我们在做PFILE与SPFILE互相“倒腾”的过程当中要稍加留意的是,一定要注意参数文件的路径要写全,如果不是利用默认的路径。
例如:我在一次解决问题的过程当中,就犯了一个低级的错误:客户应用环境下当前的SPFILE丢掉了,没有有效地参数文件备份,只有一个不能用的PFILE,实例根本就无法加载了。好在,客户在建数据库的最后一步过程中,保留了脚本。这样,就可以利用该文件来启动数据库了,启动实例之后,我就执行了:SQL>create spfile from pfile;返回结果提示,SPFILE创建成功,然后shutdown,再启动。结果报错,“ORA-03113: 通信通道的文件结束 ORA-01041: 内部错误, hostdef 扩展名不存在”,实例无法启动。我就很诧异了???后来,问题的原因就是执行SQL>create spfile from pfile的时候,没有显示指定pfile=xxxxx,也就是说,利用pfile来创建SPFILE的过程当中,pfile本身就是一个不可以用来启动实例的参数文件,那么利用该文件来创建出来的SPFILE肯定也是一个“废品”文件了。解决问题的方法:重新利用那个脚本中的参数文件启动实例,然后显示的利用该文件来创建一个可用的SPFILE。经过仔细的调整初始化参数,最后数据库有了SPFILE,可以正常启动到OPEN阶段!!!
结论:我们在做参数文件互相转换的过程当中,要谨慎确认,创建文件的源头是不是一个正确的可用的文件。
Send article as PDF to

DBA,SYSDBA,SYSOPER三者的区别

什么是DBA?什么是SYSDBA,什么又是SYSOPER?三者究竟有何联系呢?
在Oracle数据库领域里,很多Oracle初学者(Me 2)很容易被这三个术语迷惑,就其原因还是基础概念没有弄清楚。记得自己刚开始接触Oracle的时候,也是云里雾里,现在基本弄明白,故写出来和大家分享:
DBA:在Oracle数据库里面其实只是一个角色(role)。那么什么是角色呢?可以简单的认为一个角色就是某些个权限的集合体,也就是说把多个系统权限(system privilege),对象权限(object privilege)以及角色(role)揉和在一起,然后赋给一个角色。说白了,Oracle引入角色的概念,其实是为了避免相关的系统权限和对象权限的赋予和回收的复杂性。把一堆系统权限和对象权限以及角色打包之后赋给某个新角色,然后再对这个新角色进行必要的操作就显得相当便捷和方便了。当然,在Oracle里面一个角色是可以赋给另外一个角色的,但是角色的赋给是不能够构成循环回路的。eg:先把role1给role2,然后把role2给role3,那么你就不可以再把role3给role1了。这是Oracle不允许的,其实你也不可以成功执行这样的包含回路角色的授权的!
SYSDBA:说白了就是一种系统权限而已,没有什么神秘的。当我们在SQL*PLUS命令行上执行了类似如下的操作:
SQL>conn / as sysdba;这时候,其实我们是以SYSDBA这个身份去登陆数据库的,我们当前的default schema是SYS。那么SYSDBA这个系统权限究竟允许执行哪些操作呢?
■   Perform STARTUP and SHUTDOWN operations
■   ALTER DATABASE: open, mount, back up, or change character set
■   CREATE DATABASE
■   DROP DATABASE
■   CREATE SPFILE
■   ALTER DATABASE ARCHIVELOG
■   ALTER DATABASE RECOVER
■   Includes the RESTRICTED SESSION privilege
■   Perform STARTUP and SHUTDOWN operations
■   [...]

《Oracle DBA手记》“享受”中

《Oracle DBA手记》新书到手,正在“啃食”中!感谢邹先生(banping)赠送此书与我。同样要感谢其他几位作者,感谢Oracle高手前辈写出如此好的技术性书籍,给我等newbie指点学习的方向和解决问题的方法。
2010.1.30下午在厦门市湖滨南路中山医院门口初见邹先生,特别高兴,也很欣慰,不单是他赠送此书给我,更为重要的是认识一位Oracle从业前辈。两个陌生的北方男人认识在南方的厦门,完全是因为Oracle。初次拿到书的时候感觉封面很凝重,随后慢慢翻阅学习的时候,才发觉内容是如此之精华!得知他母亲身体不好在医院治疗,他也一直忙着照顾老人。在此,祝福老人家,早日康复,祝福邹先生合家团圆,家人平安快乐!
Send article as PDF to

oracle 10g SYSAUX tablespace

The SYSAUX(System Auxiliary) tablespace is a new feature of Oracle 10g database,before 10g release,there wasn’t this tablespace.After you created your database via DBCA(Database Configuration Assistant) tool,the SYSAUX tablespace was created for you automatically.
But what’s the mainly function of that tablespace? Why Oracle present the SYSAUX tablespace? Does it bring some benefit for the database or [...]

revoke sysdba from user_name

把sysdba权限授予给user1之后,orapwSID文件中记录了user1的信息,但是将sysdba权限从user1收回之后,orapwSID文件中依然有user1用户。这是为什么呢???
可是联机文档上明明说:
A user’s name remains in the password file only as long as that user has at least one of these two privileges. If you revoke both of these privileges, Oracle Database removes the user from the password file.

以下是我的实验步骤:
1看到字典里面记录的只有SYS用户拥有SYSDBA和SYSOPER系统权限:
SQL> select * from v$pwfile_users;
USERNAME                       SYSDB SYSOP
—————————— —– —–
SYS           [...]

Oracle数据库基本常用命令

1、得到数据库名和创建日期
SELECT name, created, log_mode, open_mode FROM v$database;
2、ORACLE数据库的计算机的主机名,ORACLE数据库的实例名及ORACLE数据库管理系统的版本信息
SELECT host_name, instance_name, version FROM v$instance;
3、为了知道oracle数据库版本的一些特殊信息
select * from v$version;
4、获取控制文件名字
select * from v$controlfile;
5、得到Oracle数据库的重做日志配置信息
SELECT group#, members, bytes, status, archived FROM v$log;
select GROUP#,MEMBER from v$logfile;
6、获取oracle的每个重做日志(成员)文件所存放的具体位置
select * from v$logfile;
7、知道ORACLE数据库的备份和恢复策略和归档文件的具体位置
archive log list
8、知道ORACLE数据库中到底有多少表空间以及每个表空间的状态
select tablespace_name, block_size, status, contents, logging from dba_tablespaces;
select tablespace_name, status from dba_tablespaces;
9、知道每个表空间存在哪个磁盘上以及文件的名字等信息
SELECT file_id, file_name, tablespace_name, status, bytes from dba_data_files;
select file_name, tablespace_name from dba_data_files;
10、知道Oracle数据库系统上到底有多少用户和都是什么时候创建的
select [...]

Oracle static and dynamic parameters

在Oracle中,从9i开始引入了spfile,也就是服务 器端初始化参数,有很多是可以支持在线修改的,也就是修改会马上生效,详细内容看下面的说明:
The ISSYS_MODIFIABLE column in V$PARAMETER tells us whether the parameters are static or dynamic. Static parameters require the instance to be restarted while dynamic parameters can take effect(生效) immediately upon(在…之后) being changed.
SQL> select distinct issys_modifiable from v$parameter;
ISSYS_MODIFIABLE
—————————
DEFERRED
FALSE
IMMEDIATE

If the ISSYS_MODIFIABLE value is set to FALSE for a parameter, it means that the parameter cannot change its value in the lifetime(一生) of [...]