Oracle数据库学习
#前言
参考资料:
Oracle官方文档
#Schema
Schema 是表, 索引, 存储过程等等数据库对象(DB Object)的存储容器
用户与 Schema 之间是一对一的关系
例如: 访问用户 A 的 xxx 对象就通过 A.xxx

#Oracle 表空间
表空间是逻辑上, 存放数据表的容器
每张表一定属于某个表空间
每个用户(Schema)可以拥有多个表空间, 而且都有一个默认表空间
用户之间可以通过共享表空间的方式共享数据表
物理上, 表空间的存储可能不是连续的
#PL/SQL
- A primary benefit of PL/SQL is the ability to store application logic in the database itself.
#Oracle 体系结构 (重要)
- Oracle Server = Oracle Instance + Oracle Database
#1. Oracle 实例 (Oracle Instance)
Oracle Instance = SGA(system global area) + Background Process
是一组 OS 进程(线程)和一些内存(SGA) 的总称
可以用来 mount 和 open 一个数据库
一个实例在其生存期中最多只能装载和打开一个数据库。要想再打开这个(或其他)数据库,必须先丢弃这个实例,并创建一个新的实例。
一个数据库实例的状态分为以下几种
startedmountedopenclosemountedopen
#started 状态
在执行startup nomount命令后, Oracle 会执行以下操作, 之后实例会进入started状态, 此时实例还未绑定数据库
读取配置文件
分配
SGA启动后台进程
打开一些用于记录的文件
#mounted 状态
在执行startup mount或者alter database mount命令后, 实例会进入mounted状态, 对应数据库的 open_mode 也是mounted。
数据库打开后, 执行alter database close命令后, 实例也会进入mounted状态, 对应数据库的 open_mode 也是mounted。
此时实例与数据库建立了联系, 但是只有 DBA 能够访问数据库。
#open 状态
在执行startup或者alter database open命令后, 实例会进入open状态。
此时实例与数据库建立了联系, 数据库完全启动, 普通用户也可以访问数据库。
#2. Oracle 数据库 (Oracle Database)
Oracle Database = Controlfile + datafile + logfile + spfile + …
是存储在磁盘上的一组数据文件的集合
一般来说, 一个数据库上只有一个实例对其进行操作
但是也有例外: RAC(Real Application Clusters)就允许在集群环境中的多台计算机上操作,这样就可以有多台实例同时装载并打开一个数据库(位于一组共享物理磁盘上)
例外 2: 容器式数据库
#3. Oracle 数据库和Oracle 实例的关系
一个实例一生只能够装载及打开一个数据库
一个数据库能够被多个实例装载并打开(RAC)
每个运行着的数据库一定与至少一个实例关联

Oracle 数据库与实例的启动过程

Oracle 数据库与实例的关闭过程

#常用命令
名称, 版本信息查看
查询数据库版本信息
`SQL> select * from v$version;`查看数据库名称
`SQL> show parameter db_name;`查看数据库服务名
`SQL> show parameter service_names;`查询全局数据库名称
`SQL> select * from global_name;`
数据库实例 (Instance)
查询当前数据库实例名称
`SQL> select instance_name from v$instance;`查看当前数据库实例状态(open/mount 等)
`SQL> select status from v$instance;`查看数据库实例启动时间
`SQL> SELECT TO_CHAR(STARTUP_TIME,'MON-DD-RR HH24:MI:SS') AS "Inst Start Time" FROM V$INSTANCE;`创建一个新的数据库实例、加载数据库、打开数据库 (需要 DBA 权限)
`SQL> startup [nomount | mount | open];`关闭实例绑定的数据库、卸载数据库、结束当前实例 (需要 DBA 权限)
`SQL> shutdown [normal | transactional | immediate];`关闭实例绑定的数据库、卸载数据库
`SQL> alter database close;`加载数据库/打开数据库
`SQL> alter database [mount | open];`
数据库设置, 统计信息等
查询数据库打开模式(mounted/open/read write)
`SQL> select open_mode from v$database;`查看数据库 DBF 文件位置
`SQL> select name from v$datafile;`查询数据文件状态
`SQL> select file#,name,status,enabled,checkpoint_change## from v$datafile;`查询数据文件位置
`SQL> select name from v$datafile;`查询数据文件(表空间)大小
`SQL> select sum(bytes)/1024/1024/1024 as GB from v$datafile;`查询有效数据大小
`SQL> select sum(bytes)/1024/1024/1024 as GB from dba_segments;`查看当前库的所有数据表
`SQL> select TABLE_NAME from all_tables;`
可插拔数据库 (PDB) 管理
查看数据库是 CDB 还是传统 DB
`SQL> select name, cdb, open_mode, con_id from v$database;`查看当前容器 (CDB) 名
`SQL> show con_name;`列举当前容器中的所有 PDB 以及状态
`SQL> select con_id, dbid, guid, name, open_mode from v$pdbs;`切换到某个 PDB
`SQL> alter session set container=<PDB>;`启动 PDB 数据库
`SQL> alter pluggable database <PDB> open;` 或者 `SQL> alter session set container=<PDB>;` `SQL> startup`关闭 PDB 数据库
`SQL> alter pluggable database <PDB> close;`
用户管理
- 创建用户