一、表空间
什么是表分区:
Oracle表空间(tablespaces)是一个逻辑的概念,真正存放数据的是数据文件(data files)。一个Oracle数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件。表空间是Oracle数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引、聚簇、回退段和临时段等。
表分区就如同创建了一个文件夹。创建一个单独的文件夹用来专门存储Oracle数据,这样在查找时就可以只搜索这个文件夹,而不是整个硬盘搜索,从而提高效率。另外,一个数据文件只能属于一个表空间,但一个表空间可以拥有多个数据文件。
Oracle表空间的特性:
-
控制数据库数据磁盘分配;
-
限制用户在表空间中可以使用的磁盘空间大小;
-
表空间具有 online, offline, readonly, readwrite属性。
Oracle表空间的类型:
-
永久性表空间:一般保存表、视图、过程和索引等的数据;
-
临时性表空间:只用于保存系统中短期活动的数据;
-
撤销表空间:用来帮助回退未提交的事务数据。
Oracle表空间的作用:
-
决定数据库实体的空间分配;
-
设置数据库用户的空间份额;
-
控制数据库部分数据的可用性;
-
分布数据于不同的设备之间以改善性能;
-
备份和恢复数据。
理解oracle表空间,表,和用户的区别
- 每个项目对应一个表空间,Oracle数据库是通过表空间来存储物理表的,一个数据库实例可以有N个表空间,一个表空间下可以有N张表。
- 然后创建一个用户对应此表空间即可。
- 所以,在做大型项目的时候,是先创建一个数据库实例,然后创建表空间,再创建用户,然后用户指定这个表空间。
二、登录控制台
创建账户,账号qiang,密码123456
create user qiang identified by 123456;
grant connect,resource,dba to qiang;
三、授权
grant connect,resource,dba to qiang;
授权,Connect角色,是授予最终用户的典型权利,最基本的权利,能够连接到ORACLE数据库中,并在对其他用户的表有访问权限时,做SELECT、UPDATE、INSERTT等操作;Resource角色,是授予开发人员的,能在自己的方案中创建表、序列、视图等;DBA角色,是授予系统管理员的,拥有该角色的用户就能成为系统管理员了,它拥有所有的系统权限。
四、ODBC驱动
安装目录lib下的驱动包
ojdbc5.jar ojdbc6_g.jar ojdbc6.jar
cd /home/qiang/docker-compose/oracle/data/product/11.2.0/xe/jdbc/lib
# ojdbc7.jar
cd /home/qiang/docker-compose/oracle12c/data/app/oracle-product/12.1.0/xe/jdbc/lib/
- ojdbc5.jar: 适用于JDK 1.5
- ojdbc6.jar: 适用于JDK 1.6
- ojdbc6_g.jar 只是用javac -g编译,生成所有调试信息,其它全一样
mvn install:install-file -Dfile=D:/File/Jar/ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.2.0 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=E:/Download/ojdbc14.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=11.2.0.2.0 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=E:/Jar/ojdbc7.jar -DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=12.1.0.2 -Dpackaging=jar -DgeneratePom=true
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.2.0</version>
</dependency>
五、连接数据库
public void testOracle() {
// 创建一个数据库连接
Connection con = null;
// 创建预编译语句对象,一般都是用这个而不用Statement
PreparedStatement pre = null;
// 创建一个结果集对象
ResultSet result = null;
try {
// 加载Oracle驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("开始尝试连接数据库!");
// 127.0.0.1是本机地址,XE 是精简版Oracle的默认数据库名
String url = "jdbc:oracle:" + "thin:@192.168.17.101:1521:XE";
// 用户名,系统默认的账户名
String user = "qiang";
// 你安装时选设置的密码
String password = "123456";
// 用驱动类获取连接
con = DriverManager.getConnection(url, user, password);
System.out.println("连接成功!");
// 预编译语句,“?”代表参数
String sql = "select * from employee where name=?";
// 实例化预编译语句
pre = con.prepareStatement(sql);
// 设置参数,前面的1表示参数的索引,而不是表中列名的索引
pre.setString(1, "小强");
// 执行查询,注意括号中不需要再加参数
result = pre.executeQuery();
while (result.next()) {
// 当结果集不为空时
System.out.println("编号:" + result.getInt("id") + "姓名:"
+ result.getString("name") + "地址:" + result.getString("address"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源
// 注意关闭的顺序,最后使用的最先关闭
if (result != null) {
result.close();
}
if (pre != null) {
pre.close();
}
if (con != null) {
con.close();
}
System.out.println("数据库连接已关闭!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
六、SpringBoot+Oracle
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<!-- SpringBoot依赖 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.qiang</groupId>
<artifactId>Oracle</artifactId>
<version>1.0.0-SNAPSHOT</version>
<dependencies>
<!-- SpringBoot依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 测试依赖 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<!--oracle-->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.2.0</version>
</dependency>
<!-- mybatisPlus 核心库 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<!-- 引入阿里数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>
OracleApplication
package com.qiang.oracle;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author: 吴多强
* @create: 2020-06-21 04:22
* @description:
*/
@SpringBootApplication
@MapperScan({"com.qiang.oracle.dao"})
public class OracleApplication {
public static void main(String[] args) {
SpringApplication.run(OracleApplication.class, args);
}
}
application.yaml
server:
port: 8080
spring:
datasource:
url: jdbc:oracle:thin:@192.168.17.101:1521:XE
username: qiang
password: 123456
driver-class-name: oracle.jdbc.OracleDriver
type: com.alibaba.druid.pool.DruidDataSource
# mybatis-plus相关配置
mybatis-plus:
# xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML 文件位置)
mapper-locations: classpath:mapper/*.xml
# 以下配置均有默认值,可以不设置
global-config:
db-config:
#主键类型 AUTO:"数据库ID自增" INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
id-type: auto
#字段策略 IGNORED:"忽略判断" NOT_NULL:"非 NULL 判断") NOT_EMPTY:"非空判断"
field-strategy: NOT_EMPTY
#数据库类型
db-type: ORACLE
configuration:
# 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射
map-underscore-to-camel-case: true
# 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
call-setters-on-nulls: true
# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
七、创建数据库
连接数据库
新建表空间
xxl.dbf
# 11G
/u01/app/oracle/oradata/XE/
# 12C
/u01/app/oracle/oradata/xe/
去到目录即可查看到
root@b98d560b699e:/u01/app/oracle/oradata/XXL# cd /u01/app/oracle/oradata/XXL
root@b98d560b699e:/u01/app/oracle/oradata/XXL# pwd
/u01/app/oracle/oradata/XXL
root@b98d560b699e:/u01/app/oracle/oradata/XXL# ls
XXL.DBF
root@b98d560b699e:/u01/app/oracle/oradata/XXL#
创建用户,注意大小写
成员属性
服务器权限
连接数据库
sql语句
-- 创建表空间
-- 名字为TEST
-- 文件位置为/u01/app/oracle/oradata/xe/test.dbf
-- 默认大小为10M
-- 下一次扩展为10M
-- 最大大小为100M
CREATE TABLESPACE "TEST"
DATAFILE '/u01/app/oracle/oradata/xe/test.dbf' SIZE 10 M AUTOEXTEND ON NEXT 10 M MAXSIZE 100 M;
-- 创建用户
-- 名字为TEST
-- 密码为12345678
-- 默认表空间为TEST
-- 临时表空间为TEMP
-- 成员属性为CONNECT,DBA,RESOURCE
-- 服务器权限为CREATE SEQUENCE,CREATE VIEW
CREATE USER "TEST" IDENTIFIED BY "12345678" DEFAULT TABLESPACE "TEST" TEMPORARY TABLESPACE "TEMP";
GRANT "CONNECT", "DBA", "RESOURCE" TO "TEST";
ALTER USER "TEST" DEFAULT ROLE "CONNECT", "DBA", "RESOURCE";
GRANT CREATE SEQUENCE, CREATE VIEW TO "TEST" WITH ADMIN OPTION;
-- XXL 12345678
CREATE TABLESPACE "XXL"
DATAFILE '/u01/app/oracle/oradata/xe/xxl.dbf' SIZE 10 M AUTOEXTEND ON NEXT 10 M MAXSIZE 100 M;
CREATE USER "XXL" IDENTIFIED BY "12345678" DEFAULT TABLESPACE "XXL" TEMPORARY TABLESPACE "TEMP";
GRANT "CONNECT", "DBA", "RESOURCE" TO "XXL";
ALTER USER "XXL" DEFAULT ROLE "CONNECT", "DBA", "RESOURCE";
GRANT CREATE SEQUENCE, CREATE VIEW TO "XXL" WITH ADMIN OPTION;
-- BATCH 123456
CREATE TABLESPACE "BATCH"
DATAFILE '/u01/app/oracle/oradata/xe/batch.dbf' SIZE 10 M AUTOEXTEND ON NEXT 10 M MAXSIZE 100 M;
CREATE USER "BATCH" IDENTIFIED BY "123456" DEFAULT TABLESPACE "BATCH" TEMPORARY TABLESPACE "TEMP";
GRANT "CONNECT", "DBA", "RESOURCE" TO "BATCH";
ALTER USER "BATCH" DEFAULT ROLE "CONNECT", "DBA", "RESOURCE";
GRANT CREATE SEQUENCE, CREATE VIEW TO "BATCH" WITH ADMIN OPTION;