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新特性)
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就没有)