【数据库管理】②实例管理及数据库启动关闭

这篇具有很好参考价值的文章主要介绍了【数据库管理】②实例管理及数据库启动关闭。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 实例和参数文件

1.1 instance

用于管理和访问 database.

instance 在启动阶段读取初始化参数文件(init parameter files).

1.2 init parameter files

[root@oracle-db-19c ~]# su - oracle
[oracle@oracle-db-19c ~]$ 
[oracle@oracle-db-19c ~]$ cd $ORACLE_HOME/dbs
[oracle@oracle-db-19c dbs]$ pwd
/u01/app/oracle/product/19.3.0/dbhome_1/dbs
[oracle@oracle-db-19c dbs]$ ll
total 10261428
-rw-rw----. 1 oracle oinstall     1544 Mar 30 11:17 hc_cdb1.dat
-rw-r--r--. 1 oracle oinstall     1188 Feb  2 19:19 initcdb1.ora
-rw-r--r--. 1 oracle oinstall     3079 May 14  2015 init.ora
-rw-r--r--. 1 oracle oinstall     3079 May 14  2015 init.ora.bkp
-rw-r-----. 1 oracle oinstall       24 Nov  2 15:03 lkCDB1
-rw-r-----. 1 oracle oinstall     3072 Feb  1 13:41 orapwcdb1
-rw-r-----. 1 oracle oinstall 18989056 Mar 30 11:23 snapcf_cdb1.f
-rw-r-----. 1 oracle oinstall     3584 Mar 30 11:17 spfilecdb1.ora
-rw-r-----. 1 oracle oinstall     3584 Nov 27 16:55 spfilecdb1.ora.bkp
[oracle@oracle-db-19c dbs]$ 

 1.3 pfile

(parameter file)文本初始化参数文件 -- 静态参数文件.

1)文本文件,必须通过编辑器修改参数.

2)修改参数下次重启实例才生效.

3)pfile参数文件可以不在database server上.

命名方式: init+SID.ora

1.4 spfile

(system parameter file)服务器参数文件 -- 动态参数文件.

1)二进制文件,不可以通过编辑器修改.

2)Linux下strings 可以查看 .

3)必须在database server段的指定路径下.
 

[oracle@oracle-db-19c dbs]$ string spfilecdb1.ora

1.5 静态参数和动态参数 (和动态静态参数文件两码事)

在spfile读到内存后,有一部分参数是可以直接在内存中修改,并对当前instance立即生效,这样的参数叫动态参数.除了动态参数都是静态参数.静态参数修改spfile文件.动态参数在instance关闭后失效,而静态参数是下次instance启动后才生效.

1.5.1 修改spfile文件的方法:

alter system set 参数=值 [scope=memory |spfile |both]
alter system reset 参数 [scope=memory |spfile |both] SID='*'  -- 恢复缺省值.

第一种scope=memory 参数修改立刻生效,但不修改spfile文件.

第二种scope=spfile 修改了spfile文件,重启后生效.

第三种scope=both 前两种都要满足.

如果不写scope,即缺省,那就是第三种.

*NOTE: 如果不修改spfile,将无法更改静态参数.

-- 通过查看v$parameter ,可以确定哪些参数可以在memory修改,制定scope.
SQL> desc v$parameter;
 Name                                                                                                              Null?    Type
 ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
 NUM                                                                                                                        NUMBER
 NAME                                                                                                                       VARCHAR2(80)
 TYPE                                                                                                                       NUMBER
 VALUE                                                                                                                      VARCHAR2(4000)
 DISPLAY_VALUE                                                                                                              VARCHAR2(4000)
 DEFAULT_VALUE                                                                                                              VARCHAR2(255)
 ISDEFAULT                                                                                                                  VARCHAR2(9)
 ISSES_MODIFIABLE                                                                                                           VARCHAR2(5)
 ISSYS_MODIFIABLE                                                                                                           VARCHAR2(9)
 ISPDB_MODIFIABLE                                                                                                           VARCHAR2(5)
 ISINSTANCE_MODIFIABLE                                                                                                      VARCHAR2(5)
 ISMODIFIED                                                                                                                 VARCHAR2(10)
 ISADJUSTED                                                                                                                 VARCHAR2(5)
 ISDEPRECATED                                                                                                               VARCHAR2(5)
 ISBASIC                                                                                                                    VARCHAR2(5)
 DESCRIPTION                                                                                                                VARCHAR2(255)
 UPDATE_COMMENT                                                                                                             VARCHAR2(255)
 HASH                                                                                                                       NUMBER
 CON_ID                                                                                                                     NUMBER

SQL> 

1.5.2 ISSYS_MODIFIABLE

SQL> select distinct issys_modifiable from v$parameter;

ISSYS_MODIFIABLE
---------------------------
IMMEDIATE                        -- (动态参数)对应scope=memory
DEFERRED                         -- 其他session有效
FALSE                            -- (静态参数)只能scope=spfile,即修改spfile文件,下次启动才生效.

SQL> 


1.5.3 ISSES_MODIFIABLE

SQL> 
SQL> -- 对应alter session命令,即session级修改
SQL> select distinct isses_modifiable from v$parameter;

ISSES_MODIFIABL
---------------
TRUE
FALSE

SQL> select ISSES_MODIFIABLE, ISSYS_MODIFIABLE from v$parameter where name='sql_trace';

ISSES_MODIFIABL ISSYS_MODIFIABLE
--------------- ---------------------------
TRUE            IMMEDIATE

SQL> -- 这个结果表示 sql_trace参数在session级别可以改,在system级也可以both修改(动态参数).
SQL> 

1.6 startup时读取参数文件

找到$ORACLE_HOME/dbs目录,顺序是优先spfile启动,没有 spfile 才从pfile启动.

1.6.1 查看启动的参数

SQL> 
SQL> show parameter spfile;

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
spfile                               string                            /u01/app/oracle/product/19.3.0
                                                                       /dbhome_1/dbs/spfilecdb1.ora
SQL> -- 如果Value有值 说明是spfile,否则pfile启动

1.6.2 pfile和spfile可以相互生成

SQL> create pfile from spfile;
SQL> create spfile from pfile;
create spfile from pfile
ERROR at line 1:
ORA-32002: cannot create SPFILE already being used by the instance

1.6.3 通过当前内存参数生成pfile和spfile

-- (11g新特性):
SQL> create pfile from memory;
SQL> create spfile from memory;

1.6.4 使用pfile启动

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> 
SQL> startup pfile=$ORACLE_HOME/dbs/initcdb1.ora
ORACLE instance started.

Total System Global Area  629145392 bytes
Fixed Size                  9137968 bytes
Variable Size             406847488 bytes
Database Buffers          197132288 bytes
Redo Buffers               16027648 bytes
Database mounted.
Database opened.
SQL> 
SQL> show parameter spfile

NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
spfile                               string

SQL> -- *NOTE:
SQL> -- 如果使用pfile启动,设置scope=spfile将失败!(因为是pfile启动的)
SQL> -- 但可以设置scope=memory,要修改pfile 文件,使用文本编辑工具.
SQL> show parameter log_buffer

NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
log_buffer                           big integer
15000K
SQL> alter system set log_buffer=1 scope=spfile;
alter system set log_buffer=1 scope=spfile
*
ERROR at line 1:
ORA-32001: write to SPFILE requested but no SPFILE is in use


SQL> -- 设置scope=memory
SQL> show parameter db_16

NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
db_16k_cache_size                    big integer
0
SQL> --- 如果db_16k_cache_size的值不为0的话,则需要执行alter system set db_16k_cache_size=0 scope=memory;
SQL> startup force
ORACLE instance started.

Total System Global Area  629145392 bytes
Fixed Size                  9137968 bytes
Variable Size             419430400 bytes
Database Buffers          184549376 bytes
Redo Buffers               16027648 bytes
Database mounted.
Database opened.
SQL> 

2. 数据库启动与关闭

2.1 启动分为三个阶段

【数据库管理】②实例管理及数据库启动关闭

 2.1.1 nomount阶段

实例启动,读取init parameter

SQL> 
SQL> startup nomount;
ORACLE instance started.

Total System Global Area  629145392 bytes
Fixed Size                  9137968 bytes
Variable Size             419430400 bytes
Database Buffers          184549376 bytes
Redo Buffers               16027648 bytes
SQL> -- (这条命令很实用,是看当前数据库启动的状态,有三个 started, mounted, open.)
SQL> select status from v$instance;

STATUS
------------------------------------
STARTED

SQL> 

2.1.2 mount阶段:

读取控制文件

SQL> alter database mount;

Database altered.

SQL> -- 刻意将数据库状态改成mounted
SQL> select status from v$instance;

STATUS
------------------------------------
MOUNTED

SQL> 

2.1.3 open阶段:

1、检查所有的datafile、redo log、 group 、password file.

2、检查数据库的一致性(controlfile、datafile、redo file的检查点是否一致)

SQL> alter database open;

Database altered.

SQL> -- 刻意将数据库状态改成open
SQL> select file#, checkpoint_change# from v$datafile;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1           23854725
         3           23854725
         4           23854725
         5            2160789
         6            2160789
         7           23854725
         8            2160789
         9           23854867
        10           23854867
        11           23854867
        12           23854867

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
        13           23854861
        14           23854861
        15           23854861
        16           23854861
        85           23854867
       126           23854867
       127           23854867
       154           23854867
       155           23854725
       162           21742070
       163           23854867

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
       164           21742070
       165           21742070
       166           21742070
       169           23854867
       181           23854867

27 rows selected.

SQL> -- 从控制文件读出
SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
          23854725

SQL> -- 从控制文件读出
SQL> select file#, checkpoint_change# from v$datafile_header;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1           23854725
         3           23854725
         4           23854725
         5            2160789
         6            2160789
         7           23854725
         8            2160789
         9           23854867
        10           23854867
        11           23854867
        12           23854867

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
        13           23854861
        14           23854861
        15           23854861
        16           23854861
        85           23854867
       126           23854867
       127           23854867
       154           23854867
       155           23854725
       162           21742070
       163           23854867

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
       164           21742070
       165           21742070
       166           21742070
       169           23854867
       181           23854867

27 rows selected.

SQL> -- 从 datafile header 读出
SQL> -- 数据库open之前要检查controlfile所记录SCN和datafile header 记录的SCN是否一致;一致就正常打开库,不一致需要做media recover
SQL> select status from v$instance;

STATUS
------------------------------------
OPEN

SQL> 

2.2 启动数据库时的特殊选项

SQL> alter database open read only;
SQL> startup force
SQL> startup upgrade						-- (只有sysdba能连接)
SQL> startup restrict						-- (有restrict session权限才可登录,sys不受限制)
SQL> alter system enable restricted session;-- (open后再限制)

2.3 实例关闭shutdown:

SQL> shutdown normal:					-- 拒绝新的连接,等待当前事务结束,等待当前会话结束,生成检查点
SQL> shutdown transactional:			-- 拒绝新的连接,等待当前事务结束,生成检查点
SQL> shutdown immediate:				-- 拒绝新的连接,未提交的事务回滚,生成检查点
SQL> shutdown abort(startup force):		-- 事务不回滚,不生成检查点,下次启动需要做 instance  recovery

【数据库管理】②实例管理及数据库启动关闭

 *NOTE: shutdown abort 不会损坏database. -- 实例保护

 如下是关闭选项

2.3.1 SHUTDOWN NORMAL

如果不指定模式,则默认关闭模式为NORMAL.正常关闭数据库时会发生以下情况:

• 不可以建立新连接.

• Oracle 服务器在完成关闭之前先等待所有用户断开连接.

• 数据库和重做缓冲区被写入磁盘.

• 后台进程终止,从内存中删除SGA.

• Oracle 服务器在关闭实例之前关闭并卸装数据库.

• 下一次启动不需要进行实例恢复.

2.3.2 SHUTDOWN TRANSACTIONAL

采用TRANSACTIONAL 关闭方式可防止客户机丢失数据,其中包括客户端当前活动的结果.执行事务处理数据库关闭时会发生以下情况:

 

• 任何客户机都不能在这个特定实例上启动新事务处理.

• 会在客户机结束正在进行的事务处理后断开客户机.

• 完成所有事务处理后立即执行关闭.

• 下一次启动不需要进行实例恢复.

 2.3.3 SHUTDOWN IMMEDIATE

采用IMMEDIATE 关闭模式会出现以下情况:

• Oracle DB 正在处理的当前SQL 语句不会完成执行.

• Oracle 服务器不会等待当前连接到数据库的用户断开连接.

• Oracle 服务器会回退活动的事务处理,并会断开所有连接用户.

• Oracle 服务器在关闭实例之前关闭并卸装数据库.

• 下一次启动不需要进行实例恢复.

注:IMMEDIATE 是使用Enterprise Manager 时的默认关闭模式.

2.3.4 SHUTDOWN ABORT

如果NORMAL、TRANSACTIONAL 和IMMEDIATE 关闭模式都不起作用,则可以选择中止当前的数据库实例.中止实例时会发生以下情况:

• Oracle DB 正在处理的当前SQL 语句会立即终止.

• Oracle 服务器不等待当前连接到数据库的用户断开连接.

• 数据库和重做缓冲区未写入磁盘.

-- Dirty buffers in the buffer cache and unwritten redo are not written to the data files and redo log files respectively

• 不回退未提交的事务处理.

• 实例终止,但不关闭文件.

• 数据库未关闭或未卸装.

• 下一次启动时需要进行实例恢复,实例恢复是自动进行的.

 注:不建议备份处于不一致状态的数据库.

3. 自动诊断信息库ADR

11g新特性:Automatic Diagnostic Repository

存储在操作系统下的一个目录(树)结构,包括: 预警日志文件,跟踪文件,健康检查,DUMP 转储文件等

11g 用 DIAGNOSTIC_DEST 一个参数代替了许多老版本的参数,如 BACKGROUND_DUMP_DEST,CORE_DUMP_DEST,USER_DUMP_DEST等.

3.1 ADR的基目录

[oracle@oracle-db-19c ~]$ 
[oracle@oracle-db-19c ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Mar 30 14:43:44 2023
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> show user;
USER is "SYS"
SQL> 
SQL> set pagesize 200 linesize 200
SQL> 
SQL> show parameter diag

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
diagnostic_dest                      string                            /u01/app/oracle

-- NOTE:  这是ADR的基目录
-- 如果你设置了ORACLE_BASE环境变量,则diagnostic_dest默认值被设置为同样的目录,否则oracle设置的目录是$ORALE_HOME/log

SQL> show parameter dump

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
background_core_dump                 string                            partial
background_dump_dest                 string                            /u01/app/oracle/product/19.3.0
                                                                       /dbhome_1/rdbms/log
core_dump_dest                       string                            /u01/app/oracle/diag/rdbms/cdb
                                                                       1/cdb1/cdump
max_dump_file_size                   string                            unlimited
shadow_core_dump                     string                            partial
user_dump_dest                       string                            /u01/app/oracle/product/19.3.0
                                                                       /dbhome_1/rdbms/log
SQL> 

 在 oracle 11g 中,故障诊断及跟踪的文件路径改变较大,告警文件分别以两种文件格式存在,xml的文件格式和普通文本格式.这两份文件的位置分别是V$DIAG_INFO中的Diag Alert 和Diag Trace 对应的目录.

熟悉9i的话,会发现11g将bdump和udump合并到一个目录/u01/diag/rdbms/XXXX/trace下了.

-- 其命名方法依然是
Background Trace Files	(针对background process) : 	SID_processname_PID.trc	如: orcl_m001_5616.trc 
User Trace Files		(针对server process) : 		SID_ora_PID.trc  		如: orcl_ora_6278.trc
-- 另外增加.trm(trace map)文件,记录trc文件的结构信息.

SQL> col NAME format a20
SQL> col VALUE format a30
SQL> col INST_ID default
SQL> select * from V$DIAG_INFO;

   INST_ID NAME                 VALUE                              CON_ID
---------- -------------------- ------------------------------ ----------
         1 Diag Enabled         TRUE                                    0
         1 ADR Base             /u01/app/oracle                         0
         1 ADR Home             /u01/app/oracle/diag/rdbms/cdb          0
                                1/cdb1

         1 Diag Trace           /u01/app/oracle/diag/rdbms/cdb          0
                                1/cdb1/trace

         1 Diag Alert           /u01/app/oracle/diag/rdbms/cdb          0
                                1/cdb1/alert

         1 Diag Incident        /u01/app/oracle/diag/rdbms/cdb          0
                                1/cdb1/incident

         1 Diag Cdump           /u01/app/oracle/diag/rdbms/cdb          0
                                1/cdb1/cdump

         1 Health Monitor       /u01/app/oracle/diag/rdbms/cdb          0
                                1/cdb1/hm

         1 Default Trace File   /u01/app/oracle/diag/rdbms/cdb          0
                                1/cdb1/trace/cdb1_ora_60719.tr
                                c

         1 Active Problem Count 0                                       0
         1 Active Incident Coun 0                                       0
           t

         1 ORACLE_HOME          /u01/app/oracle/product/19.3.0          0
                                /dbhome_1


12 rows selected.

SQL> 

 3.2 Diag Trace

其中Diag Trace对应的目录里为文本格式的告警日志和跟踪文件,并沿用在10g中命名方法

告警日志:alter_SID.log 包含通知性的消息,如数据库启动或关闭,以及有关 TBS创建和删除的信息,也包括一些内部错误信息等.

alter_SID.log不断增长,定期清理是必要的

$cat dev/null > alert_orcl.log	# 将文件清空或
$rm alter_orcl.log              # 删掉也没有关系,下次启动会自动创建(NOTE)

检查告警日志和跟踪文件的有关错误信息的记录,如LGWR不能写日志组时,会创建一个跟踪文件,并将一条信息放入告警日志.

 

[oracle@oracle-db-19c log]$ pwd
/u01/app/oracle/product/19.3.0/dbhome_1/rdbms/log
[oracle@oracle-db-19c log]$ tail -f alert_cdb1.log 
Wed Nov 30 10:26:15 2022
Process termination requested for pid 2613 [source = rdbms], [info = 2] [request issued by pid: 2607, uid: 1501]

^C
[oracle@oracle-db-19c log]$

 3.3 查看预警日志

 每个数据库都有一个alert_sid.log文件.此文件位于数据库所在的服务器中,如果设置了ORACLE_BASE,则此文件默认存储在相同的目录$ORACLE_BASE/diag/rdbms/db_name/SID/trace中.

使用以下命令可以查询警告日志位置

SQL> SHOW PARAMETER BACKGROUND_DUMP_DEST;

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
background_dump_dest                 string                            /u01/app/oracle/product/19.3.0
                                                                       /dbhome_1/rdbms/log
SQL> 

 数据库预警文件是按时间顺序列出消息的日志文件,例如:

l 启动时使用的任何非默认初始化参数

l 已发生的所有Internal Error内部错误(ORA-600)、data block corrupted块损坏错误(ORA-1578)和deadlock errors死锁错误(ORA-60)

l 管理操作,如SQL 语句CREATE、ALTER、DROP DATABASE 和TABLESPACE,以及Enterprise Manager 或SQL*Plus 语句STARTUP、SHUTDOWN 、ARCHIVE LOG和RECOVER

l 与共享服务器和分派程序进程的功能相关的多个消息和错误

l 自动刷新实体化视图时发生的错误

Oracle DB 使用预警日志来保留这些事件的记录,以此作为在操作员控制台上显示这些信息的替代方法.(许多系统会同时在控制台中显示这些信息).例如管理操作成功完成,系统会将”completed(已完成)”消息和一个时间戳写入预警日志中.

Enterprise Manager 可监视预警日志文件,并向你通知严重的错误.你还可以查看日志,以检查不严重的错误和参考性消息.由于预警文件会增长到无法管理的大小,因此可以定期备份该文件,并删除当前的预警文件.当数据库尝试再次写入预警文件时,会重新创建一个新预警文件.

注:$ORACLE_BASE/diag/rdbms/db_name/SID/alert 目录中有一个XML 版本的预警日志.

 

3.4 DDL Log(12c新特性)

 

在之前的版本中没有可选方法来对DDL操作进行日志记录.而在12c R1中,可以将DDL操作写入xml和日志文件中.这对于了解谁在什么时间执行了create或drop命令是十分有用的.要开启这一功能必须对ENABLE_DDL_LOGGING 初始参数加以配置.这一参数可以在数据库或会话级别设置.当此参数为启用状态,一些DDL命令会记录在$ORACLE_BASE/diag/rdbms/DBNAME/log/ddl 路径下(非alert log里)的xml和日志文件中.一个xml中包含DDL命令,IP地址,时间戳等信息.这可以帮助确定在什么时候对用户或表进行了删除或是一条DDL语句在何时触发.

The DDL log is a file that has the same format and basic behavior as the alert log, but it only contains the DDL statements issued by the database. The DDL log is created only for the RDBMS component and only if the ENABLE_DDL_LOGGING initialization parameter is set to true. When this parameter is set to false, DDL statements are not included in any log.

The DDL log contains one log record for each DDL statement issued by the database. The DDL log is included in IPS incident packages.

There are two DDL logs that contain the same information. One is an XML file, and the other is a text file. The DDL log is stored in the log/ddl subdirectory of the ADR home.

When ENABLE_DDL_LOGGING is set to true, the following DDL statements are written to the log:
 

l ALTER/CREATE/DROP/TRUNCATE CLUSTER

l ALTER/CREATE/DROP FUNCTION

l ALTER/CREATE/DROP INDEX

l ALTER/CREATE/DROP OUTLINE

l ALTER/CREATE/DROP PACKAGE

l ALTER/CREATE/DROP PACKAGE BODY

l ALTER/CREATE/DROP PROCEDURE

l ALTER/CREATE/DROP PROFILE

l ALTER/CREATE/DROP SEQUENCE

l CREATE/DROP SYNONYM

l ALTER/CREATE/DROP/RENAME/TRUNCATE TABLE

l ALTER/CREATE/DROP TRIGGER

l ALTER/CREATE/DROP TYPE

l ALTER/CREATE/DROP TYPE BODY

l DROP USER

l ALTER/CREATE/DROP VIEW

SQL> ALTER SYSTEM|SESSION SET ENABLE_DDL_LOGGING=TRUE;
-- 以下的DDL语句可能会记录在xml或日志文件中:
CREATE|ALTER|DROP|TRUNCATE TABLE
DROP USER
CREATE|ALTER|DROP PACKAGE|FUNCTION|VIEW|SYNONYM|SEQUENCE
-- ADR的概述在053试题中较多,因为它涉及了11g在数据库自动管理方面的一些重要知识,如度量、阀值、预警系统、健康监测等等

 4. 口令文件

PASSWORD FILE

oracle登录认证方式有多种

4.1 sys的两种常用的登录认证方式

OS认证(本地认证、操作系统认证)和口令文件认证.

1).OS认证

:本地认证方式.Oracle不验证用户密码,前提:用户必须属于DBA组,且使用本地登录.

如: sqlplus a / as sysdba

2).口令文件认证

:是一种网络远程认证方式,只有sysdba权限的用户可以使用口令文件,必须输入密码和网络连接符.

如: sqlplus sys/PWD@orcl as sysdba

4.2 普通用户登录

普通用户是指没有sysdba权限的用户,比如system、scott,登录都必须输入口令,不管是本地或者远程,它们的口令密码不是以文件形式存放的,而是由 oracle保管在其内部的数据字典里.

本节讨论的口令文件是 sysdba 用户的远程登录认证密码文件,主要用于 sys 用户远程登录的认证.

位置: $ORACLE_HOME/dbs/orapwSID, 所谓口令文件,指的就是sys的口令文件,可以通过 remote_login_passwordfile参数控制是否生效

4.3 remote_login_passwordfile

none		-- 拒绝sys用户从远程连接
exclusive	-- sys用户可以从远程连接
share		-- 多个库可以共享口令文件
SQL> show parameter rem
NAME							TYPE			VALUE
------------------------------	------------	-----------------------------------
remote_dependencies_mode		string			TIMESTAMP
remote_listener					string
remote_login_passwordfile		string			EXCLUSIVE
remote_os_authent				boolean	FALSE
remote_os_roles					boolean	FALSE
result_cache_remote_expiration	integer	0

4.4 sec_case_sensitive_logon

通过设置参数为TURE,可以让口令是大小写敏感的(11g新特性)文章来源地址https://www.toymoban.com/news/detail-401081.html

SQL> 
SQL> show parameter case

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
sec_case_sensitive_logon             boolean                           TRUE
SQL> 

4.5 重建口令文件

[oracle@oracle-db-19c ~] $ cd $ORACLE_HOME/dbs
[oracle@oracle-db-19c dbs] $ ll
total 32
-rw-rw---1 oracle oinstall 1544 Sep 13 22:36 hc_orcl.dat
-rw-r--r-- 1 oracle oinstall 2992 Feb 3 2012 init.ora
-rw-r--r-- 1 oracle oinstall 1026 Sep 12 22:14 initorcl.ora
-rw-r----- 1 oracle oinstall   24 Aug 18 22:02 lkORCL
-rw-r----- 1 oracle oinstall 7680 Aug 18 22:08 orapworcl
-rw-r----- 1 oracle oinstall 2165 Aug 18 22:02 orcl.ora
-rw-r----- 1 oracle oinstall 3584 Sep 13 22:38 spfileorcl.ora
-- $ORACLE_HOME/dbs放参数文件和(sys)口令文件的地方, orapworcl就是sys口令文件
-- 你可以先删掉它,再创建它: 使用orapwd命令创建新的sys口令文件:
[oracle@oracle-db-19c dbs]$ rm orapworcl	-- 删除sys口令文件
-- 远程无法登陆sql
-- 重新建立口令文件
-- 注意:  file=orapw+sid的写法
[oracle@oracle-db-19c dbs]$ orapwd file=orapworcl password=Oracle#2020 entries=5 force=y		
-- entries的含义是表示口令文件中可包含的SYSDBA/SYSOPER权限登录的最大用户数5.

5. 恢复scott 案例

-- 如果scott用户被误删,可以通过执行下列脚本重新建立.
SQL> drop user scott cascade;
SQL> @$ORACLE_HOME/rdbms/admin/utlsampl.sql
-- (不是所有案例都有恢复脚本,HR就没有)

到了这里,关于【数据库管理】②实例管理及数据库启动关闭的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包