irpas技术客

达梦数据库个人学习笔记分享_weixin_58242636

irpas 8343

目录

约束:........................................................................................................................ 1

视图:........................................................................................................................ 2

索引:........................................................................................................................ 2

表空间及数据文件:............................................................................................... 2

重做日志:............................................................................................................... 3

归档:........................................................................................................................ 3

内、外连接:........................................................................................................... 4

账户及权限:........................................................................................................... 5

常用函数:............................................................................................................... 7

备份:........................................................................................................................ 7

其他:........................................................................................................................ 8

约束:

alter table test modify aaa not null; 为test表aaa字段创建非空约束。注意:如果表已经有数据,并且该列有 NULL 值,非空的约束我们是无法添加的。

alter table test modify aaa null;删除非空约束

alter table test modify aaa default ‘贵阳’; 修改表test列aaa的默认值为贵阳

alter table test alter aaa drop default; 删掉默认设置

alter table test add constraint qwe unique (aaa);为test表aaa字段创建唯一约束qwe。

alter table test add constraint qwe primary key (aaa);

alter table test add constraint qwe primary key (aaa,bbb); 同时添加2个主键,一个一个添加的时候会报错。

alter table test add constraint qwe check(aaa>3);

alter table test add constraint qwe foreign key (aaa) references test2(eee); 外键约束,一个表可以有多个外键,外键是另外一张表的主键,同时外键列的内容必须包含在另外一张表主键列的内容中。我们也可以在创建表时指定。

alter table test disable constraint qwe; 禁用约束qwe

alter table test enable constraint qwe; 启用约束qwe

select * from dba_constraints;

alter table test drop constraint qwe;

当drop或delete某张表失败提示锁超时时,select * from v$lock 查看被锁事务的TRX_ID,再select * from v$sessions,根据TRX_ID查找该事务对应的SESS_ID,最后 sp_colse_session(找到的SESS_ID)关闭对应的会话。

视图:

create view test as select……创建视图

create or replace view test as ……修改视图

索引:

create unique index qwe on test(aaa);创建唯一索引

create bitmap index qwe on test(aaa);创建位图索引

create cluster indx qwe on test(aaa);创建聚集索引

位图索引与聚集索引不能在一张表上

select * from dba_indexes where table_name like ‘TEST’;查询表test的索引,注意是index后面加es,而不是加s

drop index qwe;

表空间及数据文件:

在 DM 数据库中,表空间由一个或者多个数据文件组成。DM 数据库中的所有对象在逻辑上都存放在表空间中,而物理上都存储在所属表空间的数据文件中。

create tablespace test datafile '/home/dmdba/dmdbms/data/DAMENG/test.dbf' size 1024? autoextend on next 4 maxsize? unlimited;

alter tablespace test resize datafile '/home/dmdba/dmdbms/data/DAMENG/test.dbf' to 1025;

alter tablespace test add datafile '/home/dmdba/dmdbms/data/DAMENG/test.dbf' size 1024;

alter tablespace test datafile '/home/dmdba/dmdbms/data/DAMENG/test.dbf' autoextend off;

select * from dba_tablespaces;

select * from user_tablespaces;

select tablespace_name,bytes/1024/1024 as "free_space" from dba_free_space where tablespace_name='TEST' 查看表空间可用空间

select tablespace_name,user_bytes from dba_data_files where tablespace_name='TEST'.查看表空间可用空间

alter tablespace ETST offline;

alter tablespace TEST online;

select tablespace_name,status from dba_tablesapces where tablespace_name =’TESE’;查看表空间状态

alter tablespace TEST rename to test;

drop tablespace test;

重做日志:

select * from dba_objects;

select * from sysobjects;

select * from v$rlog 查看系统重做日志状态

select * from v$rlogfile 查找重做日志文件

alter database resize logfile ‘/hosm/dmdba/dm/dmdbma/data/DAMENG/test.log’ to 1024;

修改日志大小

alter database add logfile ‘/hosm/dmdba/dm/dmdbma/data/DAMENG/bbb.log’ size 1024;

增加日志

alter database rename logfile ‘/hosm/dmdba/dm/dmdbma/bbb.log’ to ‘/users/ems/rsyslog1.log’;

迁移日志

归档: 开启/关闭归档:

第一步:alter database mount;

第二步:alter database archivelog; 开启归档

或 alter datebase noarchivelog; 关闭归档

2、创建归档文件(默认文件大小1024M)

第一步:alter database mount;

第二步:alter database archivelog;

第三步:alter database add archivelog ‘DEST=/home/dmdba/dm7/dmdbms/data/DAMENG/trace,TYPE=LOCAL,FILE_SIZE=64,SPACE_LIMIT=0’;

其中DEST:归档路径

TYPE:归档类型

FILE_SIZE:文件大小

SPACE_LIMIT:空间限制大小

3、修改、删除归档文件(需要先关闭归档)

第一步:alter database mount;

第二步:alter database noarchivelog;

第三步:alter database modify archivelog ‘DEST=/home/dmdba/dm7/dmdbms/data/DAMENG/trace,TYPE=LOCAL,FILE_SIZE=128,SPACE_LIMIT=0’;

或者:alter database delete archivelog ‘DEST=/home/dmdba/dm7/dmdbms/data/DAMENG/trace’;

4、查看归档模式(需要数据库OPEN状态)

?? select arch_mode from v$database;

5、查询归档日志文件信息

?? select * from v$archived_log;

6、查询归档状态(非归档状态显示未选定行)

?? select * from v$arch_status;

7、其他归档信息数据字典

???v$arch_file? ??v$arch_queue??? v$arch_send_info?? ???v$backupset_arch

?? v$backupset_search_dirs

8、查看归档类型type、归档路径dest、文件大小file_size、空间限制大小space_limit等;

select * from v$dm_arch_ini

内、外连接:

set linesize 999 pagesize 999 设置1行及1页显示字节数

select a.*,b.* from test a join test2 b on a.”aaa”=b.”eee”;内连接

select a.*,b.* from test a left/right/full join test2 b on a.”aaa”=b.”eee”; 左/右/全外连接

select a.*,b.* from test a cross join test2 b; 交叉内连接

select a.*,b.* from test a naturaljoin test2 b;自然内连接

select a.*,b.* from test a join test2 b using (“aaa”); using内连接,两个表必须都要有using后面的(aaa)指定列。列出两表aaa值相等的数据行。类似于select a.*,b.* from test a join test2 b on a.“aaa”=b. .“aaa”.

但using输出结果没aaa字段,on语句输出结果包含aaa字段。

账户及权限:

alter user test identified by “sssssss”; 密码要用双引号引起来

isql ‘test/“test-123456”’@his1;使用带有特殊字符的密码登录时,要用双引号把密码引起来,再用单引号把用户名及密码都引起来。

或者使用这种方式:先输入isql,回车,再输入用户名,回车,再输入密码,回车。

alter user test account lock; 锁定账户

alter uers test account unlock; 解锁账户

alter user test read only; 用户只读

alter user test not read only; 解除用户只读

alter user test default tablespace ssssss;

用户可对应多权限或角色

系统权限:对数据库对象的,比如create table/role/view等

对象权限:对对象中数据的,比如update,select,insert,delete等

sp_set_role

dba_sys_privs 用户/角色拥有的系统权限信息

dba_tab_privs 表权限信息

dba_role_privs 角色权限

grant create table,create view,create role,create index to test;

grant drop any table,drop any index to test;

grant select,insert,update(aaa,bbb,ccc) on his.test to test 将his表空间test表的aaa,bbb,ccc三列的查询、插入、更新权限赋予用户test。回收列权限的时候,用下面这个语句,不能用revoke select,insert,update(aaa,bbb,ccc) on his.test from test,revoke不针对列权限回收。

revoke select,insert,update on his.test from test;

select * from dba_col_prives where grantee=test;

select * from dba_sys_privs where grantee ='test';

grant update,insert,delete,select on his.test to test;

select * from dba_tab_privs where grantee ='TEST';

grant public to test ;

select * from dba_roles;

grant create table to role_name;

grant dba to role_name;

grant update on table test to role_name;

select * from dba_role_privs where grantee='TEST';

call sp_set_role (‘test2’,0);禁用角色,注意此处为单引号,不要call也行

call sp_set_role (‘test2’,1);启用角色,注意此处为单引号,不要call也行

drop role test2;删除角色

alter user test limit failed_login_attemps 3,password_life_time 60;修改test用户登录失败次数和密码有效期

密码复杂度修改:

修改dm.ini的PWD_POLICY值,重启服务生效,其中:

0 无策略

1 禁止与用户名相同

2 口令长度不小于9

4 至少包含一个大写字母

8 至少包含一个数字

16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)

上面的修改方式,只针对新增加的用户。

如果是已存在的用户,若要需要其密码复杂度,则执行以下语句:

alter user test password_policy 0;

或者执行以下SQL语句:

sp_set_para_value(1,’pwd_policy’,2)??? 2为密码复杂度代码

其中括号内第一个数值:

1:内存和ini文件都修改,一般修改动态配置参数

2:只在ini文件修改,可用于动态和静态参数修改。需要重启生效

select password_policy from sysusers where ID=(selsect user_id from dba_users where username =’test’);查询test用户的密码复杂度等级

sysusers里面主要存放用户资源限制类信息

dba_users里面主要存放用户基本信息和状态。

IP控制:

分两类,允许IP和禁止IP,其中禁止IP优先

alter user test allow_ip “192.168.100.111”,”192.168.101.111” 允许此两IP通过,注意IP要用双引号引起来

alter user test allow_ip “192.168.100.*”,”192.168.101.*”? 允许此两网段通过

alter user test not_allow_ip??? 禁止IP

取消IP限制:

alter user test allow_ip null

alter user test not_allow_ip null

IP被限制后,isql提示无效的IP

IP被限制后,alarm -log 0检索正常但会提示err_buf:无效的IP,经测试不影响告警入历史库

常用函数:

select round(“aaa”,2) from test;从表test中查询aaa列,并四舍五入保留2位小数

select nvl(“aaa”,0) from test; 从表test中查询aaa列,并判断是否为空,若为空用0代替

select to_char(acting_time,’YYYY-MM-DD’) from test; 查询表test中acting_time列,并将其日期型或数值型转化为字符型

select “aaa”,case “ccc” when 数值1 then 2*“bbb” when 数值2 then 3*”bbb” else “ddd” end case from test;从表test中查询aaa和ccc,其中当ccc等于数值1,ccc返回2倍的bbb,当ccc等于数值2,ccc返回3倍的bbb,否则ccc返回ddd。

insert into test values (1,now); 插入一行数据:1和当前时间,精确到毫秒

insert into test values (1,sysdate); 插入一行数据:1和系统时间,精确到秒

备份:

逻辑备份:exp、imp

物理备份:脱机备份(数据库关闭状态),联机备份(归档模式,数据库运行状态)

dimp his/Gzdw12345@his1 tables=t1.tmp show=y remap_schema=HIS:TEST 参数show表示打印出需要导入的表的原始信息,包含模式、表名称等,但不执行导入语句。模式名最好为大写。

alter database open或mount或suspend;

select * from v$instance;

select name,status$ from v$instance;

dimp SYSDBA/SYSDBA@his1 IGNORE=Y ROWS=Y FULL=Y file=xxx;( IGNORE=Y,忽略报错;ROWS=Y,数据行;FULL,整表或库)

./dexp help 或./dimp help 可以查看

Dexp SYSDBA/SYSDBA@his1 file=/users/ems/dd.dmp tables=alarm_alleventlog2021% fuzzy_match=y query=”where fac_name = ‘test’”

物理备份:

备份到his服务器,而不是本地工作站定义的备份目录,数据库dmdba用户必须具备写入权限数据库必须处于open状态全库或表空间备份需要归档模式,且必须有归档日志

表级:

backup table test backupset ‘/home/dmdba/dm/dmdbms/test_bak’ 物理备份表test

restore table test from backupset ?‘/home/dmdba/dm/dmdbms/test_bak’ 物理还原表数据,不能新建表,这是与逻辑备份不一样的地方。

如果表已删除,要先还原表结构,再还原表数据:

restore table test struct from backupset ……

如果还原表数据时,报错“违反引用约束”:

restore table test without constraint from backupset ……

数据库级:

backup database full backupset ……

数据库必须处于open状态

达梦bin目录下./dmrman工具:

show backupset ‘/home/dmdba/….’

其他:

create schema ddddd; 创建模式dddd

create schema ddddd authorization test; 给test用户创建ddddd模式

select * from dba_objects;

select owner,object_name,object_type,status from dba_objeces; 此语句里的owner对应的就是模式名

objece 对象

select * from test order by aaa desc,bbb sec; 前面的排序条件,优先级高于后面的排序条件

select aaa,count(bbb) from test group by xxx having count(bbb)>100;

select aaa,bbb from test where bbb>all(select bbb from test where ccc=108); 等同于 select aaa,bbb from test where bbb> (select max(bbb) from test where ccc=108); 大于所有;

同理:<all等同于<min

select aaa,bbb from test where bbb>any(select bbb from test where ccc=108); 等同于 select aaa,bbb from test where bbb> (select min(bbb) from test where ccc=108); 大于其中任意一个;同理:<any 等同于<max

in? 等于列表中的任意一个

SQL语句环境下输入host加操作系统命令,可以执行操作系统命令,比如:host top,相当于在操作系统执行top命令,host pwd相当于操作系统pwd命令,host whoami……

Select c.aaa,b.bbb from test a left join test2 b on a.ccc=b.ccc;

select * from dba_constraints where table_name ='TEST';

select * from V$CONNECT; 查看连接

set schema HIS;切换同一用户多个模式

CREATE SCHEMA "his2" AUTHORIZATION "HIS";为his用户创建模式his2

dimp his/Gzdw12345@his1:5236 file='/users/ems/test.dmp'? remap_schema=HIS:TEST? 将his模式导出的表导入到test模式下

remap_schema

union all或distinct

select aaa from test union distinct select bbb from test2;

select distinct aaa from test;

undo,存在roll表空间

redo,重做日志

归档日志

select * from V$rlogfile; 查看重做日志

select * from dba_tables where table_name like '%LOG%'

select * from sysusers; 查看用户最近登录时间及IP,允许/禁止登录IP,允许/禁止登录时间段等

update test set alarm_content=replace(alarm_content,’test1’,’test2’); 将test表中alarm_content字段中test1替换为test2,其中被替换和替换对象(如果是汉字)需用单引号引起来。

alter table test modify “aaa” fault ‘test’; 修改test表aaa字段默认值:test

select * from dba_tab_columns where column_name like ‘%IP%’;

select top 10 * from (select? distinct aaa from test);

select count(distinct aaa) from test;

dba_sys_privs??????? 以系统为单位的授权信息,grant

dba_role_privs????? 以角色为单位的授权信息,grant

dba_tab_privs?????? 以表为单位的授权信息,grant

dba_col_privs??????? 以列为单位的授权信息,grant

dba_cons_columns??????? 带约束的列

dba_tab_columns 所有表的所有列

insert into test (select top 10 aaa,bbb,ccc,ddd from test2 order by bbb)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

#! /bash/bash

disql 'edb/"tset1234@"'svr1 <<EOF

backup database full backupset ‘dmbak’;

EOF??????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????crontab ?-e? ???? 0? 0? 20 ?1,4,7,10 ?* ?sh ?/users/ems/bf.sh

Select * from dba_tab_privs where dba_tab_privs.row like ‘%TEST%’;

Drop user test cascade; 级联删除用户test

Select * from dba_tab_privs where grantee like ‘%TEST%’;

Create table test (a int ,b int , c as (a+b));

连接数据库另一种方法:

disql? /nolog

conn HIS

输入密码

如果执行某语句,敲完回车后没反应,可以试着输入/再回车


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #达梦数据库个人学习笔记分享 #目录约束 #1视图 #2