1、启动数据库:
1,、数据库启动的方式:一般有三种方式可以启动数据库,sqlplus,recovery manager(传说中的RMAN),enterprise manager(传说中的EM)。
2、理解初始化参数:初始化参数是干嘛的?其实,就是数据库实例的配置参数,当你运行statup命令的时候,数据库就会去找指定路径下的spfile(首先找spfile$oracle_sid.ora),如果没有找到再去找spfile.ora,这样的话对于rac来说,所有的是例都是根据同一个参数文件启动的,如果连这个都没有找到,那数据库就去找init$oracle_sid.ora..
对于linux,这个文件的默认路径是$ORACLE_HOME/dbs;
对于windows这个目录是%ORACLE_HOME%\database。
3、如何启动一个非默认初始化参数:我们知道,非默认的初始化参数肯定不在默认的路径里,我们的数据库会去默认路径找参数,怎么办呢?很简单,在默认路径下的默认初始参数里面加上非默认初始参数的文件路径就ok了。比如有这样一个默认的数据文件:spfilemydb.ora 我们可以在里面只加上一句话:spfile=/u01/oreacle/dbs/test_spfile.ora.
4、初始化参数和自动存储管理(ASM):dbca创建一个asm方式管理的数据库的时候,会把初始化参数创建在asm磁盘组,然后会在默认的路径下的参数写一行指向这个磁盘组的文件,跟3一样的。
5、数据库实例启动前的准备:环境变量正确——sqlplus /nolog——conn /as sysdba.到这一步,你已经连接了数据库,并准备启动一个实例。
6、启动并挂载,但是不打开数据库:STARTUP MOUNT.这个操作一般没见过,但是还是很有用的一般在如下方面会用到。(如果之前执行了startup nomount命令,现在就是nomount阶段,可以用命令:ALTER
DATABASE MOUNT。如果之前是是mount但是没有打开数据库,你可以执行如下语句:ALTER DATABASE OPNE)
启动和关闭redo log 的归档模式
执行整个数据库的复原操作
7、以限制模式打开一个实例:STARTUP RESTRICT .只允许本地的管理用户登录,不允许普通用户登录,一般用在如下场景:
执行导入导出数据;
执行一个data load;
执行特定的数据迁移或者数据库升级。
8、完全介质恢复模式启动:如果你知道有一个介质恢复需要去做,当打开一个数据库的时候,可以让恢复进程一起启动运行,命令:STARTUP OPEN RECOVER.
9、只读模式打开数据库:在这种模式下,数据文件和redo log 文件是不能写入的,你可以执行的操作是数据库恢复和改变数据库的状态等操作。并且这里此操作不生成redo 日志。命令:ALTER DATABASE OPEN READ ONLY;默认情况下打开数据库是用的这句(ALTER
DATABASE OPEN READ WRITE)
2、关闭数据库:
1、shutdown normal:如果shutdown不加后面的子句,默认就是这个,一旦执行了这个语句:
不允许新的connections。 等待所有当前连接的用户断开连接。
这就有个问题了,万一某个用户一直不断开,那这个语句就挂在这不动了。。。。所以一般不推荐使用这个语句。
2、shutdown immediate:
不允许新的connections,也不允许新的事物再开始。
任何没有提交的事务都要回滚,如果一个事务很长,这个关闭命令也会等待他回滚完成之后在关闭,所以有时候这个关闭也会等待很长的事务回滚的时间
等待所有当前连接的用户断开连接。
不会等待当前连接的用户断开连接,隐式的回滚当前事务,并且立即断开连接
如果一切正常,再次启动数据库时不需要做任何的实例恢复工作。
3、shutdown transctional
不允许新的connections,也不允许新的事物再开始。
所有的事务都完成,然后所有还跟实例连接的connections都断开。
到这个时候就像是在执行一个shutdown immediate。
4、shutdown abort:
不允许新的connections,也不允许新的事物再开始。
当前正在执行的sql语句立即停止,没有完成的事务立即回滚,立即切断所有的连接。
关闭超时:
如果执行了一个关闭命令一个小时了,还没有反应,那数据库会报错,ORA-01013: user requested cancel of current operation
静默状态的数据库:
只允许dba用户进行查询,获取,或者pl/sql等各种事务,不允许普通用户进行操作,这就是quiescing 。注意此时的dba只能是sys或者system的,不能是被授予了dba角色的普通用户。
静默状态和挂起状态是两种特殊的数据库状态。当数据库处于静默状态时,只有SYS和SYSTEM用户能够在数据库中进行操作。当数据库处于挂起状态时,数据库IO操作都被暂时停止。利用这两种数据库状态,DBA能够完成一些特殊的管理和维护操作。 1:静默状态(quiesced state) 在静默状态下,只有具有DBA权限的用户能够在数据库中执行查询/更新操作,运行PL/SQL程序,任何非DBA用户都不能在数据库中执行任何操作.如果DBA在非静默状态下执行某些操作时,必须排队等待其他用户的活动,这类操作包括如下两类: 1.某些操作在执行过程,如果有其他用户访问操作的对象,该操作将会失败.比如,当DBA正在为某个表添加一个新的字段时,如果有用户恰好正在使用这个表,添加字段的操作将失败. 2.某些操作在执行过程中产生的中间结果不应当被其他用户看到.比如,假设DBA要执行一项分为多个步骤的操作:首先导出一个表的数据,然后删除这个表,最后再重新导入数据建立新的表,以达到重建该表的目的.而如果有某个用户在删除表之后,重建表之前访问这个表,将会得到错误的结果. 如果没有静默功能,要保证成功完成上述类型的操作必须首先关闭数据库,然后再使用受限模式打开数据库.这样做的代价是很大的,尤其是在必须保证数据库不间断运行的环境中.而使用数据库进入静默状态可以快速达到相同的目的,但是却并不需要中断数据库的运行.处于静默状态时只允许SYS和SYSTEM两个DBA操作操作,其他用户即使被授予DBA角色或SYSDBA权限也不能够在静默状态的数据库中进行操作.因此,静默状态是比受限状态更为"干净"的状态. SQL> alter system quiesce restricted; 执行上面的语句后,数据库将等待所有正在运行的非DBA用户会话主动终止,同时不再允许开始任何新的非DBA用户会话。当所有的非DBA用户的活动会话都被成功暂停后,alter 由于等待所有的非DBA用户会话都被终止可能会需要很长一段时间,在这个过程中如果执行alter SQL> alter system unquiesce; 执行上面的语句将从静默状态恢复为正常状态。从静默状态恢复后,所有被暂停的会话和挂起的SQL语句将自动继续执行。可以通过使用动态性能视图V$INSTANCE来查询当前数据库是否处于静默状态。V$INSTANCE.ACTIVE_STATUS字段显示了数据库当前的活动状态: NORMAL正常状态QUIESCING正在进入静默状态(仍然存在活动的非DBA用户会话) 备注:当数据库处于静默状态时,不能通过复制数据文件的方法来对数据库进行备份,因为静默状态中联机数据文件仍然处于读写状态。只能在数据库关闭状态或者挂起状态下才能对数据库物理文件进行复制操作。 2:挂起状态 SQL> ALTER SYSTEM SUSPEND; 上面的语句将数据库处于挂起状态,数据库所有的物理文件(控制文件/数据文件以及重做日志文件)的I/O操作都被暂停。这样能够保证数据库在没有任何I/O操作的情况下进行物理备份。挂起的状态与静默状态的区别是:它并不禁止非DBA用户的数据库操作,只是暂时停止所有用户的I/O操作。 当数据库处于挂起状态时,可以首先为数据库创建磁盘镜像,然后再从镜像中分离出备份文件,这样就提供了一种进行数据库备份和恢复的替代方法。在数据库进入挂起状态时,当前所有的I/O操作能够继续进行,但是所有新提交的I/O不会执行,而是被放入一个等待队列中。一旦数据库恢复到正常状态,这些I/O操作将从队列中取出并继续执行。 在rac环境中,当你执行了这个alter system suspend操作,不会只挂起一个数据库,oracle内部的锁机制会传播这个命令到所有活动的节点实例上,挂起左右的实例,但是如果这个时候正好有人有start了一个实例,这个实例不会被挂起了。 SQL> ALTER SYSTEM RESUME; 这个针对挂起重新启用的语句,suspend和resume可以在rac上不同的实例执行,比如有3个实例分别为1,2,3我们再1上执行了alter system suspend ,对三个实例都挂起了,这时,我们可以在1,2,3上任何一个执行alter system resume。对三个实例进行恢复。 可以通过使用动态性能视图V$INSTANCE来查询当前数据库是否处于挂起状态。V$INSTANCE.DATABASE_STATUS字段显示了数据库当前的活动状态: SUSPENDED挂起状态ACTIVED正常状态(非挂起状态) SQL> ALTER SYSTEM SUSPEND; System altered SQL> SELECT DATABASE_STATUS FROM V$INSTANCE; DATABASE_STATUS --------- SUSPENDED SQL> ALTER SYSTEM RESUME; System altered SQL> SELECT DATABASE_STATUS FROM V$INSTANCE; DATABASE_STATUS --------- ACTIVE |