达梦DCA学习笔记

1.检查glibc 需要高于1.14

rpm -aq|grep glibc

1.规划账号(OS)

不建议用root用户安装管理。

 创建组:

[root@dm1 grub]# cat /etc/group|grep dinstall
[root@dm1 grub]# groupadd dinstall

创建用户:

[root@dm1 grub]# id dmdba
[root@dm1 grub]# useradd -g dinstall dmdba
[root@dm1 grub]# passwd dmdba

规划安装路径:

mkdir /dm7
chown -R dmdba:dinstall /dm7 
ls -ld /dm7

配置环境变量

cd /home/dmdba
vi .bash_profile 
配置内容如下:
PATH=$PATH:$HOME/bin
export PATH
export DM_HOME=/dm7
export PATH=$DM_HOME/bin:$DM_HOME/tool:$PATH:$HOME/bin
[dmdba@localhost ~]$ source .bash_profile

配置完成后 执行 echo DM_HOME 若出现 /dm7 则成功,若没有出现则 执行:
source .bash_profile

      设置文件最大打开数量

ulimit -n 65536
或者
vi /etc/security/limits.conf 
添加以下内容:
dmdba soft nofile 4096
dmdba hard nofile 65536

      挂载安装包,需在root用户下

mount -o loop /installdoc/dm7_setup_rh6_64_ent_7.6.0.142_20190312.iso /mnt

切换到dmdba账号下,安装数据库

cd mnt
命令行安装:
./DMInstall.bin -i

2.创建数据库实例-图形化

运行dbca.sh

创建数据库实例--命令行

./dminit path=/dm7/data DB_NAME=DM02 instance_name=DMSERVER02 PORT_NUM=5237

su - root

cd /dm7/script/root/

./dm_service_installer.sh -t dmserver -i /dm7/data/DM02/dm.ini -p DMSERVER02

service DMSERVER02 start

netstat -ntl|grep 52

数据库实例登录

disql sysdba/dameng123@localhost:5236

数据库实例状态切换

select status$ from v$instance;
alter database mount;

重做日志文件

SQL> select path from v$rlogfile;

SQL> alter database add logfile '/dm7/data/DAMENG/DAMENG04.log' size 128;

SQL> select path,rlog_size/1024/1024 from v$rlogfile;

SQL> alter database resize logfile '/dm7/data/DAMENG/DAMENG04.log' to 256;

数据库文件

select path from v$datafile;

控制文件

select para_name,para_value from v$dm_ini where para_name='CTL_PATH';

修改参数(v$parameter)
   参数类型
   0 Sys/session 动态参数,同时修改内存和配置文件
   1 Read only 在数据库运行状态时,不能修改。
   2 In file 静态参数,修改后,重启服务生效

SQL> Select para_name,para_value from v$dm_ini where para_name='BUFFER_POOLS';
LINEID para_name para_value
---------- ------------ ----------
1 BUFFER_POOLS 3

3.2 命令
SP_PARA_SET_VALUE(SCOPE,PARA_NAME,PARA_VALUE);

SCOPE值:
1: 修改配置文件和内存
2:只修改配置文件

示例:
SQL> SP_SET_PARA_VALUE(2,’BUFFER’,1000);

表空间
   视图
   dba_tablespaces
   v$tablespace
   v$huge_tablespace

创建一个表空间,初始大小50M,最大100M

SQL> create tablespace tbs2 datafile '/dm7/data/DAMENG/tbs2_01.dbf' size 50 autoextend on maxsize 100;

创建一个表空间,初始大小50M,表空间由2个数据文件组成,分别存储在不同的磁盘上,每次扩展1m,每个数据文件最大100M

create tablespace tbs3 datafile '/dm7/data/DAMENG/tbs3_01.dbf' size 50 autoextend on next 1 maxsize 100,'/dm7/data/tbs3_02.dbf' size 50 autoextend on next 1 maxsize 100;

扩展表空间

alter tablespace tbs1 add datafile '/dm7/data/DAMENG/tbs1_02.dbf' size 32;

更换存储位置

0:----online
1:------offline

SQL> alter tablespace tbs3 offline;

SQL> select tablespace_name,status from dba_tablespaces;

SQL> alter tablespace tbs3 rename datafile '/dm7/data/tbs3_02.dbf' to '/dm7/data/DAMENG/tbs3_02.dbf';

SQL> alter tablespace tbs3 online;

SQL> select file_name,status,tablespace_name from dba_data_files;
用户管理

SQL> select username from dba_users;

案例1:建立用户test,用户可以创建自己的表,有属于自己的表空间,用户密码要求每60天变更一次。

SQL> create tablespace test datafile '/dm7/data/DAMENG/test_01.dbf' size 32;

SQL>create user test identified by dameng123 limit password_life_time 60 default tablespace test;

SQL> select * from all_users;

SQL> conn test/dameng123

SQL>select grantee,granted_role from dba_role_privs where grantee='TEST';

SQL> select grantee,privilege from dba_sys_privs where grantee='PUBLIC';

SQL> grant create table to test;

案例2:规划一个用户test1,用户每60天变更一次密码,密码尝试连接2次失败,账号锁定5分钟,用户能查询sales.customer表。

create user test1 identified by dameng123 limit password_life_time 60,failed_login_attemps 2,password_lock_time 5;
//尝试登录2次后
SQL> select username,account_status,lock_date from dba_users;                     

SQL>alter user test1 account unlock;
SQL> select username,account_status,lock_date from dba_users;   

SQL> grant select on sales.customer to test1;   //赋权限
SQL> revoke select on sales.customer from test1;    //发现权限过大
SQL> grant select(person_id) on sales.customer to test1;  //赋权限
SQL> conn test1/dameng123
SQL> select user;
SQL> select person_id from bookshop.reader limit 10;

企业招聘一批录入人员,权限固定,只能录入city表。

SQL> conn sysdba/dameng123
SQL> create role r1;
SQL> grant insert on dmhr.city to r1;
SQL> create user test2 identified by dameng123;
SQL> grant r1 to test2;
SQL> conn test2/dameng123
SQL>  insert into dmhr.city values('sdf','dfdss',7);
 insert into dmhr.city values('sdf','dfdss',7);
[-5506]:没有引用表[REGION]上的权限.
SQL> conn sysdba/dameng123
SQL> grant references any table to test2;
SQL> conn test2/dameng123
SQL> insert into dmhr.city values('aaa','bbbb',6);
SQL> commit;

用户维护

收回权限:revoke
SQL> revoke select on dmhr.employee from test1;
赋权限:
SQL> grant references any table to test2;
修改用户密码
SQL> alter user test identified by 123456789;
锁定用户
SQL> alter user test account lock;
解锁用户
SQL> alter user test account unlock;
删除用户:
SQL> drop user test;
SQL> drop user test cascade;-------慎重,最好先备份
删除角色:
SQL> drop role r1;
表的管理

遵循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
约束:主键列—学号,非空—姓名和电话。
备注:student info
create table "TEST1"."STU"
(
    "ID" CHAR(10) ,
    "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 "TEST1"."STU" is 'STUDENT INFO';
1、非空约束
SQL> create table test1.t1(id int);
SQL> alter table test1.t1 modify id int not null;
2、唯一约束
SQL> create table test1.t2(id int unique);
唯一约束遇到null,忽略,可录入多个。
3、主键约束(一张表只能有一个主键约束)
SQL> create table test1.t3(id int primary key);
SQL> create table test1.t4(id int);
SQL> alter table test1.t4 add constraint t4_pri primary key(id);
4、检查约束
SQL> create table test1.t5(id int check(id>=5));
外键约束
SQL> create table test1.t6(sid int primary key ,pid int);
SQL> create table test1.t7(id int primary key,sid int foreign key references test1.t6(sid));
7、对列加备注
SQL> comment on column test1.t6.sid is '编号';
导入数据到数据库

 cat a.sql
insert into test1.t1 values(1);
insert into test1.t1 values(2);
insert into test1.t1 values(3);
insert into test1.t1 values(4);
insert into test1.t1 values(5);
insert into test1.t1 values(6);
insert into test1.t1 values(7);
commit;

SQL> start /home/dmdba/a.sql

SQL> select * from test1.t1;

维护表

1、重命名:
SQL> alter table test1.t1 rename to tt;
2、增加删除列
SQL> alter table test1.tt add name varchar(10) default 'aaaa';
SQL> alter table test1.tt drop name;
3、启用和禁用约束
SQL> select  table_name,constraint_name,constraint_type from dba_constraints where table_name='T5';
SQL> alter table test1.t5 enable constraint CONS134218779;
删除表:
SQL> drop table  test1.tt;
如何去查看表结构
语法:sp_tabledef(‘模式名’,’表名’);
SQL> sp_tabledef('TEST','T1');
语法:DBMS_METADATA.GET_DDL(‘类型’,‘表名’,‘模式名’)
SQL> select dbms_metadata.get_ddl('TABLE','STU','TEST1');
视图管理

创建create view() as select() from () where();
SQL>create view test1.v1 as select * from dmhr.employee;
SQL>create view test1.v2 as select employee_name,hire_date,salary from dmhr.employee where hire_date >='2010-01-01';
相关数据字典:
Dba_views;
索引管理

查看索引:

SQL> select table_name,index_name from dba_indexes where table_name='STU';

创建表的索引

规划索引表空间,表的数据无序的,索引的数据是有序

SQL> create tablespace index1 datafile '/dm7/data/DAMENG/index1_01.dbf' size 32; //创建索引表空间
SQL> create table test1.emp(id int);
SQL> select table_name,index_name from dba_indexes where table_name='EMP';
SQL> create index ind_emp on test1.emp(id) tablespace index1;
SQL> select table_name,index_name from dba_indexes where table_name='EMP';
SQL> explain select * from test1.emp where id<10;
SQL> begin  //没有走我们自己建的索引,统计信息是旧的,需要重新收集
收集统计信息:
2   dbms_stats.gather_table_stats('TEST1','EMP');
3   end;
4   /
DMSQL 过程已成功完成
已用时间: 8.743(毫秒). 执行号:1969.
SQL> explain select * from test1.emp where id<10;

1   #NSET2: [0, 1, 12] 
2     #PRJT2: [0, 1, 12]; exp_num(2), is_atom(FALSE) 
3       #SSEK2: [0, 1, 12]; scan_type(ASC), IND_EMP(EMP), scan_range(null2,10)

重建索引:

SQL> alter index test1.ind_emp rebuild;
SQL> alter index test1.ind_emp rebuild online; //online的作用?
删除索引:
SQL> drop index test1.ind_emp;

序列管理:

SQL> create sequence test1.s1
2   start with 1    -----序列的起始
3   increment by 1  ---自增多少
4   maxvalue  5  ----最大值
5   nocache  ---是否缓存
6   nocycle   ---是否循环
7   ;
SQL> create table test1.t10(id int primary key);
SQL> insert into test1.t10 values(test1.s1.nextval);
SQL> insert into test1.t10 values(test1.s1.nextval);
修改序列

SQL> alter sequence test1.s1 maxvalue 10; SQL> insert into test1.t10 values(test1.s1.nextval);

删除序列

SQL> drop sequence test1.s1;

 

案例1:求各个部门的最高工资

SQL> select department_id,max(salary) from dmhr.employee group by department_id;
1
案例2:找出部门平均工资大于10000的所有部门

SQL> select department_id,avg(salary) av1 from dmhr.employee group by department_id having avg(salary)>10000;
1
注意:having 表示分组后的数据进行过滤,having不能单独使用,一定是和group by 一起使用。聚合函数不能出现在where子句中。

排序 升序asc 降序desc 默认升序

SQL> select department_id,avg(salary) av1 from dmhr.employee group by department_id having avg(salary)>10000 order by av1 desc;

多表连接查询:

内连接:结果集显示全部满足连接条件的记录 inner join

SQL> select employee_name,department_name from dmhr.employee e join dmhr.department d on e.department_id=d.department_id limit 10;

外连接

   左外连接:把left join 左边的全部显示出来,右边的只显示满足条件的,不满足条件的用null 代替

SQL> update dmhr.employee set department_id=null where employee_id=1001;
SQL> select employee_name,department_name from dmhr.employee e left join dmhr.department d on e.department_id=d.department_id limit 10;
右外连接: 把写在right join右边的全部显示出来,左边的只显示满足条件的,不满足条件的用null代替

SQL> insert into dmhr.department values('1106','aaaa','9002',9);
SQL> select employee_name,department_name from dmhr.employee e right join dmhr.department d on e.department_id=d.department_id;
全外连接:返回所有的记录,包括不满足条件

select employee_name,department_name from dmhr.employee full join dmhr.department d on e.department_id=d.department_id;

物理备份
1)工具简介
冷备:(dmap服务打开的状态下,数据库是关闭的)
热备:(dmap服务一定是打开的,数据库也是打开的,数据库要开归档)
导入导出:dexp dimp
集群:数据守护(dw),dsc(rac)
达梦支持第三方的备份软件:爱数,鼎甲

2)物理备份过程(冷备)
第一步:创建归档日志存放路径
#mkdir /dm7/data/dm01/arch

第二步:开归档
SQL> alter database mount;
SQL> alter database add archivelog 'type=local,dest=/dm7/data/dm01/arch,file_size=64,space_limit=0';
SQL> alter database archivelog;
SQL> alter database open;
SQL> select ARCH_MODE,STATUS$ from v$database;

第三步:停止数据库服务
[dmdba@localhost dm01]$ service DmServicedm01 stop

第四步:使用dmrman备份
说明:dmrman 命令必须在命令所在的bin目录下执行才行
[dmdba@localhost bin]$ pwd
/dm7/bin
[dmdba@localhost bin]$ ./dmrman
RMAN> backup database '/dm7/data/dm01/dm.ini';
根据提示信息找到备份文件位置

使用命令行备份(热备)
使用命令行备份,同样需要开归档,但是不需要停数据库服务
#mkdir /dm7/data/backup
SQL> backup database full backupset '/dm7/data/backup/full_bak';
增量备份
SQL> insert into user2.t1 values(user2.s1.nextval);
SQL> select checkpoint(1);
SQL> backup database increment backupset '/dm7/data/backup/incr_bak';

恢复表空间

SQL> restore tablespace tbs3 from backupset '/dm7/backup/full_bak2/';

SQL> alter tablespace tbs3 online;

逻辑备份
导入导出(dexp,dimp)
分为四种级别:分别独立,互斥不能同时存在
数据库级别:导出或导入整个数据库的访问对象
用户:导入或导出一个或多个用户所拥有的所有对象
模式:导入或导出一个或多个模式下的所有的对象
表级:导出或导入一个或多个指定表或表分区

逻辑导出

[dmdba@dca01 tool]$ mkdir /dm7/backup/dexp
[dmdba@dca01 bin]$ ./dexp sysdba/dameng123@localhost:5236 file=dexp01.dmp log=dexp01.log directory=/dm7/backup/dexp full=y
逻辑导入

[dmdba@dca01 bin]$ ./dimp sysdba/SYSDBA@localhost:5239 file=/dm7/backup/dexp/dexp01.dmp log=/dm7/backup/dexp/dimp01.log

作业:

tool/manager

Sysjobs:作业信息
Sysjobschedules:作业的调度信息
Sysjobhistories:作业的历史信息
SQL> select * from sysjob.sysjobs;

dm开发:

达梦支持那些语言做开发
C,c++, java,python ,php,perl
定义一个DM jdbc 的驱动串:
String jdbcstring=”dm.jdbc.driver.DmDriver”
DM URL连接串
String urlstring=”jdbc:dm://ip:5236”

10.1.配置ODBC
Linux环境中配置ODBC环境
检查:[root@dca01 ~]# rpm -aq|grep gcc 有没有gcc包,如果没有,配置yum源去安装。
解压安装包
tar -xzvf unixODBC-2.3.0.tar.gz

配置odbc

[root@dca01 unixODBC-2.3.0]# cd unixODBC-2.3.0

[root@dca01 unixODBC-2.3.0]# ./configure --enable-gui=no

编译odbc

[root@dca01 unixODBC-2.3.0]# make

[root@dca01 unixODBC-2.3.0]# make install

查看odbc的版本

[root@dca01 unixODBC-2.3.0]# odbc_config --version

查看odbc配置文件路径

[root@dca01 unixODBC-2.3.0]# odbc_config --odbcini

[root@dca01 unixODBC-2.3.0]# odbcinst -j

配置odbc.ini 和odbcinst.ini

[root@localhost ~]# cd /usr/local/etc/
[root@localhost etc]# cat odbc.ini 
[dm7]
Description = DM ODBC DSND
Driver = DM7 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = dameng123
TCP_PORT = 5236
[root@localhost etc]# 
[root@localhost etc]# cat odbcinst.ini 
[DM7 ODBC DRIVER]
Description = ODBC DRIVER FOR DM7
DRIVER = /dm7/bin/libdodbc.so
[root@localhost etc]# isql dm7
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值