基础概念
Oracle instance
每一个Oracle实例都有一个SID(system identifier)来唯一标识. Oracle实例由若干个操作系统的进程构成,这些进程分别提供不同的服务,同时有SGA(System Global Area)和PGA(Program Global Area).可以执行PL/SQL等。
表空间Tablespace
逻辑的数据存储空间。可由一个或者多个数据文件组成。其中可以存储表、视图、存储过程等Schema结构。
Oracle用户Oracle account
登录Oracle的帐号。有若干权限分配给用户,包括哪些表空间可以访问, 并且有一个默认的表空间。
Oracle数据库 Oracle database
从物理上看,Oracle数据库包括:一个或者多个数据文件,两个或者更多重做日志文件,一个或者更多的控制文件。
从逻辑上看,Oracle数据库包括:一个或者多个表空间,数据结构,如表,视图,存储过程,序列,触发器,索引等。
Schema结构
指的是: 表,视图,存储过程,序列,触发器,索引等。
mysql&oracle
mysql和oracle的核心概念是有区别的,当有人问mysql的数据库地址是啥,那么他的确是在问mysql的database连接地址。如果有人问oracle的数据库地址是啥,往往他是在问当前应用所使用的database中的schema(而schema其实是oracle中的user account)。所以一般而言,我们是无法创建oracle的schema的。我们只能通过创建用户来定义schema。
对于MySQL而言,“database 数据库” 和 “schema 模式” 是同一件事。具体区分如下表:
In MySQL:
-
server instance == not identified with catalog, just a set of databases(数据库实例不等同于catalog,只是一个数据库的集合)
-
database == schema == catalog == a namespace within the server.
(数据库等同于schema 等同于catalog等同于数据库服务的一个命名空间) -
user == named account, who can connect to server and use (but can not own - no concept of ownership) objects in one or more databases(用户等同于账号,用于连接数据库服务)
to identify any object you need (database name + object name)
mysql中,比如我要问database 的连接地址一般就是指的database的jdbc url。一般就直接包含了数据库服务的ip端口以及database的名称。然后才会问用户密码。
In Oracle:
- server instance == database == catalog == all data managed by same execution engine(数据库实例等同于数据库等同于catalog等同于所有数据管理引擎)
- schema == namespace within database, identical to user account
user == schema owner == named account, identical to schema, who can connect to database, who owns the schema and use objects possibly in other schemas(schema等同于命名空间 ,等同于用户等同于模式拥有者等同于账号)
to identify any object you need (schema name + object name)
所以oracle中用户其实就是schema,新建一个用户就会多一个schema,平时我们用的navicat可以查看到当前数据库下的所有schema和用户是完全匹配的。
从物理方面来讲:数据库是柜子,柜中的抽屉是表空间,抽屉中的文件夹是数据文件,文件夹中的纸是表,写在纸上的信息就是数据。
从对象方面来讲:数据库是柜子,柜中的抽屉是Schema,抽屉中直接就是各种纸,这些纸就是表,写在纸上的信息就是数据。
所以一般如果从专业角度上去问一个oracle的jdbc,首先是问oracle服务器的IP端口+database(实例或者服务名),然后问schema(用户)是是什么,然后问密码是什么。最终driver驱动包拿着这些信息,构建jdbc url打开抽屉(schema)执行sql语句。
jdbc
Oracle JDBC Thin using a ServiceName:
jdbc:oracle:thin:@//
Example: jdbc:oracle:thin:@//192.168.8.8:1521/orcl
注意这里的格式,@后面有//, 这是与使用SID的主要区别。
这种格式是Oracle 推荐的格式,因为对于集群来说,每个节点的SID 是不一样的,但是SERVICE_NAME 确可以包含所有节点。我们平时最常用的连接方式也是通过servicename来连接的。
Oracle JDBC Thin using an SID:
jdbc:oracle:thin:@
Example: jdbc:oracle:thin:192.168.2.1:1521:X01A
Note: Support for SID is being phased out. Oracle recommends that users switch over to usingservice names.
Oracle JDBC Thin using a TNSName:
jdbc:oracle:thin:@
Example: jdbc:oracle:thin:@GL
Note:
Support for TNSNames was added in the driver release 10.2.0.1
文件介绍
控制文件
控制文件中存放数据库的名字和状态信息、数据库的物理结构信息、数据库备份集的信息、还有数据库的 SCN 、 CKPT 、归档日志的信息等。
select name from v$controlfile;
图中两个控制文件是完全一样的,起到冗余的作用。建议将两个控制文件放到两个不同的目录下,最好是放到 2 个不同的磁盘中。
数据文件
数据文件中存放的是数据库中的数据。数据文件分为两类,一类是我们存放的普通数据文件,另外一类数据文件是临时数据文件。
select file#,name from v$datafile;
临时文件
select file#,name from v$tempfile;
重做日志文件
日志文件中存放的是数据库中所有数据的更改信息。
select member from v$logfile;
对于数据库来讲,控制文件、数据文件、日志文件是联机文件。 这三种文件不管哪个出现错误,数据库都会报错。这三类文件通常都放在存储上。
参数文件
参数文件中存放的是数据库的一些参数。在数据库启动过程中,需要读取参数文件的信息,才能够将数据库启动到 nomount 状态。
show parameter spfile;
备份文件
备份文件就是用于备份恢复的,是离线的。对于备份文件来讲,主要备的是数据文件、控制文件、参数文件、归档日志文件。其中,数据文件和归档日志文件每次备份一定需要备份的,但是参数文件和控制文件不用每次都备份。
备份文件千万不能放在存储上!建议将备份文件放在从库上。
归档日志文件
归档日志文件是离线文件,是对日志文件的一种保护收集,是数据库文件中特别重要的文件。
select * from v$archived_log;
这个结果反映了 Oracle 当时归档时,是将文件归档到这个位置。如果 Oracle 要找归档的话,它会按照这个路径的相同名字下寻找归档。如果找不到的话就会报错。
归档日志文件也千万不要放在存储上!
口令文件
当远程登录数据库的时候,需要用到口令文件。口令文件丢失了也没关系,可以再次生成。
Alert 日志
Oracle 所有重大操作以及错误信息都会在这个日志中出现。
Alter 日志默认路径为 /u01/app/oracle/diag/rdbms/orcl/orcl/trace 。
这个路径可以在参数文件中更改。
orale 官网帮助手册
善用oracle官网的帮助手册,所有oracle理论知识,操作手册,开发手册等官网的资料是最全最权威的。本文中的dg环境搭建同样也参考了官网的dg操作手册
https://docs.oracle.com/en/
https://docs.oracle.com/cd/E11882_01/server.112/e41134/create_ps.htm#SBYDB4722
我们一般也可以选allbook
通过索引来选择自己需要查询的书籍资料,比如关于dg的操作指南
oracle官网的资料是非常全的,不同产品都有对应的帮助手册,但是全是英文,学习oracle最好的方式就是查询官网的资料,但是真是需要耐心以及时间。而且官网关于oracle database相关的帮助手册内容非常多,压缩包一共有500多M的文档。