管理表,视图,索引、序列
表的管理
达梦支持的哪些表: 默认的表是(索引组织表),堆表,临时表,分区表,外部表等。
如何规划表?
命名:字母开头 a-z,0-9,$#_ 数据类型:int char varchar date clob blob number等等。 存储位置:自已的规划的表空间。 约束(5大约束) 非空约束,唯一约束,主键,检查,外键 注释:comment 遵循3范式
案例1:规划一张学员信息表。
表名:STU
学号(id char(10)),
姓名(sname varchar(20) not null),
性别 (sex char(1))
年龄(age int)
电话(tel varchar(15) not null)
家庭住址:(address varchar(50))
表空间:STU
约束:主键列---学号 非空---姓名,电话
备注:学员信息表
create table "TEST3"."STU"
(
"ID" CHAR(10) not null ,
"SNAME" VARCHAR(20) not null ,
"SEX" CHAR(1),
"AGE" INT,
"TEL" VARCHAR(15) not null ,
"ADDRESS" VARCHAR(50),
primary key("ID")
)
storage(initial 1, next 1, minextents 1, fillfactor 0, on "STU");
comment on table "TEST3"."STU" is '学员信息表';
comment on column "TEST3"."STU"."ID" is '学号';
comment on column "TEST3"."STU"."SNAME" is '姓名';
comment on column "TEST3"."STU"."SEX" is '性别';
comment on column "TEST3"."STU"."AGE" is '年龄';
comment on column "TEST3"."STU"."TEL" is '电话';
comment on column "TEST3"."STU"."ADDRESS" is '家庭住址';
如何查看表结构
sp_tabledef('TEST3','STU'); select dbms_metadata.get_ddl('TABLE','STU','TEST3'); 如何查看表所属的表空间 select table_name,tablespace_name from dba_tables where table_name='STU'; 如何查看表有哪些约束 select table_name,constraint_name,constraint_type from dba_constraints where table_name='STU'; 案例2:创建表的时候指定约束 create table test3.t2(id int); alert table test3.t2 modify id int not null; create table test3.t3(id int not null); 唯一约束 create table test3.t4(id int unique); 主键约束 create tabel test3.t5(id int primary key); 检查约束 create table test3.t6(id int check(id>=5)); create table test3.t7(id int); alter table test3.t7 add constraint t7_check check(id>=5); 外键约束 create table test3.t9(sid int primary key,pid int); create table test3.t10(id int primary key ,sid int foreign key references test3.t9(sid));
表的备注
案例3:加备注 comment on column test3.t2.id is '编号';
如何导入数据到表中
案例4:如何导入数据到表中。 start /home/dmdba/a.sql 通过DTS工具去做迁移 达梦安装目录 tool ./dts
如何去维护表:
重命名 alter table test3.t2 rename tt; 增加删除列 增加列 alter table test3.tt add name varchar(10) default 'aa'; 删除列 alter table test3.tt drop name; 启用和禁用约束 (迁移数据的时候,最好把约束禁用,迁移完成再启用) alter table test3.t6 disable constraint CONS134218780; alter table test3.t6 enable constraint CONS134218780; 删除表 drop table test3.tt;
视图
简单视图,复杂视图,物化视图 注:简单视图和复杂视图不占磁盘空间 物化视图占磁盘空间
创建语法:
Create view () as select () from () where ();
视图查看
select view_name,text from dba_views where view_name='V1';
修改视图
create or replace view test3.v1 as select employee_name,job_id from dmhr.employee;
删除视图
drop view v1;
序列
创建序列
create sequence test3.s1 2 start with 1 ----序号起始 3 increment by 1 --自增多少 4 maxvalue 5 ---最大值 5 nocache ---是否缓存 6 nocycle; ---是否循环
序列的应用
insert into test3.t12 values(s1.nextval);
同义词
表或视图的别名,分为普通同义词,公共同义词
创建同义词:
公共:SQL> create public synonym ss1 for dmhr.employee; 普通:SQL> create synonym ss2 for dmhr.employee;
修改同义词:
create or replace synonym ss2 for dmhr.city;
删除同义词:
drop synonym ss2; drop public synonym ss1;
索引
达梦支持那些索引: 二级索引,位图索引,唯一索引,复合索引,函数索引,分区索引等。 默认的表是索引组织表,利用rowid创建一个默认的索引,所以我们创建的索引,称为二级索引。
查看表的索引
select table_name,index_name from dba_indexes where table_name='T12';
索引的作用
加快表的查询,对数据库做DML操作的时候,数据库会自动维护索引。索引是一棵倒置的树,使用索引,就是对这棵索引树做遍历。
建立索引的规则
1:经常查询的列 2、连接条件列 3、谓词经常出现的列(where) 4、查询是返回表的一小部分数据 不适合做索引的情况: 1、列上有大量的null 列上的数据有限(例如性别)
怎么创建索引
1、规划索引表空间 2、表的数据是无序的,索引的数据是有序的。
Emp中的employee_id 建立索引。
建立表: SQL> create table test3.emp as select * from dmhr.employee; 建立索引表空间 SQL> create tablespace index1 datafile '/dm7/data/DAMENG/index01.dbf' size 32; 建立索引: SQL> create index ind_emp on test3.emp(employee_id) tablespace index1; 查询索引: select table_name,index_name from dba_indexes where table_name='EMP';
查看表的执行计划:
没有走索引,统计信息是旧的,需要重新收集
重新收集后,走索引了。
注意一下,创建索引,删除,重建索引和收集统计信息,不要在业务高峰去做。
维护索引:
重建:alter index test3.IND_EMP rebuild; 删除:drop index test3.ind_emp;
十一、备份还原
备份作用? 1、防止误操作 2、软件硬件故障 3、防止天灾人祸 备份方式:物理备份,逻辑备份 1、物理备份还原: 冷备:(dmap服务打开的状态下,数据库是关闭的) 热备:(dmap服务一定是打开的,数据库也是打开的,数据库要开归档) 导入导出:dexp dimp 集群:数据守护(dw),dsc(rac) 达梦支持第三方的备份软件:爱数,鼎甲。
数据库开归档:
命令方式下:
SQL> alter database mount;
SQL> alter database add archivelog 'type=local,dest=/dm7/arch,file_size=64,space_limit=0';
SQL> alter database archivelog;
SQL> alter database open;
SQL> select name,status$,arch_mode from v$database; 利用管理工具开归档: tool/manager
通过dmrman去备份
Dmap服务要开启,数据库实例关闭。
命令行方式下全备,增量备
mkdir /dm7/backup
SQL> backup database full backupset '/dm7/backup/full_bak';
SQL> select checkpoint(0);
SQL> backup database increment backupset '/dm7/backup/incr_bak';
利用管理工具进行热备
还原
模拟表空间破坏 tbs2
mv tbs2_01.dbf tbs2_01.dbf.bak
重启服务,数据库处于mount 状态。手动open;
SQL> alter database open;
restore tablespace tbs2 from backupset '/dm7/backup/full_bak/';
SQL> alter tablespace tbs2 online;
逻辑导入导出
Dexp 逻辑导出 dimp 逻辑导入 Dexp和dimp是DM自带的工具,分为四种级别: 数据库级,用户级、模式级和表级。四种级别独立互斥,不能同时存在。四种级别所提供的功能: 数据库级(full):导出或导入整个数据库中的访问对象。 用户级(owner):导出或导入一个或多个用户所拥有的所有对象。 模式级(schemas):导出或导入一个或多个模式下的所有对象。 表级(table):导出或导入一个或多个指定的表或表分区。
[dmdba@dca01 bin]$ disql sysdba/SYSDBA@localhost:5237
SQL> create user DMHR identified by dameng123;
SQL> create user TEST2 identified by dameng123;
SQL> create user TEST3 identified by dameng123;
[dmdba@dca01 bin]$ ./dimp sysdba/SYSDBA@localhost:5237 file=/dm7/backup/dexp/dexp01.dmp log=dimp02.log directory=/dm7/data/dimp/
配置ODBC
1、LINUX环境中配置ODBC环境
[root@dca01 installdoc]# tar -xzvf unixODBC-2.3.0.tar.gz
[root@dca01 installdoc]# cd unixODBC-2.3.0
[root@dca01 unixODBC-2.3.0]# ./configure --enable-gui=no
[root@dca01 unixODBC-2.3.0]# make
[root@dca01 unixODBC-2.3.0]# make install
[root@dca01 unixODBC-2.3.0]# odbc_config --version
2.3.0
[root@dca01 unixODBC-2.3.0]# odbc_config --odbcini
/usr/local/etc/odbc.ini
修改配置文件
Odbc.ini
[dm7]
Desription=DM ODBC DSND
Driver = DM7 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = dameng123
TCP_PORT = 5236
配置odbcinst.ini
[DM7 ODBC DRIVER]
Description = ODBC DRIVER FOR DM7
Driver = /dm7/bin/libdodbc.so
[root@dca01 etc]# chmod 775 odbc.ini
[root@dca01 etc]# chmod 775 odbcinst.ini
测试连接