oracle数据库学习
摘要:最近了解了一下oracle数据库,记录一下学习过程
数据库特征
windows
端口号: 1521
进程特征如下:
linux
端口号: 1521
进程特征如下:
[oracle@apps scripts]$ ps -ef | grep pmon
oracle 3705 1 0 20:59 ? 00:00:00 ora_pmon_EBSCDB
oracle 25737 1 0 22:14 ? 00:00:00 ora_pmon_app3cdb物理文件特征如下:
// oracle数据库 19.0.0版本
control01.ctl
sysaux01.dbf
temp01.dbf
sys1.dbf
system12.dbf
undotbs001.dbf
// oracle数据库11g版本
system01.dbf
sysaux01.dbf
undotbs01.dbf
users01.dbf
tbsp_1.dbf
control01.ctl基础概念
数据库:
不同于mysql中的库的概念,oracle中的一个数据库可以简单理解为一份文件。一个操作系统里面可以有很多个数据库。
实例:
前面说了,一个数据库可以简单理解为一份文件,文件不能直接被用户访问。因此,oracle为每份文件创建一个实例来让用户对这些文件进行访问。在一般情况下,数据库名和实例名是一对一的关系,oracle会为每个数据库创造一个对应的实例。但如果在oracle并行服务器架构(即oracle实时应用集群)中,数据库名和实例名是一对多的关系。
用户:
每个实例都有所属的用户,不同实例的用户彼此互相隔离。一个用户可以有很多一个表空间。
表空间:
每个实例可以创建多个表空间,不同实例的表空间彼此互相隔离。一个表空间可以分给很多个用户。
表:
每个表空间下面存放很多表。不同的用户在同一表空间下面可以拥有相同名字的表。
CDB(Container Database): Oracle Database 19c后出现的新玩意。相当于虚拟化的数据库。CDB下面有很多PDB,PDB拿来存放数据。
概念类似于虚拟机的概念,CDB是宿主机,PDB是客户机。
PDB(Pluggable Database):Oracle Database 19c后出现的新玩意。真正拿来存放的数据的玩意。PDB没有实例,操作系统只会为CDB创建一个实例。
常用命令
导入oracle环境变量
export ORACLE_SID=EBSCDB
export ORACLE_HOME=/u01/install/APPS/19.0.0
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH查询正在运行的实例SID(也叫:ORACLE_SID):
// "ora_pmon_"后面的就是实例的SID。本例子中SID是"EBSCDB"、"app3cdb"
[oracle@apps scripts]$ ps -ef | grep pmon
oracle 3705 1 0 20:59 ? 00:00:00 ora_pmon_EBSCDB
oracle 25737 1 0 22:14 ? 00:00:00 ora_pmon_app3cdb查看电脑上所有实例的SID和ORACLE_HOME
//这台电脑上有ebscdb、ebsdb、app3cdb三个实例的SID
//ORACLE_HOME为 u01/install/APPS/19.0.0
[root@apps ~]# cat /etc/oratab
ebscdb:/u01/install/APPS/19.0.0:N
ebsdb:/u01/install/APPS/19.0.0:N
app3cdb:/u01/install/APPS/19.0.0:N常用sql语句
查询数据文件存放位置
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/install/APPS/19.0.0/test/oradata/APP3/system01.dbf
/u01/install/APPS/19.0.0/test/oradata/APP3/sysaux01.dbf
/u01/install/APPS/19.0.0/test/oradata/APP3/undotbs01.dbf
/u01/install/APPS/19.0.0/test/oradata/APP3/pdbseed/system01.dbf
查询控制文件存放位置
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/u01/install/APPS/19.0.0/test/oradata/APP3/control01.ctl
/u01/install/APPS/19.0.0/test/flash_recovery_area/APP3/control02.ctl查询全局数据库名字
//如果在PDB中查询到的是CDB数据库的名字
SQL> select name from v$database;
NAME
---------
APP3查询实例名
//如果在PDB中查询到的是CDB数据库的实例名
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
app3cdb查询正在连接的数据
//比如在CDB中查询到的是CDB数据库的名字,对应rsp文件中的gdbName
//比如在PDB中查询到的是PDB数据库的名字,对应rsp文件中的pdbName
[oracle@apps scripts]$ export ORACLE_SID=app3cdb
[oracle@apps scripts]$ sqlplus / as sysdba
SQL> SELECT * FROM global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
APP3
[oracle@apps scripts]$ export ORACLE_SID=app3cdb
[oracle@apps scripts]$ sqlplus / as sysdba
SQL> alter session set container=app3pdb;
SQL> SELECT * FROM global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
APP3PDB本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。