Oracle数据库是由Oracle公司开发的关系型数据库管理系统(RDBMS),是企业级应用中最流行的数据库之一。它具有以下特点: - 高可用性 - 强大的数据安全功能 - 优秀的性能 - 跨平台支持 - 丰富的功能集
# 下载Oracle安装包
# 解压安装包
unzip oracle-database-ee-19c-1.0-1.x86_64.rpm.zip
# 安装依赖
yum install -y oracle-database-preinstall-19c
# 安装Oracle
rpm -ivh oracle-database-ee-19c-1.0-1.x86_64.rpm
# 配置数据库
/etc/init.d/oracledb_ORCLCDB-19c configure
SQL*Plus是Oracle提供的命令行工具,用于与数据库交互。
sqlplus username/password@hostname:port/service_name
-- 显示当前用户
SHOW USER;
-- 执行SQL脚本
@script_name.sql
-- 设置显示格式
SET LINESIZE 200;
SET PAGESIZE 100;
-- 查看表结构
DESC table_name;
-- 创建表
CREATE TABLE employees (
emp_id NUMBER PRIMARY KEY,
emp_name VARCHAR2(100) NOT NULL,
hire_date DATE,
salary NUMBER(10,2),
dept_id NUMBER
);
-- 创建索引
CREATE INDEX idx_emp_name ON employees(emp_name);
-- 修改表结构
ALTER TABLE employees ADD (email VARCHAR2(100));
-- 删除表
DROP TABLE employees;
-- 插入数据
INSERT INTO employees VALUES (1, '张三', TO_DATE('2020-01-15', 'YYYY-MM-DD'), 5000, 10);
-- 更新数据
UPDATE employees SET salary = 5500 WHERE emp_id = 1;
-- 删除数据
DELETE FROM employees WHERE emp_id = 1;
-- 基本查询
SELECT * FROM employees;
-- 条件查询
SELECT emp_name, salary FROM employees WHERE salary > 4000;
-- 排序
SELECT * FROM employees ORDER BY salary DESC;
-- 分组
SELECT dept_id, AVG(salary) FROM employees GROUP BY dept_id;
-- 连接查询
SELECT e.emp_name, d.dept_name
FROM employees e JOIN departments d ON e.dept_id = d.dept_id;
PL/SQL是Oracle的过程化SQL语言扩展。
DECLARE
-- 变量声明
v_name VARCHAR2(100);
v_salary NUMBER;
BEGIN
-- 执行语句
SELECT emp_name, salary INTO v_name, v_salary
FROM employees WHERE emp_id = 1;
DBMS_OUTPUT.PUT_LINE('员工姓名: ' || v_name || ', 薪资: ' || v_salary);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('没有找到员工记录');
END;
/
CREATE OR REPLACE PROCEDURE update_salary(
p_emp_id IN NUMBER,
p_amount IN NUMBER
) AS
BEGIN
UPDATE employees
SET salary = salary + p_amount
WHERE emp_id = p_emp_id;
COMMIT;
DBMS_OUTPUT.PUT_LINE('薪资更新成功');
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('错误: ' || SQLERRM);
END;
/
CREATE OR REPLACE FUNCTION get_avg_salary(
p_dept_id IN NUMBER
) RETURN NUMBER AS
v_avg_salary NUMBER;
BEGIN
SELECT AVG(salary) INTO v_avg_salary
FROM employees
WHERE dept_id = p_dept_id;
RETURN v_avg_salary;
END;
/
CREATE OR REPLACE TRIGGER trg_emp_salary
BEFORE UPDATE OF salary ON employees
FOR EACH ROW
BEGIN
IF :NEW.salary < :OLD.salary THEN
RAISE_APPLICATION_ERROR(-20001, '薪资不能减少');
END IF;
END;
/
-- 创建用户
CREATE USER testuser IDENTIFIED BY password;
-- 授予权限
GRANT CONNECT, RESOURCE TO testuser;
-- 修改密码
ALTER USER testuser IDENTIFIED BY newpassword;
-- 锁定/解锁用户
ALTER USER testuser ACCOUNT LOCK;
ALTER USER testuser ACCOUNT UNLOCK;
-- 创建表空间
CREATE TABLESPACE ts_data
DATAFILE '/path/to/datafile.dbf' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 1G;
-- 扩展表空间
ALTER TABLESPACE ts_data
ADD DATAFILE '/path/to/new_datafile.dbf' SIZE 50M;
-- 查看表空间使用情况
SELECT tablespace_name, bytes/1024/1024 MB
FROM dba_free_space;
expdp username/password@db_name dumpfile=expdat.dmp logfile=expdat.log schemas=schema_name
impdp username/password@db_name dumpfile=expdat.dmp logfile=impdat.log schemas=schema_name
-- 连接到RMAN
rman target /
-- 完整备份
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
-- 恢复
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
索引优化
SQL优化
统计信息收集
-- 收集表统计信息
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCHEMA_NAME', 'TABLE_NAME');
通过本教程,您已经了解了Oracle数据库的基础知识。要成为Oracle专家,还需要不断实践和学习高级主题,如RAC、Data Guard、性能调优等。