本节实验主要介绍了相应的连接实例,包括了如何进行初始化参数文件、数据库的启动关闭操作以及如何查看日志和动态性能视图。
-
连接实例
-
初始化参数文件
-
启动和关闭数据库实例
-
查看日志
-
动态性能视图
在进行数据库操作时,首先需要了解的就是怎么连接实例,在前面我们已经使用过很多方式连接过,这里总结一下。
在连接实例时会进行身份验证,普通用户登录需要提供用户名和密码,用数据字典进行身份验证。如下使用 system 用户进行登录:
SQL> connect system/Syl12345
如果以 sysdba 权限或者 sysoper 权限连接数据库,在验证身份时不需要打开数据库,它的验证方式是将用户名和所提供的密码散列和外部密码文件中存储的值进行比较,或者使用操作系统身份进行验证。
例:
首先在终端输入如下命令进入 sqlplus。
$sqlplus /nolog
使用
/nolog
是为了进入 sqlplus 时不提示马上输入用户名和密码连接实例。
然后就可以使用如下几种方式连接实例:
--以 sysdba 权限连接,使用密码文件验证方式
SQL> conn system/Syl12345 as sysdba
--以 sysoper 权限连接,使用密码文件验证方式
SQL> conn system/Syl12345 as sysoper
--以 sysdba 权限连接,使用操作系统身份验证
SQL> conn / as sysdba
--以 sysoper 权限连接,使用操作系统身份验证
SQL> conn / as sysoper
如果最后一句报错,是因为当前操作系统身份没有授予 sysoper 权限。
conn / as sysdba
登入后的用户名为SYS
,可以使用show user
查看当前连接实例的用户名。
conn / as sysoper
登入后的用户名为PUBLIC
。
实例是根据参数文件中的定义(由 SMON 进程读取)在内存中构建的。参数文件有两类:
- 静态参数文件(pfile或初始文件),客户端文件。可以使用编辑器编辑。
- 动态服务器参数文件(spfile),服务端文件。不可以使用编辑器编辑。
spfile
文件默认是 <ORACLE_HOME>/dbs/spfile<SID>.ora
。用如下命令可以看到 <ORACLE_HOME>/dbs/
目录下有这个文件。
$ ls $ORACLE_HOME/dbs/
从 v$parameter
和 v$spparameter
里可以查看到参数及其对应的值。
SQL> select name,value from v$parameter;
SQL> select name,value from v$spparameter;
可以看到两者的结果有所区别。
v$parameter
中是当前运行的实例中生效的参数值。v$spparameter
中是spfile
中存储的值。产生这种区别的原因是有些参数可以在实例运行时更改,我们更改了,但并未保存到 spfile 中。
未保存到 spfile 的更改,在实例停止时失效。保存到 spfile 的更改,在下次启动实例时依然生效。
v$parameter
每列的说明可参见 v$parameter
查看有哪些初始化参数可参考 Parameter by Function Category
基本初始化参数是应该为每个数据库使用的参数。如下命令可查看基本参数及其当前值:
SQL> select name,value from v$parameter where isbasic='TRUE';
更多有关基本初始化参数可参考 基本初始化参数-官方文档
更改参数可以使用:
ALTER SYSTEM
系统级别的更改ALTER SESSION
会话几倍的更改
ALTER SYSTEM
的语法如下:
ALTER SYSTEM SET <name>=<value> SCOPE=MEMORY | SPFILE | BOTH
SCOPE
用于确定实在哪里进行修改。默认为BOTH
,即应用于运行着的实例并写入 spfile。
MEMORY
:修改内存中此参数的值。这个修改不是永久的,数据库关闭并重新启动,值会变为默认值。SPFILE
:修改 spfile 文件中此参数的值。这个修改是永久的。更改静态参数(也就是启动实例后不可更改,固定下来的参数)必须指定SCOPE=SPFILE
。
参数可以使用哪种方式修改可参考 修改参数-官方文档 。也可以在 v$parameter
中查看
(参见v$parameter )。
例一:更改 sql_trace
参数的值 。
首先查看此参数的当前值。
SQL> select name,value from v$parameter where name='sql_trace';
NAME VALUE
----------- ----------
sql_trace FALSE
然后更改其在内存中的值。
--更改为 TRUE
SQL> alter system set sql_trace=TRUE scope=memory;
--查看其值
SQL> select name,value from v$parameter where name='sql_trace';
--更改为 FALSE
SQL> alter system set sql_trace=FALSE scope=memory;
例二:更改 processes
参数值。
更改其值为 400 。
SQL> alter system set processes=400;
会报错
ORA-02095: 无法修改指定的初始化参数
。因为processes
是静态参数。必须指定SCOPE=SPFILE
。
如下是正确修改方式:
--修改为 400
SQL> alter system set processes=400 scope=spfile;
--查看其值
SQL> select name,value from v$spparameter where name='processes';
--修改为 300
SQL> alter system set processes=300 scope=spfile;
例三:修改当前会话中 sql_trace
的值。
--查看其值
SQL> show parameter sql_trace;
NAME TYPE VALUE
------------ -------- ---------
sql_trace boolean FALSE
--修改其值为 TRUE
SQL> alter session set sql_trace=TRUE;
--修改其值为 FALSE
SQL> alter session set sql_trace=FALSE;
SHUTDOWN
:关闭与数据库相关的所有文件,实例不存在。NOMOUNT
:根据参数文件的定义在内存中构建实例。实例启动。MOUNT
:读取控制文件(由control_files
参数定位)。此时数据库是关闭的。OPEN
:打开数据库。
关闭的过程与启动相反。有关数据库启动和关闭更多内容可参见 Overview of Database Instance Startup and Shutdown
下面来实际操作数据库实例的启动和关闭。
- 启动和关闭需要 sysdba 权限,所以首先以 sysdba 权限连接实例:
SQL> conn system/Syl12345 as sysdba;
- 如果此时实例是启动状态,我们先将其关闭:
SQL> shutdown immediate;
- 需要等待一段时间。待其关闭后执行如下命令只启动实例:
SQL> startup nomount;
ORACLE 例程已经启动。
Total System Global Area 3841982464 bytes
Fixed Size 8753768 bytes
Variable Size 872418712 bytes
Database Buffers 2952790016 bytes
Redo Buffers 8019968 bytes
- 实例启动后,执行如下命令加载数据库:
SQL> alter database mount;
数据库已更改。
- 接着打开数据库:
SQL> alter database open;
数据库已更改。
此时,数据库已经打开。我们可以使用如下命令确认数据库是否已经打开:
SQL> select open_mode from v$database;
OPEN_MODE
----------------------------------------
READ WRITE
READ WRITE
说明已经打开。
以上所有步骤可以使用 startup force
一步完成。上述分阶段启动的好处是可以对不同阶段进行控制,比如控制文件损坏,我们可以停留在 NOMOUNT 阶段,把控制文件修复过后,再继续启动。
警报日志由 DIAGNOSTIC_DEST
参数确定,它提供数据库消息和错误信息(按时间排序)。下面命令查看警报日志的位置:
SQL> select name,value from v$spparameter where name='diagnostic_dest';
警报日志所在默认目录为
DIAGNOSTIC_DEST/diag/rdms/<dbname>/<instancename>/trace
。
DDL 日志记录的是 DDL 命令。DDL 日志默认是停止的,首先要设置 enable_ddl_logging
参数值以启用:
--启用
SQL> alter system set enable_ddl_logging=TRUE;
--查看其值
SQL> select name,value from v$parameter where name='enable_ddl_logging';
DDL 日志所在的默认目录为
DIAGNOSTIC_DEST/diag/rdbms/<dbname>/<instancename>/log
下。
Oracle 包含一组由数据库服务器维护并可供数据库管理员用户 SYS 访问的基础视图。这些视图被称为动态性能视图,因为它们在数据库处于打开和使用状态时不断更新,其内容主要与性能有关。这些视图提供有关内部磁盘结构和内存结构的数据。我们可以从这些视图中进行查询,但不能更新或更改它们。
(此段参考自 About Dynamic Performance Views-官方文档 )
我们在之前用到了很多 v$
为前缀的东西去查询一些信息,可能你会以为它是视图,实际上它并不是视图,而是某个视图的同义词。比如 v$parameter
实际上是 v_$parameter
视图的同义词。
Oracle 中有很多动态性能视图,可以参考 动态性能视图-官方文档
也可以用如下命令查看有哪些以 v$
开头的动态性能视图:
SQL> select * from v$fixed_table where name like 'V$%';
例一:用数据字典和动态性能视图查询数据库包含的表空间和数据文件。
--使用数据字典查询
SQL> select tablespace_name from dba_tablespaces;
--使用动态性能图查询
SQL> select name from v$tablespace;
例二:查询控制文件位置。
SQL> select * from v$parameter where name='control_files';
或者
SQL> select * from v$controlfile;