一、表空间

什么是表分区:

Oracle表空间(tablespaces)是一个逻辑的概念,真正存放数据的是数据文件(data files)。一个Oracle数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件。表空间是Oracle数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引、聚簇、回退段和临时段等。

表分区就如同创建了一个文件夹。创建一个单独的文件夹用来专门存储Oracle数据,这样在查找时就可以只搜索这个文件夹,而不是整个硬盘搜索,从而提高效率。另外,一个数据文件只能属于一个表空间,但一个表空间可以拥有多个数据文件。

Oracle表空间的特性:

  1. 控制数据库数据磁盘分配;

  2. 限制用户在表空间中可以使用的磁盘空间大小;

  3. 表空间具有 online, offline, readonly, readwrite属性。

Oracle表空间的类型:

  1. 永久性表空间:一般保存表、视图、过程和索引等的数据;

  2. 临时性表空间:只用于保存系统中短期活动的数据;

  3. 撤销表空间:用来帮助回退未提交的事务数据。

Oracle表空间的作用:

  1. 决定数据库实体的空间分配;

  2. 设置数据库用户的空间份额;

  3. 控制数据库部分数据的可用性;

  4. 分布数据于不同的设备之间以改善性能;

  5. 备份和恢复数据。

理解oracle表空间,表,和用户的区别

  1. 每个项目对应一个表空间,Oracle数据库是通过表空间来存储物理表的,一个数据库实例可以有N个表空间,一个表空间下可以有N张表。
  2. 然后创建一个用户对应此表空间即可。
  3. 所以,在做大型项目的时候,是先创建一个数据库实例,然后创建表空间,再创建用户,然后用户指定这个表空间。

二、登录控制台

http://192.168.17.101:8080/

创建账户,账号qiang,密码123456

create user qiang identified by 123456;
grant connect,resource,dba to qiang;

image-20200619012924907

三、授权

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/

image-20200621045355887

  1. ojdbc5.jar: 适用于JDK 1.5
  2. ojdbc6.jar: 适用于JDK 1.6
  3. ojdbc6_g.jar 只是用javac -g编译,生成所有调试信息,其它全一样

image-20200621050657368

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

image-20200621055547338

image-20200706174358339

七、创建数据库

连接数据库

image-20200706225423398

新建表空间

image-20200706225639122

image-20200706230936930

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#

image-20200706231506915

创建用户,注意大小写

image-20200706231447112

成员属性

image-20200706231806039

服务器权限

image-20200716021034123

连接数据库

image-20200706232502076

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;