Oracle数据库管理

Oracle数据库管理

版本适用范围

Oracle 12.2

环境变量

通过setenv或者export设置ORACLE_HOME和ORACLE_SID

1
2
3
setenv ORACLE_SID orcl
setenv ORACLE_HOME /u01/app/oracle/product/12.1.0/db_1
setenv LD_LIBRARY_PATH $ ORACLE_HOME / lib:/ usr / lib:/ usr / dt / lib:/ usr / openwin / lib:/ usr / ccs / lib

连接到数据库

1.无登陆的方式

sqlplus / nolog

2.以最高权限登陆,操作系统认证的方式进行连接,不需要密码。

需要设置最高权限的用户组,并且切换到该用户下。多实例的情况下需要切换SID

sqlplus / as sysdba

切换SID

export ORACLE_SID=[SID]

3.切换连接

连接到sqlplus后,更改用户

conn 账户/密码

切换到远程数据库

connect [用户名]@”[IP/域名]:[端口]/[数据库服务名]”

connect apps@”10.38.1.140:1552/DEV”

conn apps@”10.38.1.140:1552/DEV”

查询数据库版本号

SELECT *
FROM product_component_version;

image.png

ORACLE参数

初始化参数

初始化参数文件

对于任意参数文件的修改,都需要重启数据库实例后才会生效。

参数文件存放于 $ORACLE_HOME/dbs 目录下,并且文件名为 init[SID].ora

如:下图,其中initTest.ora是初始化的参数文件

image.png

查看初始化参数

show parameter [参数选项]

可用参数选项如下

image.png

例如:查看重做日志表空间

show parameter undo_tablespace

修改初始化参数

使用 alter session set [参数] = [参数值] 进行当前会话临时修改,不会影响其他会话,该参数也不会被保存。

如修改当前会话的日期格式

ALTER SESSION SET NLS_DATE_FORMAT = ‘yyyy-mm-dd hh24:mi:ss’;

从动态性能视图中查询所有的初始化参数

SELECT *
FROM v$parameter;

结果如下:

image.png

该视图的说明

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/refrn/V-PARAMETER.html#GUID-C86F3AB0-1191-447F-8EDF-4727D8693754

服务器参数

服务器参数文件

  • pfile:文本文件,可以直接修改
  • spfile:二进制保存,只能通过命令修改

持久化存放在 $ORACLE_HOME/dbs 目录下,并且由初始化参数文件中的 SPFILE 参数指定,并且文件名为 spfile[SID].ora 或默认的 spfile.ora

image.png

Oracle启动过程

在Oracle启动实例时,会先启动进程加载参数文件,然后根据参数加载实例。

如果创建了spfile,则oracle会使用启动进程,并从spfile中加载数据库配置;如果没有则直接加载初始化参数文件。

查询是否启用spfile

如果查询不为空则启用spfile

SELECT name,value FROM v$parameter WHERE name=’spfile’;

image.png

修改参数文件

Alter system set parameter=value <comment=’text’> <scope=memory|spfile|both> <sid=’sid|*’>

查看参数文件

如果value不为空,则启用服务器参数文件

image.png

这个图可以发现,没有持久化服务器参数文件。

常用视图

静态数据字典

权限控制

  • dba_[表名]:显示所有对象,仅允许有dba权限的用户访问
  • all_[表名]:显示所有用户下的对象,允许跨用户访问(如果有权限)
  • user_[表名]:仅显示当前用户下的对象
  • cdb_[表名]:如果启用多租户架构的容器数据库,则可以跨租户查看(如果有权限)

数据库对象

  • ALL_ALL_TABLES:当前用户可以访问的所有表
  • ALL_ARGUMENTS:当前用户可以访问的所有函数和过程
  • ALL_CATALOG:当前用户可访问的表,聚类,视图,同义词和序列
  • ALL_COL_COMMENTS:当前用户下所有存在注释的字段
  • ALL_COLL_TYPES:当前用户下可访问的所有集合类型
  • ALL_CONS_COLUMNS:当前用户下可以访问的包含约束的字段
  • ALL_CONSTRAINTS:当前用户下可以访问的所有表中的约束
  • ALL_DB_LINKS:当前用户下可以访问的所有dblink
  • ALL_DEPENDENCIES:当前用户下所有的依赖关系,注意查询时 referenced_link_name 不要为空
  • ALL_ERRORS:查询当前用户下所有对象的异常信息,根据字段 sequence 排序
  • ALL_IND_COLUMNS:查看当前用户下包含索引的列
  • ALL_INDEXES:当前用户下全部索引
  • ALL_JOBS:当前用户下所有定时任务
  • ALL_OBJECTS:当前用户下所有对象
  • ALL_SOURCE:查看所有package中的函数定义

数据库文件

  • ALL_DIRECTORIES:当前用户下可以访问的文件目录

动态性能视图

动态性能视图以 v$开头

只有dba权限的用户能够访问,每一个性能视图都是由数据库实例都是动态生成的,无法进行更新。

  • V$INSTANCE:当前数据库实例

  • V$SGA:查看SGA信息

  • V$SGAINFO:查看SGA详细信息

  • V$PARAMETER:查看初始化参数

  • V$VERSION:查看数据库版本

  • V$OPTION:查看数据库产品信息

  • V$SESSION:查看会话信息

  • V$PROCESS:查看进程信息

  • V$LOCK:查看占有锁的会话

  • V$TABLESPACE:表空间信息

  • v$parameter:查看所有参数信息

  • 数据文件

    • V$CONTROLFILE:控制文件路径
    • V$DATAFILE:数据文件路径
    • V$LOGFILE:日志文件路径
  • SQL

    • v$sql:执行过的sql详细信息
    • v$sqltext:sql文本,可以与上面的表关联
    • 注意:并不是所有的 SQL 语句都可以从 V$SQL 中找到,因为 ORACLE 会动态地
      更新共享池的信息,将一些过旧的 SQL 从共享池中删除

SQL 的解析的过程中,会把硬解析之后的 SQL 放在放在共享池中,如果我们清空了共享池,那么就需要重新做硬分析。

alter system flush shared_pool;

查看sql性能

select * from v$sql ;

SELECT sql_text,
cpu_time / (1000 * 1000) t_cpu,
TRUNC (elapsed_time / (1000 * 1000)) t_elap,
(cpu_time / elapsed_time / (1000 * 1000)) * 100 pct
FROM v$sql
WHERE sql_text LIKE ‘SELECT OFFER_GROUP_ID_SEQ.NEXTVAL FROM DUA%’;

对于已经执行完毕的会话,可以在 V$SQL 视图中找到它的执行时间和消耗的 CPU 时间,这些信息对我们分析一些性能上存在问题的 SQL 有用处。比如对比 SQL 消耗的 CPU 和执行时间,就可以大致知道 SQL 语句执行中是否有长时间的等待事件:

官方参考手册

1.Database Administrator’s Guide

官方文档 https://docs.oracle.com/en/database/oracle/oracle-database/12.2/admin/getting-started-with-database-administration.html#GUID-9563BFC5-2A73-4271-9108-B4149018B8AD

2.Database Reference

官方文档 https://docs.oracle.com/en/database/oracle/oracle-database/12.2/refrn/basic-initialization-parameters.html#GUID-D75F1A77-47E2-4F35-B145-44B3A10ED85C

0%