Oracle数据库是由Oracle公司开发的关系型数据库管理系统(RDBMS),具有以下特点: - 高可用性 - 可扩展性强 - 安全性高 - 支持大数据处理 - 跨平台支持
Oracle数据库的主要组件包括: - 实例(Instance):由SGA(系统全局区)和后台进程组成 - 数据库(Database):物理文件集合(数据文件、控制文件、重做日志文件等) - 用户进程:客户端应用程序 - 服务器进程:处理用户请求
-- 查看数据库版本
SELECT * FROM v$version;
-- 查看数据库参数
SHOW PARAMETERS;
-- 修改参数
ALTER SYSTEM SET parameter_name=value SCOPE=spfile;
-- 创建表
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;
-- 插入数据
INSERT INTO employees VALUES (1, '张三', SYSDATE, 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 > 5000;
-- 排序
SELECT * FROM employees ORDER BY salary DESC;
-- 分组
SELECT dept_id, AVG(salary) FROM employees GROUP BY dept_id;
-- 匿名块
DECLARE
v_name VARCHAR2(50);
BEGIN
SELECT emp_name INTO v_name FROM employees WHERE emp_id = 1;
DBMS_OUTPUT.PUT_LINE('员工姓名: ' || v_name);
END;
/
-- 存储过程
CREATE OR REPLACE PROCEDURE increase_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;
END increase_salary;
/
-- 函数
CREATE OR REPLACE FUNCTION get_employee_name (
p_emp_id IN NUMBER
) RETURN VARCHAR2 AS
v_name VARCHAR2(50);
BEGIN
SELECT emp_name INTO v_name FROM employees WHERE emp_id = p_emp_id;
RETURN v_name;
END get_employee_name;
/
CREATE OR REPLACE TRIGGER trg_emp_salary
BEFORE INSERT OR UPDATE ON employees
FOR EACH ROW
BEGIN
IF :NEW.salary < 0 THEN
RAISE_APPLICATION_ERROR(-20001, '薪资不能为负数');
END IF;
END;
/
-- 创建用户
CREATE USER test_user IDENTIFIED BY password;
-- 授予权限
GRANT CONNECT, RESOURCE TO test_user;
-- 撤销权限
REVOKE RESOURCE FROM test_user;
-- 角色管理
CREATE ROLE manager;
GRANT SELECT ANY TABLE TO manager;
GRANT manager TO test_user;
-- 导出数据(expdp)
expdp system/password@dbname schemas=hr directory=DATA_PUMP_DIR dumpfile=hr.dmp logfile=hr.log
-- 导入数据(impdp)
impdp system/password@dbname schemas=hr directory=DATA_PUMP_DIR dumpfile=hr.dmp logfile=hr_imp.log
-- RMAN备份
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
-- 使用索引
CREATE INDEX idx_emp_name ON employees(emp_name);
-- 执行计划
EXPLAIN PLAN FOR SELECT * FROM employees WHERE emp_name = '张三';
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
-- 统计信息收集
EXEC DBMS_STATS.GATHER_TABLE_STATS('HR', 'EMPLOYEES');
-- 查看等待事件
SELECT event, total_waits, time_waited
FROM v$system_event
ORDER BY time_waited DESC;
-- 调整SGA
ALTER SYSTEM SET sga_target=2G SCOPE=spfile;
-- 创建范围分区表
CREATE TABLE sales (
sale_id NUMBER,
sale_date DATE,
amount NUMBER
) PARTITION BY RANGE (sale_date) (
PARTITION p1 VALUES LESS THAN (TO_DATE('2023-01-01', 'YYYY-MM-DD')),
PARTITION p2 VALUES LESS THAN (TO_DATE('2023-07-01', 'YYYY-MM-DD')),
PARTITION p3 VALUES LESS THAN (MAXVALUE)
);
CREATE MATERIALIZED VIEW mv_emp_dept
REFRESH COMPLETE ON DEMAND
AS
SELECT d.dept_name, COUNT(e.emp_id) as emp_count
FROM departments d JOIN employees e ON d.dept_id = e.dept_id
GROUP BY d.dept_name;
sql
ALTER TABLESPACE users ADD DATAFILE '/path/to/newfile.dbf' SIZE 1G;
通过本教程,您应该能够掌握Oracle数据库的基本操作和管理技能。实际应用中,建议结合具体业务场景进行实践,并持续学习Oracle的高级特性。