IT评测·应用市场-qidao123.com

标题: Oracle从入门到精通 [打印本页]

作者: 刘俊凯    时间: 2025-3-20 01:57
标题: Oracle从入门到精通
一、Oracle 基础认知

Oracle 数据库是甲骨文公司的一款关系数据库管理体系,在各领域广泛应用,如金融、保险、银行等行业。其具有高可用性、强大的性能、广泛的兼容性、丰富的功能和安全性等特点。
在高可用性方面,Oracle 通过数据保卫(Data Guard)、实时应用集群(RAC)和闪回技术(Flashback Technology)等本领,确保数据库体系在出现故障时仍能一连运行,保障业务一连性。例如,数据保卫技术允许在主数据库出现故障时,立刻切换到备用数据库。
性能方面,Oracle 数据库的查询优化器(Query Optimizer)能根据查询条件和数据分布情况主动选择最优执行计划,提高查询性能。主动存储管理(ASM)通过主动化的存储管理机制,优化 I/O 性能。内存管理机制如主动内存管理(AMM)和主动共享内存管理(ASMM)能主动调整内存分配,提高体系性能和稳固性。
兼容性上,Oracle 数据库支持多种操纵体系、硬件平台和编程语言。它能在 Windows、Linux、UNIX 等多种操纵体系上运行,支持 x86、x64、SPARC 等多种硬件架构。同时,支持多种编程语言,如 SQL、PL/SQL、Java、C++、Python 等。
Oracle 数据库的版本历史丰富,从 1979 年的 Oracle 1.0 到 2013 年的 Oracle 12c,不断推出新特性和功能。如 Oracle 2.0 引入了 PL/SQL 语言;Oracle 3.0 引入了分布式数据库概念;Oracle 7.0 引入了分布式事务处置处罚、多线程并发处置处罚等重要新特性。
总之,Oracle 数据库以其卓越的性能、广泛的兼容性和强大的功能,在数据库领域占据重要地位。
二、安装与设置

(一)下载与准备

Oracle 数据库可以从 Oracle 官方网站进行下载。下载地址为:https://www.oracle.com/database/technologies/oracle-database-software-downloads.html。在下载前须要注册 Oracle 账户,并接受许可协议。
安装前的环境准备工作至关重要。在 Linux 体系上,起首须要查察体系信息,如服务器 ip、体系版本、主机名等。接着查抄磁盘空间情况,确保有足够的空间安装 Oracle。然后进行挂载光驱,设置 yum 设置,安装 Oracle 须要的软件包,设置 hosts 文件,添加组与用户,创建文件体系,修改操纵体系参数等操纵。例如,安装软件包时可以使用以下下令:yum install binutils -y、yum install compat-libcap1 -y等一系列下令安装所需软件包。在 Windows 体系上,安装前也须要确保体系更新到最新版本,关闭防火墙、杀毒软件等,确保有足够的磁盘空间。
(二)安装步调

在 Linux 上安装 Oracle 数据库
在 Windows 上安装 Oracle 数据库
(三)基本操纵

启动与克制数据库

创建用户与赋权
创建表与插入数据
三、数据库查询与管理

(一)查询数据

Oracle 的查询功能非常强大,可以满意各种复杂的查询需求。
基本查询:可以使用简朴的 SELECT 语句查询表中的数据。例如,SELECT * FROM employees; 可以查询 employees 表中的全部数据。还可以指定特定的列进行查询,如 SELECT employee_id, first_name FROM employees;。可以使用别名来重命名列名,方便阅读和理解查询效果,例如 SELECT employee_id AS id, first_name AS fname FROM employees;。使用 DISTINCT 关键字可以去除重复值,如 SELECT DISTINCT department_id FROM employees;。
带条件查询:可以使用 WHERE 子句来添加查询条件。例如,查询工资大于 5000 的员工信息,可以使用 SELECT * FROM employees WHERE salary > 5000;。条件判定运算符包括 =、<、>、<=、>=、!= 等。还可以使用条件毗连符 AND、OR、NOT 来组合多个条件。例如,查询工资大于 5000 且部门为销售部的员工信息,可以使用 SELECT * FROM employees WHERE salary > 5000 AND department = ‘销售部’;。区间判定可以使用 BETWEEN…AND 操纵符,例如查询工资在 4000 到 6000 之间的员工信息,可以使用 SELECT * FROM employees WHERE salary BETWEEN 4000 AND 6000;。还可以使用 IN 操纵符来查询列值在指定列表中的数据,例如查询部门为销售部、市场部、研发部的员工信息,可以使用 SELECT * FROM employees WHERE department IN (‘销售部’, ‘市场部’, ‘研发部’);。暗昧查询可以使用 LIKE 关键字,通配符 % 表示零个或多个恣意字符,_ 表示一个恣意字符。例如,查询姓王且名字长度为两个字的员工信息,可以使用 SELECT * FROM employees WHERE first_name LIKE ‘王_’;。
排序与分组查询:可以使用 ORDER BY 子句对查询效果进行排序。默认是升序排序,可以使用 ASC 关键字明白指定升序,使用 DESC 关键字指定降序。例如,查询员工信息并按照工资降序排序,可以使用 SELECT * FROM employees ORDER BY salary DESC;。分组查询可以使用 GROUP BY 子句,把具有相同值的多条记录当成一组进行处置处罚。例如,查询每个部门的员工人数,可以使用 SELECT department_id, COUNT() FROM employees GROUP BY department_id;。在分组查询中,可以使用 HAVING 子句进行进一步的过滤,例如查询员工人数大于 10 的部门信息,可以使用 SELECT department_id, COUNT() FROM employees GROUP BY department_id HAVING COUNT(*) > 10;。
(二)备份与恢复

Oracle 数据库的备份与恢复是确保数据安全的重要本领。使用 RMAN(Recovery Manager)可以方便地进行数据库备份与恢复。
备份数据库

恢复数据库

四、高级功能探索

(一)数据库优化

数据库优化对于提高 Oracle 数据库的性能至关重要。执行计划分析和索引管理是两个重要的优化方法。
执行计划分析
执行计划分析可以帮助我们了解 SQL 语句的执行方式和性能瓶颈。Oracle 数据库提供了多种方式来查察执行计划,例如使用 EXPLAIN PLAN 语句或者在 SQL Developer 等工具中查察执行计划。执行计划中包含了多个重要的字段,如基数(Rows)、字节(Bytes)和泯灭(COST)等。基数表示当前操纵的返回效果集行数,字节表示执行该步调后返回的字节数,泯灭则是 CPU 泯灭,用于说明 SQL 执行的代价,理论上越小越好。常见的执行计划类型包括 TABLE ACCESS FULL(全表扫描)、TABLE ACCESS BY ROWID(通过 ROWID 的表存取)、TABLE ACCESS BY INDEX SCAN(索引扫描)等。例如,假设我们有一个较大的表 LARGE_TABLE,且 username 列上没有索引,运行 SELECT * FROM LARGE_TABLE where USERNAME = ‘TEST’; 语句时,执行计划可能表现为 TABLE ACCESS FULL LARGE_TABLE [65001] [ANALYZED],这表明进行了全表扫描。
索引管理
索引是提高数据库查询性能的重要本领,但不准确使用或计划不当可能会导致性能下降。

(二)存储过程与触发器

存储过程和触发器是 Oracle 数据库中的强大功能,可以提高数据库的主动化和灵活性。
存储过程
存储过程是一组针对数据库操纵的预界说的 SQL 语句,它可以存储在数据库中,供以后调用使用。在 Oracle 中,存储过程用 PL/SQL 语言编写,它是一种结合了 SQL 和步调计划的语言。PL/SQL 具有很强的数据操纵能力和过程控制能力,可以方便地编写出高效的存储过程来。

触发器
触发器类似与存储过程,都是为了实现特别功能而执行的代码块。触发器不允许用户表现通报参数,不能够返回参数值,不允许用户调用触发器。触发器只是在 Oracle 合适的时间主动调用,非常类似于面向编程中的拦截器。

五、Java 与 Oracle 集成

(一)毗连 Oracle 数据库

在 Java 中,使用 JDBC(Java Database Connectivity)毗连 Oracle 数据库是一种常见的方法。以下是一个示例代码展示如何在 Java 中使用 JDBC 毗连 Oracle 数据库:
  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.SQLException;
  4. public class OracleJDBCConnection {
  5.     public static void main(String[] args) {
  6.         String url = "jdbc:oracle:thin:@your_host:1521:your_service_name";
  7.         String username = "your_username";
  8.         String password = "your_password";
  9.         try {
  10.             Connection connection = DriverManager.getConnection(url, username, password);
  11.             System.out.println("Connected to Oracle database successfully!");
  12.             connection.close();
  13.         } catch (SQLException e) {
  14.             e.printStackTrace();
  15.         }
  16.     }
  17. }
复制代码
在上述代码中,须要将your_host、your_service_name、your_username和your_password更换为实际的数据库毗连信息。
(二)使用 JPA

Java 长期化 API(JPA)提供了一种对象关系映射(ORM)的解决方案,使得在 Java 应用步调中进行数据库操纵更加便捷。以下是使用 JPA 操纵 Oracle 数据库的方法:
1. 添加依赖
在 Maven 项目中,须要添加 JPA 和 Oracle 数据库驱动的依赖。例如:
  1. <dependency>
  2.     <groupId>org.springframework.boot</groupId>
  3.     <artifactId>spring-boot-starter-data-jpa</artifactId>
  4. </dependency>
  5. <dependency>
  6.     <groupId>com.oracle</groupId>
  7.     <artifactId>ojdbc6</artifactId>
  8.     <version>11.2.0.2.0</version>
  9. </dependency>
复制代码
2. 设置属性
在application.properties文件中设置数据库毗连信息和 JPA 属性:
  1. spring.datasource.url=jdbc:oracle:thin:@your_host:1521:your_service_name
  2. spring.datasource.username=your_username
  3. spring.datasource.password=your_password
  4. spring.jpa.show-sql=true
复制代码
3. 实体类界说
界说一个实体类,对应数据库中的表:
  1. import javax.persistence.Entity;
  2. import javax.persistence.GeneratedValue;
  3. import javax.persistence.Id;
  4. @Entity
  5. public class User {
  6.     @Id
  7.     @GeneratedValue
  8.     private Long id;
  9.     private String name;
  10.     private int age;
  11.     // Getters and setters
  12. }
复制代码
4. 仓库接口
创建一个仓库接口,继承自 JpaRepository,以便进行数据库操纵:
  1. import org.springframework.data.jpa.repository.JpaRepository;
  2. public interface UserRepository extends JpaRepository<User, Long> {
  3. }
复制代码
5. 服务类和控制器
可以创建一个服务类来封装业务逻辑,并在控制器中调用服务类的方法进行数据库操纵。例如:
  1. import org.springframework.stereotype.Service;
  2. @Service
  3. public class UserService {
  4.     private final UserRepository userRepository;
  5.     public UserService(UserRepository userRepository) {
  6.         this.userRepository = userRepository;
  7.     }
  8.     public User saveUser(User user) {
  9.         return userRepository.save(user);
  10.     }
  11. }
  12. import org.springframework.web.bind.annotation.PostMapping;
  13. import org.springframework.web.bind.annotation.RequestBody;
  14. import org.springframework.web.bind.annotation.RestController;
  15. @RestController
  16. public class UserController {
  17.     private final UserService userService;
  18.     public UserController(UserService userService) {
  19.         this.userService = userService;
  20.     }
  21.     @PostMapping("/users")
  22.     public User createUser(@RequestBody User user) {
  23.         return userService.saveUser(user);
  24.     }
  25. }
复制代码
六、进阶学习

(一)分页

Oracle 数据库提供了多种分页方法,以下是对分页实现方法的介绍:

  1.      SELECT *FROM (SELECT RIDFROM (SELECT R.RID, ROWNUM LINENUMFROM (SELECT ROWID RIDFROM TABLE1WHERE TABLE1_ID = XXORDER BY order_date DESC) RWHERE ROWNUM <=20)WHERE LINENUM >=10) T1,TABLE1 T2WHERE T1.RID = T2.ROWID;
复制代码


  1.        SELECT * FROM (SELECT a.*, ROWNUM rFROM my_table aWHERE ROWNUM <=30)WHERE r >=20;
复制代码

  1.        SELECT * FROM (SELECT A.*, ROWNUM RNFROM (SELECT *FROM TABLE1WHERE TABLE1_ID = XXORDER BY GMT_CREATE DESC) A)WHERE RN BETWEEN 10 AND 20;
复制代码

  1.        SELECT * FROM TABLE1WHERE ROWNUM <= 20MINUSSELECT * FROM TABLE1 WHERE ROWNUM <= 10;
复制代码


  1.      SELECT * FROM my_tableORDER BY my_columnOFFSET20ROWSFETCH NEXT 10ROWSONLY;
复制代码

  1.      SELECT * FROM (SELECT a.*, ROW_NUMBER() OVER (ORDERBY my_column) rFROM my_table a)WHERE r BETWEEN21AND30;
复制代码
(二)视图


  1.      create or replace view empviewasselect employee_id emp_id,last_name name,department_namefrom employees e,departments dWhere e.department_id = d.department_id
复制代码

  1.      CREATE VIEW salvu50ASSELECT employee_id ID_NUMBER,last_name NAME,salary*12 ANN_SALARYFROM employeesWHERE department_id = 50;
复制代码

  1.      SELECT * FROM salvu50;
复制代码

  1.      DROP VIEW empvu80;
复制代码
(三)存储过程



  1.      create or replace procedure count_proc(detpcode in varchar,num out number)ascot number(5);beginselect count(*) into cot from pat_visit_user where dept_code=detpcode;num:=cot;end;
复制代码


(四)约束

Oracle 数据库的约束包括主键约束、唯一约束、外键约束、查抄约束、非空约束、默认约束。
  1.    CREATE TABLE employees (employee_id NUMBER PRIMARY KEY,first_name VARCHAR2(50),last_name VARCHAR2(50));
复制代码
  1.    CREATE TABLE employees (employee_id NUMBER,email VARCHAR2(100) UNIQUE);
复制代码
  1.    CREATE TABLE departments (department_id NUMBER PRIMARY KEY,department_name VARCHAR2(50));CREATE TABLE employees (employee_id NUMBER PRIMARY KEY,department_id NUMBER,CONSTRAINT fk_department FOREIGN KEY (department_id)REFERENCES departments (department_id));
复制代码
  1.    CREATE TABLE employees (employee_id NUMBER PRIMARY KEY,salary NUMBER,CONSTRAINT chk_salary CHECK (salary >0));
复制代码
  1.    CREATE TABLE employees (employee_id NUMBER PRIMARY KEY,first_name VARCHAR2(50) NOT NULL,last_name VARCHAR2(50) NOT NULL);
复制代码
  1.    CREATE TABLE employees (employee_id NUMBER PRIMARY KEY,hire_date DATE DEFAULT SYSDATE,status VARCHAR2(20) DEFAULT 'ACTIVE');
复制代码
(五)序列



(六)同义词


(七)索引




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4