Oracle数据库是由Oracle公司开发的关系型数据库管理系统(RDBMS),是目前最流行的企业级数据库之一。主要特点包括:
物理存储结构:
逻辑存储结构:
系统全局区(SGA):
程序全局区(PGA):
-- 创建表
CREATE TABLE employees (
emp_id NUMBER PRIMARY KEY,
emp_name VARCHAR2(50) NOT NULL,
hire_date DATE,
salary NUMBER(10,2),
dept_id NUMBER
);
-- 修改表
ALTER TABLE employees ADD (email VARCHAR2(100));
-- 删除表
DROP TABLE employees;
-- 创建索引
CREATE INDEX idx_emp_name ON employees(emp_name);
-- 插入数据
INSERT INTO employees VALUES (1, '张三', TO_DATE('2020-01-15', 'YYYY-MM-DD'), 8000, 10);
-- 更新数据
UPDATE employees SET salary = 8500 WHERE emp_id = 1;
-- 删除数据
DELETE FROM employees WHERE emp_id = 1;
-- 查询数据
SELECT emp_id, emp_name, salary FROM employees WHERE dept_id = 10 ORDER BY salary DESC;
-- 授予权限
GRANT SELECT, INSERT ON employees TO user1;
-- 撤销权限
REVOKE INSERT ON employees FROM user1;
-- 提交事务
COMMIT;
-- 回滚事务
ROLLBACK;
DECLARE
-- 声明部分
v_emp_name VARCHAR2(50);
v_salary NUMBER;
BEGIN
-- 执行部分
SELECT emp_name, salary INTO v_emp_name, v_salary
FROM employees WHERE emp_id = 100;
DBMS_OUTPUT.PUT_LINE('员工姓名: ' || v_emp_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_increase IN NUMBER
) AS
BEGIN
UPDATE employees
SET salary = salary + p_increase
WHERE emp_id = p_emp_id;
COMMIT;
DBMS_OUTPUT.PUT_LINE('薪资更新成功');
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('错误: ' || SQLERRM);
END update_salary;
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 get_avg_salary;
CREATE OR REPLACE TRIGGER trg_emp_audit
BEFORE INSERT OR UPDATE OR DELETE ON employees
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO emp_audit VALUES ('INSERT', :NEW.emp_id, SYSDATE, USER);
ELSIF UPDATING THEN
INSERT INTO emp_audit VALUES ('UPDATE', :OLD.emp_id, SYSDATE, USER);
ELSIF DELETING THEN
INSERT INTO emp_audit VALUES ('DELETE', :OLD.emp_id, SYSDATE, USER);
END IF;
END;
-- 创建用户
CREATE USER testuser IDENTIFIED BY password
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 100M ON users;
-- 授予角色
GRANT CONNECT, RESOURCE TO testuser;
-- 修改用户
ALTER USER testuser QUOTA 200M ON users;
-- 锁定/解锁用户
ALTER USER testuser ACCOUNT LOCK;
ALTER USER testuser ACCOUNT UNLOCK;
-- 创建表空间
CREATE TABLESPACE app_data
DATAFILE '/u01/oracle/data/app01.dbf' SIZE 500M
AUTOEXTEND ON NEXT 50M MAXSIZE 2G;
-- 扩展表空间
ALTER TABLESPACE app_data
ADD DATAFILE '/u01/oracle/data/app02.dbf' SIZE 300M;
-- 修改表空间状态
ALTER TABLESPACE app_data READ ONLY;
ALTER TABLESPACE app_data READ WRITE;
-- 删除表空间
DROP TABLESPACE app_data INCLUDING CONTENTS AND DATAFILES;
-- RMAN备份示例
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
-- 表空间热备份
ALTER TABLESPACE users BEGIN BACKUP;
-- 使用操作系统命令复制数据文件
ALTER TABLESPACE users END BACKUP;
-- 数据泵导出(expdp)
expdp system/password DIRECTORY=dpump_dir DUMPFILE=expfull.dmp FULL=Y
-- 数据泵导入(impdp)
impdp system/password DIRECTORY=dpump_dir DUMPFILE=expfull.dmp FULL=Y
-- 收集表统计信息
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCHEMA', 'TABLE_NAME');
-- 收集索引统计信息
EXEC DBMS_STATS.GATHER_INDEX_STATS('SCHEMA', 'INDEX_NAME');
-- 收集模式统计信息
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCHEMA');
-- 范围分区
CREATE TABLE sales (
sale_id NUMBER,
sale_date DATE,
amount NUMBER
) PARTITION BY RANGE (sale_date) (
PARTITION p2020 VALUES LESS THAN (TO_DATE('2021-01-01', 'YYYY-MM-DD')),
PARTITION p2021 VALUES LESS THAN (TO_DATE('2022-01-01', 'YYYY-MM-DD')),
PARTITION pmax VALUES LESS THAN (MAXVALUE)
);
-- 列表分区
CREATE TABLE customers (
cust_id NUMBER,
cust_name VARCHAR2(50),
region VARCHAR2(20)
) PARTITION BY LIST (region) (
PARTITION p_east VALUES ('EAST'),
PARTITION p_west VALUES ('WEST'),
PARTITION p_other VALUES (DEFAULT)
);
CREATE MATERIALIZED VIEW mv_sales_summary
REFRESH COMPLETE ON DEMAND
AS
SELECT product_id, SUM(quantity), SUM(amount)
FROM sales
GROUP BY product_id;
-- 创建数据库链接
CREATE DATABASE LINK remote_db
CONNECT TO remote_user IDENTIFIED BY password
USING 'remote_tns';
-- 使用数据库链接
SELECT * FROM employees@remote_db;
视图名称 | 描述 |
---|---|
DBA_TABLES | 所有表信息 |
DBA_INDEXES | 所有索引信息 |
DBA_VIEWS | 所有视图信息 |
DBA_SEQUENCES | 所有序列信息 |
DBA_USERS | 所有用户信息 |
DBA_TABLESPACES | 所有表空间信息 |
DBA_DATA_FILES | 所有数据文件信息 |
DBA_FREE_SPACE | 表空间空闲空间信息 |
V$DATABASE | 数据库信息 |
V$INSTANCE | 实例信息 |
V$SESSION | 会话信息 |
V$SQL | SQL语句信息 |
以上是Oracle数据库的基础知识总结,涵盖了从体系结构到日常管理的各个方面。实际应用中需要根据具体场景和需求进行深入学习和实践。