Oracle 11g 是甲骨文公司于2007年发布的关系型数据库管理系统,是当时企业级数据库的主流版本之一。"g"代表"grid"(网格),强调其网格计算能力。
主要特点: - 高可用性 - 强大的数据仓库功能 - 增强的安全特性 - 自动存储管理(ASM) - 实时应用集群(RAC)
-- 连接到数据库
sqlplus username/password@database
-- 基本查询
SELECT * FROM employees;
-- 创建表
CREATE TABLE employees (
emp_id NUMBER PRIMARY KEY,
emp_name VARCHAR2(50),
hire_date DATE,
salary NUMBER(10,2)
);
-- 插入数据
INSERT INTO employees VALUES (1, '张三', TO_DATE('2020-01-15', 'YYYY-MM-DD'), 5000);
-- 查看表空间
SELECT tablespace_name, status, contents FROM dba_tablespaces;
-- 查看用户
SELECT username, account_status FROM dba_users;
-- 查看会话
SELECT sid, serial#, username, status FROM v$session;
-- 创建范围分区表
CREATE TABLE sales (
sale_id NUMBER,
sale_date DATE,
amount NUMBER
) PARTITION BY RANGE (sale_date) (
PARTITION p1 VALUES LESS THAN (TO_DATE('2020-01-01', 'YYYY-MM-DD')),
PARTITION p2 VALUES LESS THAN (TO_DATE('2021-01-01', 'YYYY-MM-DD')),
PARTITION pmax VALUES LESS THAN (MAXVALUE)
);
CREATE MATERIALIZED VIEW mv_sales_summary
REFRESH COMPLETE ON DEMAND
AS
SELECT product_id, SUM(amount) total_amount, COUNT(*) sale_count
FROM sales
GROUP BY product_id;
# 导出数据
expdp username/password@database schemas=hr directory=DATA_PUMP_DIR dumpfile=hr.dmp logfile=hr_exp.log
# 导入数据
impdp username/password@database schemas=hr directory=DATA_PUMP_DIR dumpfile=hr.dmp logfile=hr_imp.log
-- 创建索引
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');
-- 收集模式统计信息
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('HR');
-- 连接到RMAN
rman target /
-- 完整备份
BACKUP DATABASE PLUS ARCHIVELOG;
-- 恢复
RESTORE DATABASE;
RECOVER DATABASE;
-- 表空间备份
ALTER TABLESPACE users BEGIN BACKUP;
! cp /oracle/data/users01.dbf /backup/
ALTER TABLESPACE users END BACKUP;
-- 创建用户
CREATE USER testuser IDENTIFIED BY password
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
-- 授予权限
GRANT CONNECT, RESOURCE TO testuser;
GRANT SELECT ON hr.employees TO testuser;
-- 启用审计
AUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE BY testuser;
-- 查看审计记录
SELECT * FROM dba_audit_trail;
DECLARE
v_name VARCHAR2(50);
v_salary NUMBER;
BEGIN
SELECT emp_name, salary INTO v_name, v_salary
FROM employees
WHERE emp_id = 100;
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;
/
ORA-12514: TNS 监听程序当前无法识别连接描述符中请求的服务
ORA-01555: 快照太旧
ORA-00904: 无效标识符
如需更详细的某个部分内容,可以告诉我,我可以提供更深入的技术指导。