关于tns
TNS 的核心文件:tnsnames.ora
这个“电话簿”是一个具体的文本文件,名字叫 tnsnames.ora。
它通常长这个样子(看起来有点吓人,但逻辑很简单):
# 这是别名,你在代码或工具里填的就是这个名字
MY_ORACLE_DB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orclpdb1) # 类似 MySQL 的数据库名
)
)
- MY_ORACLE_DB: 别名(Alias)。
- HOST: 数据库服务器 IP。
- PORT: 端口(Oracle 默认通常是 1521,MySQL 是 3306)。
- SERVICE_NAME: 服务名(类似 MySQL 的库名)。
文件的位置
-
检查文件位置: Oracle 默认去
$ORACLE_HOME/network/admin目录下找tnsnames.ora。 -
设置环境变量(推荐): 无论你把文件放在哪(比如放在 D盘),你可以设置一个系统环境变量
TNS_ADMIN,值就是那个文件夹的路径。Oracle 就会去那里找。
常用sql
查看版本
SELECT * FROM v$version;
查看字符集
SELECT parameter, value
FROM nls_database_parameters
WHERE parameter LIKE '%CHARACTERSET';
创建索引
建表时创建
-- 单字段唯一索引
CREATE TABLE departments (
dept_id NUMBER PRIMARY KEY,
dept_code VARCHAR2(10) UNIQUE,
dept_name VARCHAR2(50)
);
-- 或使用约束语法
CREATE TABLE departments (
dept_id NUMBER PRIMARY KEY,
dept_code VARCHAR2(10),
dept_name VARCHAR2(50),
CONSTRAINT uk_dept_code UNIQUE (dept_code)
);
-- 多字段复合唯一索引
CREATE TABLE employee_contacts (
emp_id NUMBER,
contact_type VARCHAR2(20),
contact_value VARCHAR2(100),
CONSTRAINT uk_emp_contact UNIQUE (emp_id, contact_type)
);
使用alter语句创建
-- 后期添加主键
ALTER TABLE employees ADD CONSTRAINT pk_employees PRIMARY KEY (emp_id);
-- 添加复合主键
ALTER TABLE order_details ADD CONSTRAINT pk_order_details PRIMARY KEY (order_id, product_id);
-- 添加唯一索引
ALTER TABLE employees ADD CONSTRAINT uk_emp_email UNIQUE (email);
-- 添加复合唯一索引
ALTER TABLE employee_contacts ADD CONSTRAINT uk_emp_contact UNIQUE (emp_id, contact_type);
-- 单字段索引
CREATE INDEX idx_emp_name ON employees(emp_name);
-- 复合索引
CREATE INDEX idx_emp_dept_hire ON employees(department_id, hire_date);
-- 函数索引
CREATE INDEX idx_emp_name_upper ON employees(UPPER(emp_name));
-- 降序索引
CREATE INDEX idx_emp_hire_desc ON employees(hire_date DESC);
查看执行计划
--- 这个sql创建执行计划,并存入`PLAN_TABLE`临时表中
explain plan for select *
from employees;
--- 这个sql查看刚才生成的执行计划
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);