目录
DMSQL
DML:数据操纵语言,insert、update、delete、select
DDL:数据定义语言,create table、alter table、drop table
DCL:数据控制语言,grant、revoke,和权限相关
TCL:事务控制语言,commit、rollback
/*先建表,插入数据,数据插入后需commit*/
create table department(d_id int,d_name varchar(20));
create table employee (e_id int,e_name char(10),salary int,d_id int);
insert into department values(101,'测试部'),(102,'研发部'),(103,'技术支持');
insert into employee values(1,'张三',24325,101),(2,'李四',52211,101),(3,'王五',41543,102),(4,'赵六',31516,103);
commit;
简单查询
/*简单查询*/
select * from employee;
/*去重查询*/
select distinct d_id from employee;
/*表达式*/
select e_name,salary,salary+10000 from employee;
/*连接列*/
select e_name || '的工资是:'||salary from employee;
过滤查询
/*查询部门103员工的姓名,工资和部门号*/
select e_name,salary,d_id from employee where d_id=103;
/*查询工资大于30000的员工姓名和工资*/
select e_name,salary,d_id from employee where salary>30000;
/*查询张三的工资,使用连接列*/
select e_name || '的工资是:'||salary from employee where e_name='张三';
/*查询部门号为101或103的员工信息*/
select * from employee where d_id in(101,103);
/*查询工资在25000-60000之间的员工信息,条件等价于salary>=24000 and salary <=60000*/
select * from employee where salary between 24000 and 60000;
/*查询姓王的员工姓名*/
select e_name from employee where e_name like '王%';
/*查询部门号为101且工资大于25000的员工信息*/
select * from employee where d_id=101 and salary > 25000;
/*多表查询:查询员工姓名及所在部门*/
select e_name,d_name from employee,department where employee.d_id=department.d_id;
排序
DM中默认升序,因此asc可省略
/*按工资升序查询员工姓名和工资,order by salary等价于order by 3,即表的第3列*/
select e_name,salary from employee order by salary asc;
select e_name,salary from employee order by 3 asc;
/*按工资降序查询员工信息*/
select * from employee order by salary desc;
select * from employee order by 3 desc;
分组汇总
group by用法
/*查询每个部门的人数*/
select d_id,count(*) from employee group by d_id;
group by + having用法
/*查询部门人数大于1的部门好及人数*/
select d_id,count(*) from employee group by d_id having count(*)>1;
/*多表连接*/
select a.d_id,b.d_name,count(*) from employee a,department b where a.d_id=b.d_id group by a.d_id,b.d_name;
连接查询
内连接
/*自然连接 natural join*/
select e_name,d_name from employee natural join department;
/*交叉连接 迪卡集cross join*/
select count(*) from employee;3
select count(*) from department;4
select count(*) from employee cross join department;12
等价于:select count(*) from employee,department;12
/*using*/
/*当出现多个连接列时,可以去指定一个连接列,连接列不能加前缀或者别名*/
select e_name,d_name from employee join department using (d_id);
/*on*/
select e_name,d_name from employee join department on employee.d_id=department.d_id;
等价于:select e_name,d_name from employee,department where employee.d_id=department.d_id;
外连接
/*左外连接:左边表的记录全部显示,右边表的记录不满足的用null代替*/
select e_name,d_name from employee a left join department b on a.d_id=b.d_id;
/*右外连接:右边表的记录全部显示,左边表的记录不满足的就用null代替*/
select e_name,d_name from employee a right join department b on a.d_id=b.d_id;
/*全外连接=左外连接+右外连接*/
select e_name,d_name from employee a full join department b on a.d_id=b.d_id;
子查询
/*查询和张三同一个部门的员工姓名,使用嵌套查询*/
select e_name from employee where d_id=(select d_id from employee where e_name='张三');
/*查询比102部门每一个员工的工资都多的员工姓名*/
select e_name from employee where salary > all (select salary from employee where d_id=102);
模式对象管理
模式:一组数据库对象的集合
模式对象:表、视图、索引、存储过程、触发器、包、序列、同义词、函数等
模式与用户的关系:一个模式只能属于一个用户,一个用户可以拥有多个模式,创建一个用
户时,会自动创建一个同名的模式
表
创建表
create table person(id int not null,name varchar(20),primary key(id));
添加表字段
alter table person add column(age int);
插入数据
insert into person values (1,'aa',2);
commit;
查看数据
select * from person;
删除表字段
alter table person drop column (age);
修改表名
alter table person rename to per;
修改字段名
alter table per rename column id to no;
修改字段类型
alter table per modify name varchar2(10);
视图
创建视图
create view v_emp as select e_name,salary,a.d_id,b.d_name from employee a,department where a.d_id=b.d_id and a.d_id=101;
查看视图
select * from v_emp;
索引
创建索引
create index ind_emp on employee(e_name);
重建索引
alter index ind_emp rebuild;
删除索引
drop index ind_emp;
表空间管理
DM管理工具中新建表空间,可添加多个数据文件
用户管理
DM管理工具创建用户,设置默认表空间为TEST
可依次授予用户权限
DM物理备份还原
冷备
关闭数据库服务
dmap服务开启
console DM控制台工具
dmrman工具
[dmdba@localhost ~]$ cd /dm8/bin
[dmdba@localhost bin]$ ./dmrman
dmrman V8
RMAN> backup database '/dm8/data/DAMENG/dm.ini' backupset '/dm8/backup';
热备
开启数据库服务,dmap服务开启
开启归档
DM管理工具打开管理服务器,点击系统管理将服务器转换为配置状态,配置归档,配置完成后将服务器转换为打开状态
可进行库备份、表空间备份和表备份,这里仅进行库备份,其他类似
DM管理工具
manager-左侧栏备份-库备份,右键新建备份
此处报错
重启服务器,或运行checkpoint(100); 可解决
disql
SQL> backup database full backupset '/dm8/bak/full';
也可备份到默认路径:SQL> backup database full;
还原恢复
注意:表空间只能联机备份,脱机还原
console DM控制台工具
指定搜索目录配置备份路径-获取备份,然后依次还原、恢复、更新魔数
dmrman工具
RMAN> restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup';
RMAN> recover database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup';
RMAN> recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
DM逻辑备份还原
四种级别:full:库级,owner:用户级,shcemas:模式级,tables:表级
这里仅进行库级导入导出,其他操作类似
dexp逻辑导出
DM管理工具
右键数据库-导出
命令行
[dmdba@localhost ~]$ cd /dm8/bin
[dmdba@localhost bin]$ ./dexp SYSDBA/SYSDBA directory=/dm8/dexp file=full.dmp full=y log=full.log
dimp逻辑导入
DM管理工具
右键数据库-导入,选择前面导出的文件目录
命令行
[dmdba@localhost bin]$ ./dimp SYSDBA/SYSDBA directory=/dm8/dexp file=full.dmp full=y log=full_dimp.log
DM作业管理
DM管理工具左侧栏创建代理环境,右键作业创建作业JOB1,添加作业步骤和作业调度
这里选择的是备份数据库,因此需要添加备份路径
设置作业执行时间及频率
右键JOB1查看作业历史信息,可以看到JOB1已经执行一次
ODBC配置
[root@localhost opt]# tar -xvf unixODBC-2.3.0.tar.gz
[root@localhost unixODBC-2.3.0]# ./configure
[root@localhost unixODBC-2.3.0]# make && make install
编辑文件
[root@localhost unixODBC-2.3.0]# odbcinst -j可查看文件路径
[root@localhost etc]# vi odbc.ini
[dm8]
Description = DM ODBC DSND
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236
[root@localhost etc]# vi odbcinst.ini
[DM8 ODBC DRIVER]
Description=ODBC DRIVER FOR DM8
Driver=/dm8/bin/libdodbc.so
使用dmdba用户进行连接,输入quit退出,使用root会出错
如果使用dmdba也连接失败,可用isql dm8 -v查看原因
如果是libdodbc.so file not found,但bin目录下存在,可尝试以下方法:
[root@localhost ~]# vi .bashrc
export PATH
export DM_HOME=/dm8
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/bin"
export PATH=$PATH:/$HOME/bin:$/HOME/.local/bin:$DM_HOME/bin