Oracle 11g安装使用、备份恢复并与SpringBoot集成

news2025/7/14 15:30:12

背景

最近接手了一个祖传项目,一个十几年前的 .Net 客户端项目,近期需要修改一个小功能,项目用到了 Oracle 数据库,以下是我在 Windows 7 旗舰版虚拟机上安装使用 Oracle 11g 的记录。

Windows 7 虚拟机上安装了 Oracle 服务端、客户端以及图形工具 PL/SQL Developer ,然后配置远程连接,在宿主机上通过 SpringBootMyBatis 集成 Oracle ,并进行了基本的备份与恢复操作。

下载Oracle

我这里根据操作系统,选择 Windows 64 位版本的 Oracle ,我这里使用迅雷下载,免登录,而且快,飞快~

  • 服务端

http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_1of2.zip

http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_2of2.zip

  • 客户端

http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_client.zip

2022-11-19-Thunder.jpg

安装Oracle

  • 服务端

具体安装过程可参考:Oracle11g的安装和卸载教程

根据安装教程,对HR和SCOTT用户设置了新密码(系统默认将所有账户都锁定不可用了,除sys和system账户可用外)。安装完成后服务默认启动了,可通过 SQL Plus 工具测试安装效果。

2022-11-19-SQLPlus.jpg

  • 客户端

客户端安装时选择了默认的第一个 InstantClient 最小化安装。

  • 图形工具PL/SQL Developer

下载地址:https://pan.baidu.com/s/1ewWtg-hQnB38C27sofA2jA

提取码:qwer

Note: 建议使用 .msi 安装方式。

PL/SQL Developer连接

由于图形工具 PL/SQL Developer 与数据库服务在同一台主机上,所以直接连接即可。

2022-11-19-PLSQLQuery.jpg
2022-11-19-PLSQLLogin.jpg

远程连接

接下来,我想通过宿主机来访问 Oracle 数据库。

一、关闭防火墙
首先,分别关闭虚拟机与宿主机的防火墙,然后互相 ping ,网络是通的。

2022-11-19-Ping.jpg

二、测试端口

然后,测试下 Oracle 的默认端口 1521 是否可以连接: telnet 192.168.44.153 1521 ,显然无法访问。

2022-11-19-TelnetFail.jpg
Oracle 所在虚拟机上查看当前数据库的端口信息: netstat -aon | findstr 1521 ,仅有127.0.0.1:1521,表示只能本机连接 Oracle

2022-11-19-Port1521.jpg

三、开放服务

在虚拟机上数据库的安装目录 E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN 下有两个文件: listener.oratnsnames.ora

,分别将其中的 HOST 改为虚拟机的IP地址。

HOST = 192.168.44.153

2022-11-19-ListenerConfig.jpg

2022-11-19-TnsConfig.jpg
Win+R ,键入 services.msc ,重启 Oracle 相关的两个服务: OracleOraDb11g_home1TNSListenerOracleServiceORCL

2022-11-19-OracleService.jpg

四、远程连接

再次在 Oracle 所在虚拟机上查看当前数据库的端口信息,多了一个虚拟机IP,端口号为1521的进程。之后, telnet 192.168.44.153 1521 成功建立连接。

2022-11-19-Port1521OK.jpg

SpringBoot集成Oracle

新建 SpringBoot 项目,常规操作,在依赖中选择 Web , Lombok , Oracle ,附件 MyBatis Plus

核心依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>com.oracle.database.nls</groupId>
            <artifactId>orai18n</artifactId>
            <version>21.7.0.0</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

Note:

  1. 其中的com.oracle.database.nls.orai18n依赖,是为解决报错:不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK,添加这个依赖即可。
        <dependency>
            <groupId>com.oracle.database.nls</groupId>
            <artifactId>orai18n</artifactId>
            <version>21.7.0.0</version>
        </dependency>
  1. 此外,如果在创建项目时没有选择Oracle的依赖,也可以使用Oracle安装目录下的jar包作为依赖:E:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar
  • 安装到本地依赖

mvn install:install-file -Dfile=ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar

  • 在项目中添加依赖
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.1.0</version>
        </dependency>

配置文件

mybatis-plus:
  configuration:
    # 开启下划线转驼峰
    map-underscore-to-camel-case: true
    # 指定默认枚举类型的类型转换器
    default-enum-type-handler: com.baomidou.mybatisplus.extension.handlers.MybatisEnumTypeHandler
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    banner: false
    db-config:
      # 逻辑删除(软删除)
      logic-delete-value: NOW()
      logic-not-delete-value: 'NULL'
  mapper-locations: classpath:mapper/*.xml

spring:
  datasource:
    driver-class-name: oracle.jdbc.driver.OracleDriver
    url: jdbc:oracle:thin:@192.168.44.153:1521:orcl
    username: "scott"
    password: "Oracle11"

核心代码

通过集成 MyBatis PlusServiceMapper 分别继承 IServiceBaseMapper ,不贴代码了,具体见文末 GitHub 源码。数据表直接使用Scott用户下的 EMP 表。

  • 实体
@Data
@TableName("EMP")
public class Employee {
    @TableId
    private Integer empno;

    private String ename;
    private String job;
    private Integer mgr;

    @JsonFormat(pattern = "yyyy/MM/dd")
    @DateTimeFormat(pattern = "yyyy/MM/dd")
    private Date hiredate;

    private Integer sal;
    private Integer comm;
    private Integer deptno;
}
  • 控制器

分别写了接口测试 Oracle 数据库的:列表查询、新增、修改、删除、事务功能。

2022-11-19-APIList.jpg

@RestController
public class EmployeeController {
    private final EmployeeService employeeService;

    public EmployeeController(EmployeeService employeeService) {
        this.employeeService = employeeService;
    }

    @GetMapping("list")
    public List<Employee> list(){
        return employeeService.list();
    }

    @PostMapping("save")
    public boolean save(){
        Employee employee = new Employee();
        employee.setEmpno(6666);
        employee.setEname("John");
        employee.setJob("PM");
        employee.setMgr(7782);
        employee.setHiredate(new Date());
        employee.setSal(1000);
        employee.setComm(0);
        employee.setDeptno(10);

        return employeeService.save(employee);
    }

    @PutMapping("update")
    public boolean update(){
        UpdateWrapper<Employee> updateWrapper = new UpdateWrapper<>();
        return employeeService.update(updateWrapper.lambda().set(Employee::getJob, "CTO").eq(Employee::getEmpno, 6666));
    }

    @DeleteMapping("delete/{id}")
    public boolean deleteByCondition(@PathVariable Integer id){
        return employeeService.removeById(id);
    }

    @DeleteMapping("deleteByCondition")
    public boolean deleteByCondition(){
        return employeeService.remove(new QueryWrapper<Employee>().lambda().eq(Employee::getEmpno, 6666));
    }

    @PostMapping("saveTransaction")
    @Transactional
    public boolean saveWithTransaction(){
        Employee employee = new Employee();
        employee.setEmpno(7777);
        employee.setEname("Wick");
        employee.setJob("CEO");
        employee.setMgr(7782);
        employee.setHiredate(new Date());
        employee.setSal(1000);
        employee.setComm(0);
        employee.setDeptno(10);
        employeeService.save(employee);

        // Exception
        int x = 1/0;

        employee.setEmpno(8888);
        employee.setEname("Tada");
        employee.setJob("CFO");
        employee.setMgr(7782);
        employee.setHiredate(new Date());
        employee.setSal(1000);
        employee.setComm(0);
        employee.setDeptno(10);

        return employeeService.save(employee);
    }
}

用户

在进行备份及恢复操作时,需要具有管理员权限,因此先了解下用户的。

用户名 / 密码登录身份说明
sys/change_on_installSYSDBA 或 SYSOPER不能以 NORMAL 登录,可作为默认的系统管理员
system/managerSYSDBA 或 NORMAL不能以 SYSOPER 登录,可作为默认的系统管理员
sysman/oem_tempsysman 为 oms 的用户名
scott/tigerNORMAL普通用户
aqadm /aqadmSYSDBA 或 NORMAL高级队列管理员
Dbsnmp/dbsnmpSYSDBA 或 NORMAL复制管理员sysman 为 oms 的用户名
scott/tigerNORMAL 普通用户
aqadm /aqadmSYSDBA 或 NORMAL高级队列管理员
Dbsnmp/dbsnmpSYSDBA 或 NORMAL复制管理员
  • 查看被锁的用户

select LOCK_DATE, username from dba_users;

Note: LOCK_DATE 为空说明没有锁定,非空为锁定。

  • 解锁方法

ALTER USER USER_NAME ACCOUNT UNLOCK;

备份恢复

可通过工具或者命令的方式进行数据表的导入、导出,即备份与恢复。

采用图形工具 PL/SQL Developer 的方式进行导出,见下图。

2022-11-19-ExportTool.jpg

备份

这里以将数据库中scott用户与hr用户的表导出为例说明Oracle数据库备份的命令。

exp system/manager@orcl file=E:\backup\data.dmp owner=(scott, hr)

我在执行上述命令时遇到以下错误。

  • 报错信息:

EXP-00056: 遇到 ORACLE 错误 1017
ORA-01017: invalid username/password; logon denied

  • 解决方案:

在提示的用户名处,输入 system as sysdba ,再输入口令即可。

用户名: system as sysdba
口令:

2022-11-19-ExportCmd.jpg

恢复

将上述导出的数据进行还原。

imp system/manager@orcl file=E:\backup\data.dmp full=y ignore=y

  • 报错信息:

IMP-00031: 必须指定 FULL=Y 或提供 FROMUSER/TOUSER 或 TABLES 参数

  • 解决方案:

添加full=y参数。

  • 报错信息:

IMP-00015: 由于对象已存在, 下列语句失败

  • 解决方案:

添加ignore=y参数。

更多的备份与恢复操作可参考Oracle数据库备份与还原命令

此外,除了EXP和IMP这种备份还原方式,从Oracle 10g开始提供了称为数据泵的新工具expdp/impdp,它为Oracle数据提供高速并行及大数据的迁移,如有大量数据需要备份可以做进一步探索。

Note:

  1. EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
  2. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
  3. IMP只适用于EXP导出的文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件。

Source Code

  • Source Code: Github

If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17688.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

招聘小程序开发功能点_分享招聘小程序的优势

招聘小程序的主要用户就是企业招聘端和找工作人员的用户端,下面从这两个端来对招聘小程序开发的功能进行介绍。 企业端功能 1、岗位发布:企业根据自身岗位需求,在招聘app上发布招聘岗位及所需技能。 2.简历筛选:根据求职者提交的简历选择合适的简历,并对公开发布的简历进行筛…

利用numpy库定义一个等比数列:logspace()函数

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 创建等比数列 logspace()函数 选择题 关于以下代码下列说法错误的是? import numpy as np print("【执行】np.logspace(1,3,3,base2)") print(np.logspace(1,3,3,base2)) print…

物联网智能家居系统概述和相关技术

物联网的发展和形成方方面面涉及了很多相关的技术。随着物联网的逐渐成熟&#xff0c;物联网的分层体系也趋于统一&#xff0c;现阶段普遍接受一种三层结构的物联网&#xff0c;即由下至上依次为&#xff1a;感知层、网络层、应用层。 图1-1 物联网体系结构图 所以&#xff0c…

JAVA SpringMVC老项目集成knife4j

需求: 原有一直使用showdoc工具对内或对外进行接口文档和功能的沟通&#xff0c;上层领导觉得人工进行手写 浪费很多人工维护时间可能会做到接口更改而面对静态文档而更新不及时showdoc的劣势是不能进行在线调试 需要辅助其他调试工具但领导只需要类似swagger官方的页面即可。通…

开发前后端交互规范与请求封装

开发前后端交互规范与请求封装一&#xff0c;背景说明二&#xff0c;Axios请求封装三&#xff0c;数据对象封装1&#xff0c;前端封装2&#xff0c;后端封装四&#xff0c;总结五&#xff0c;Axios拦截器七&#xff0c;Restful请求1&#xff0c;Restful的由来2&#xff0c;Rest…

亲测好用的开发工具【1】 RuoYi-MT

亲测好用的开发工具【1】 文章目录亲测好用的开发工具【1】RuoYi-MT1 问题引入2 RuoYi-MT3 使用RuiYi-MTRuoYi-MT 1 问题引入 没错&#xff0c;又是若依&#xff0c;今天遇到一个需求&#xff0c;就是用若依打底&#xff0c;做一个自己的前后端分离的后台管理系统。 但是吧&…

电科大离散数学-1-集合论基础

目录 1.1 集合的初见 1.1.1 集合的定义 1.1.2 集合的表示方法 1.1.3 集合的基数 1.2 特殊集合与集合间关系 1.2.1 空集 1.2.2 全集 1.2.3 集合的相等关系 1.2.4 包含关系 1.2.5 幂集 1.3 集合的运算 1.3.1 并运算 1.3.2 交运算 1.3.3 补运算 1.3.4 差运算 1.3.…

使用VUE3.0版本搭建H5模板

使用VUE3.0版本搭建H5模板 仓库地址&#xff0c;有需要的可以参考参考 https://gitee.com/young_frivolous/vue3-app-template/tree/master为了方便每次写项目都要去搭建一个框架&#xff0c;今天使用vue3.0从0开始实行一个开箱即用移动端模板&#xff0c;基于vue3.0全家桶 v…

Windows安装和完全卸载MySQL8(以MySQL8.0.31版本为例) 之 Zip 方式(超详细教程)

文章目录一. 前言二. 安装1.下载MySQL2. 安装MySQL3.小结&#xff1a;4.修改环境变量3.完全卸载一. 前言 MySQL8相比之前版本改动还是挺大&#xff0c;主要有以下几点&#xff1a; MySQL8之后并不需要my.ini&#xff0c;会自动的生成data文件夹在解压之后的文件&#xff0c;端…

ArcGIS水文分析工具

Fill 填洼 凹陷点是指未定义流域方向的像元&#xff1b;其周围的像元均高于它。倾泻点是汇流区域中具有最低高程的边界像元。如果凹陷点中充满了水&#xff0c;则水将从该点倾泻出去。Arcpy代码&#xff1a; Fill(in_surface_raster, {z_limit})Flow accumulation 流量 通过流…

某邮储银行数据归集系统在HTAP场景下的选型与实践

导语&#xff1a;面对HTAP能力的需求与云原生时代的趋势&#xff0c;以及国产化的浪潮&#xff0c;某邮储银行携手OceanBase打造了云原生时代下的国产分布式数据库场景实践体验。以下内容整理自某邮储银行运维方DBA的自述。 业务痛点 我们有一套针对业务内部的运营数据归集系统…

SpringBoot SpringBoot 开发实用篇 4 数据层解决方案 4.12 ES 简介

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇4 数据层解决方案4.12 ES 简介4.12.1 介绍4.12.2 全文搜索工作原理4.…

C++学习笔记(Ⅳ):C++提高编程

1 模板 1.1 模板的概念 建立通用的模板&#xff0c;提高代码复用性 1.2 函数模板 c还有一种利用模板的泛型编程 1. 语法 建立函数&#xff0c;其返回值类型和形参类型用虚拟类型代表 template<typename T> // 函数模板 template<typename T> // 声明一…

使用token登录提交到github

首先从GitHub上clone自己的仓库 git clone https://github.com/ljx2/SunnyWeather.git 修改一些文件 然后 git add ./ git commit -m ‘first commit’ 然后 git push origin main 提示输入用户名密码来验证 输完之后又提示需要创建token来上传&#xff0c;由于安全&#x…

M41T62Q6F 一款具有报警功能的低功耗串行实时时钟(RTC)芯片

M41T62Q6F是一款带有 32.768 kHz 振荡器的低功耗串行实时时钟(RTC)。8 个寄存器用于提供 时钟/日历功能&#xff0c;配置为二进制编码的十进制&#xff08;BCD&#xff09;格式。另有 8 个寄存器提供报警&#xff08;闹 铃&#xff09;、32 KHz 输出、校准以及看门狗功能的状态…

《树莓派项目实战》第七节 使用声音传感器检测声音

目录 7.1 引脚介绍 7.2 工作原理 7.3 连接到树莓派 7.4 编写代码检测声音有无 在本节&#xff0c;我们将学习如何使用声音传感器检测声音&#xff0c;该项目设计到的材料有&#xff1a; 树莓派 * 1面包板 * 1杜邦线若干声音传感器 * 17.1 引脚介绍 声音传感器一共有3个引脚…

噪声系数与插入损耗

目录噪声系数定义Friis噪声级联公式无源器件的噪声系数插入损耗&#xff1f;S参数文件能用来仿真噪声系数吗在计算射频链路的级联噪声时&#xff0c;我们会输入每一级的噪声系数以及增益&#xff0c;即可计算出整个射频链路的噪声系数&#xff0c;用于系统评估。但是有同学问我…

尚医通 (二十五) --------- 医院上传接口

目录一、医院系统模拟接口1. 服务部署2. 操作说明3. 上传接口与回调接口① 业务术语② 安全控制③ 业务接口④ 平台接口⑤ 医院接口二、集成 MongoDB三、添加医院基础类四、上传医院五、参数签名六、图片 Base64 编码一、医院系统模拟接口 1. 服务部署 ① 找到资源文件夹下面…

ArcGIS pro导出地图删除右下角小字制作者服务许可

ArcGIS pro导出地图删除右下角小字制作者服务许可 ArcGIS pro具有强大的制图功能&#xff0c;提供了丰富的底图。 研究者在使用这些底图出图时&#xff0c;发现地图右下角有__制作者名单、服务许可、来源&#xff1f;__ &#xff08;我也不知道它叫什么&#xff09;如下图 就…

【深入浅出Spring6】第六期——手写Spring框架与Spring IoC注解式开发

一、手写Spring框架 $ 准备工作 创建新的模块 myspring我们采用边测试边写框架的方式&#xff0c;所以还需要我们提供待测试的类 一号嘉宾——User类&#xff1a;用于一般类型传值测试 package com.powernode.myspring.bean; /*** author Bonbons* version 1.0*/ public clas…