暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

达梦数据库基础知识(二)

IT小Chen 2022-09-19
3505

表空间管理

    [root@cjc-db-01 ~]# xhost +
    access control disabled, clients can connect from any host
    [root@cjc-db-01 ~]# echo $DISPLAY
    localhost:11.0

    图形界面管理表空间

    打开manager工具


    新增表空间

    数据文件大小,必须>=32MB

    查看创建语句

    通过命令查看表空间名称

      [dmdba@cjc-db-01 ~]$ disql sysdba/Dameng123
      Server[LOCALHOST:5236]:mode is normal, state is open
      login used time : 10.398(ms)
      disql V8
        SQL> select tablespace_name from dba_tablespaces;
        LINEID TABLESPACE_NAME
        ---------- ---------------
        1 SYSTEM
        2 ROLL
        3 TEMP
        4 MAIN
        5 BOOKSHOP
        6 DMHR
        7 CJC
        8 HMAIN
        8 rows got

        创建表,不指定表空间

          SQL> create table t1(id int);
          executed successfully
          used time: 253.312(ms). Execute id is 602.

          创建表指定表空间

            SQL> create table t2(id int) tablespace CJC;
            executed successfully
            used time: 2.205(ms). Execute id is 603.

            不指定表空间,默认存放在MAIN表空间下,类似OracleUSERS表空间。

              SQL> select tablespace_name,table_name from dba_tables where owner='SYSDBA';
              LINEID TABLESPACE_NAME TABLE_NAME
              ---------- --------------- ------------------
              1 TEMP ##PLAN_TABLE
              2 TEMP ##HISTOGRAMS_TABLE
              3 MAIN T1
              4 CJC T2
              used time: 242.219(ms). Execute id is 604.

              命令创建表空间

                SQL> select file_name from dba_data_files;
                LINEID FILE_NAME
                ---------- -----------------------------
                1 dm8/data/DAMENG/SYSTEM.DBF
                2 /dm8/data/DAMENG/CJC.dbf
                3 /dm8/data/DAMENG/DMHR.DBF
                4 /dm8/data/DAMENG/BOOKSHOP.DBF
                5 /dm8/data/DAMENG/MAIN.DBF
                6 /dm8/data/DAMENG/TEMP.DBF
                7 /dm8/data/DAMENG/ROLL.DBF
                7 rows got

                数据文件大小数值型,不能写单位。

                  SQL> create tablespace chen datafile '/dm8/data/DAMENG/chen.dbf' size 10M;
                  create tablespace chen datafile '/dm8/data/DAMENG/chen.dbf' size 10M;
                  create tablespace chen datafile '/dm8/data/DAMENG/chen.dbf' size 10M;
                  *
                  line 1, column 67, nearby [M] has error[-2007]:
                  Syntax error.
                  used time: 0.529(ms). Execute id is 0.

                  数据文件大小不能小于32M

                    SQL> create tablespace chen datafile '/dm8/data/DAMENG/chen.dbf' size 10;
                    create tablespace chen datafile '/dm8/data/DAMENG/chen.dbf' size 10;
                    [-2410]:Error in line: 1
                    Data file [/dm8/data/DAMENG/chen.dbf] size is invalid.
                    used time: 0.504(ms). Execute id is 0.

                    创建成功,大小单位MB这块和Oracle不同,Oracle支持MBGB等单位。

                      SQL> create tablespace chen datafile '/dm8/data/DAMENG/chen.dbf' size 32;
                      executed successfully
                      used time: 30.891(ms). Execute id is 607.

                      查看物理文件

                        [root@cjc-db-01 ~]# ll -rth /dm8/data/DAMENG/chen.dbf
                        -rw-r--r-- 1 dmdba dinstall 32M Sep 17 23:10 /dm8/data/DAMENG/chen.dbf

                        查看数据文件信息

                        新增表空间或数据文件时,不指定自动扩展属性时默认开启自动扩容,最大可扩展为16TB

                        Oracle不同,Oracle默认不开启自动扩展,数据块大小8KB时,单个数据文件自动扩展最大值32GB

                          SQL> select tablespace_name,file_name,bytes,AUTOEXTENSIBLE,MAXBYTES from dba_data_files;
                          LINEID TABLESPACE_NAME FILE_NAME BYTES AUTOEXTENSIBLE MAXBYTES
                          ---------- --------------- ----------------------------- -------------------- -------------- --------------
                          1 SYSTEM /dm8/data/DAMENG/SYSTEM.DBF 24117248 YES 17592184995840
                          2 CHEN /dm8/data/DAMENG/chen.dbf 33554432 YES 17592184995840
                          3 CJC /dm8/data/DAMENG/CJC.dbf 104857600 YES 17592184995840
                          4 DMHR /dm8/data/DAMENG/DMHR.DBF 134217728 YES 17592184995840
                          5 BOOKSHOP /dm8/data/DAMENG/BOOKSHOP.DBF 157286400 YES 17592184995840
                          6 MAIN /dm8/data/DAMENG/MAIN.DBF 134217728 YES 17592184995840
                          7 TEMP /dm8/data/DAMENG/TEMP.DBF 10485760 YES 17592184995840
                          8 ROLL /dm8/data/DAMENG/ROLL.DBF 134217728 YES 17592184995840
                          8 rows got

                          新增数据文件

                          大小也不能指定单位

                            SQL> alter tablespace cjc add datafile '/dm8/data/DAMENG/cjc01.dbf' size 32;
                            executed successfully
                            used time: 120.055(ms). Execute id is 612.

                            查看数据文件

                              SQL> select tablespace_name,file_name,bytes,AUTOEXTENSIBLE,MAXBYTES from dba_data_files where tablespace_name='CJC';
                              LINEID TABLESPACE_NAME FILE_NAME BYTES AUTOEXTENSIBLE MAXBYTES
                              ---------- --------------- -------------------------- -------------------- -------------- --------------
                              1 CJC /dm8/data/DAMENG/CJC.dbf 104857600 YES 17592184995840
                              2 CJC /dm8/data/DAMENG/cjc01.dbf 33554432 YES 17592184995840
                              used time: 6.713(ms). Execute id is 613.

                              表空间删除

                                SQL> drop tablespace chen;
                                executed successfully
                                used time: 152.603(ms). Execute id is 611.

                                物理文件也一块删除了,并且删除时不会检查表空间下是否有数据,直接进行删除。

                                  [root@cjc-db-01 ~]# ll -rth /dm8/data/DAMENG/chen.dbf
                                  ls: cannot access /dm8/data/DAMENG/chen.dbf: No such file or directory

                                  注意:

                                  数据文件的物理文件也自动删除了,这块和Oracle不同,Oracle语法更灵活。

                                  Oracle数据库删除表空间部分命令如下:

                                    1.删除空的表空间,但是不包含物理文件
                                    drop tablespace tablespace_name;
                                    2.删除非空表空间,但是不包含物理文件
                                    drop tablespace tablespace_name including contents;
                                    3.删除空表空间,包含物理文件
                                    drop tablespace tablespace_name including datafiles;
                                    4.删除非空表空间,包含物理文件
                                    drop tablespace tablespace_name including contents and datafiles;
                                    5.如果其他表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上CASCADE CONSTRAINTS
                                    drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;

                                    数据文件移动

                                    DM:

                                      SQL> alter tablespace cjc offline;
                                      executed successfully
                                      used time: 148.983(ms). Execute id is 614.
                                      SQL> alter tablespace cjc rename datafile '/dm8/data/DAMENG/cjc01.dbf' to '/dm8/cjc01.dbf';
                                      executed successfully
                                      used time: 344.095(ms). Execute id is 615.
                                      SQL> alter tablespace cjc online;
                                      executed successfully
                                      used time: 5.031(ms). Execute id is 616.

                                      检查数据文件

                                        SQL> select tablespace_name,file_name,bytes,AUTOEXTENSIBLE,MAXBYTES from dba_data_files where tablespace_name='CJC';
                                        LINEID TABLESPACE_NAME FILE_NAME BYTES AUTOEXTENSIBLE MAXBYTES
                                        ---------- --------------- ------------------------ -------------------- -------------- --------------
                                        1 CJC /dm8/data/DAMENG/CJC.dbf 104857600 YES 17592184995840
                                        2 CJC /dm8/cjc01.dbf 33554432 YES 17592184995840
                                        used time: 5.854(ms). Execute id is 617.

                                        对应日志:

                                        并没有数据文件移动的日志,只有在表空间offlineonline时控制文件自动备份的日志,数据文件调整不配有日志吗?

                                          [dmdba@cjc-db-01 log]$ tail -10f dm_DMSERVER_202209.log
                                          2022-09-17 23:55:34.193 [INFO] database P0000007134 T0000000000000017494 backup control file /dm8/data/DAMENG/dm.ctl to file /dm8/data/DAMENG/dm_20220917235534_193513.ctl
                                          2022-09-17 23:55:34.207 [INFO] database P0000007134 T0000000000000017494 backup control file /dm8/data/DAMENG/dm.ctl to file /dm8/data/DAMENG/ctl_bak/dm_20220917235534_195045.ctl succeed
                                          2022-09-17 23:55:46.563 [INFO] database P0000007134 T0000000000000017494 backup control file /dm8/data/DAMENG/dm.ctl to file /dm8/data/DAMENG/dm_20220917235546_563538.ctl
                                          2022-09-17 23:55:46.565 [INFO] database P0000007134 T0000000000000017494 backup control file /dm8/data/DAMENG/dm.ctl to file /dm8/data/DAMENG/ctl_bak/dm_20220917235546_565264.ctl succeed

                                          Oracle数据文件移动对比:

                                          12C以前

                                            alter tablespace cjctbs offline;
                                            RMAN> copy datafile '/home/oracle/cjctbs03.dbf' to '/u01/app/oracle11/oradata/chendb/cjctbs03.dbf';
                                            alter database rename file '/home/oracle/cjctbs03.dbf' to '/u01/app/oracle11/oradata/chendb/cjctbs03.dbf';
                                            alter tablespace cjctbs online;

                                            12C开始,可以在线移动

                                            简化了修改数据文件路径的方法,可以在线执行,减少了修改路径过程中造成的数据不可用问题。

                                              ALTER DATABASE MOVE DATAFILE '/home/oracle/cjctbs06.dbf' TO '/u01/app/oracle11/oradata/chendb/cjctbs06.dbf';

                                              LOGFILE管理

                                              命令查看日志文件信息

                                              注意:和Oracle不同,是查询v$rlogfile,不是v$logfile

                                                SQL> select group_id,file_id,path,rlog_size from v$rlogfile;
                                                LINEID GROUP_ID FILE_ID PATH RLOG_SIZE
                                                ---------- ----------- ----------- ----------------------------- --------------------
                                                1 2 0 /dm8/data/DAMENG/DAMENG01.log 268435456
                                                2 2 1 /dm8/data/DAMENG/DAMENG02.log 268435456

                                                console查看logfile信息

                                                [dmdba@cjc-db-01 ~]$ console

                                                查看redo参数信息

                                                monitor查看redo file信息

                                                [dmdba@cjc-db-01 ~]$ monitor

                                                LOGFILE调整

                                                resize调整

                                                256M调整到100M,提示值无效,实际是值过小,调整失败。

                                                  SQL> alter database resize logfile 'DAMENG01.log' to 100;
                                                  alter database resize logfile 'DAMENG01.log' to 100;
                                                  [-2410]:Data file [/dm8/data/DAMENG/DAMENG01.log] size is invalid.
                                                  used time: 114.220(ms). Execute id is 0.

                                                  256M调整都300M成功

                                                    SQL> alter database resize logfile 'DAMENG01.log' to 300;
                                                    executed successfully
                                                    used time: 2.142(ms). Execute id is 630.

                                                    尝试resize调小,失败,难道resize只能调大,不能调小?

                                                      SQL> alter database resize logfile 'DAMENG01.log' to 290;
                                                      alter database resize logfile 'DAMENG01.log' to 290;
                                                      [-2410]:Data file [/dm8/data/DAMENG/DAMENG01.log] size is invalid.
                                                      used time: 2.037(ms). Execute id is 0.

                                                      查看redo信息

                                                        SQL> select group_id,file_id,path,rlog_size from v$rlogfile;
                                                        LINEID GROUP_ID FILE_ID PATH RLOG_SIZE
                                                        ---------- ----------- ----------- ----------------------------- --------------------
                                                        1 2 0 /dm8/data/DAMENG/DAMENG01.log 314572800
                                                        2 2 1 /dm8/data/DAMENG/DAMENG02.log 314572800
                                                        used time: 0.341(ms). Execute id is 633.

                                                        既然不能通过resize方式调小logfile,能否通过新增,删除的方式调整呢?

                                                        尝试删除,语法不对

                                                          SQL> alter database drop logfile '/dm8/data/DAMENG/DAMENG04.log';
                                                          alter database drop logfile '/dm8/data/DAMENG/DAMENG04.log';
                                                          alter database drop logfile '/dm8/data/DAMENG/DAMENG04.log';
                                                          *
                                                          line 1, column 15, nearby [drop] has error[-2007]:
                                                          Syntax error.
                                                          used time: 0.259(ms). Execute id is 0.

                                                          继续尝试删除,语法还是不对

                                                            SQL> alter database delete logfile '/dm8/data/DAMENG/DAMENG04.log';
                                                            alter database delete logfile '/dm8/data/DAMENG/DAMENG04.log';
                                                            alter database delete logfile '/dm8/data/DAMENG/DAMENG04.log';
                                                            *
                                                            line 1, column 22, nearby [logfile] has error[-2007]:
                                                            Syntax error.
                                                            used time: 0.280(ms). Execute id is 0.

                                                            查看官方文档

                                                            https://eco.dameng.com/document/dm/zh-cn/pm/definition-statement.html


                                                            可以看到没有删除logfile的命令,这不是基本需求吗?

                                                            之前一直觉得Oracle调整logfile很麻烦,需要先新增,后删除,删除时还需要检查logfile状态,不能是当前日志文件,状态也不能是活跃的,需要执行多次手动切换、手动生成检查点操作才能完成logfile的调整。

                                                            看到DM调整logfile可以直接resize,简化了很多步骤,但是居然连一些基本功能都没有?

                                                            新增redo log file

                                                              SQL> alter database add logfile '/dm8/data/DAMENG/DAMENG03.log' size 10;
                                                              alter database add logfile '/dm8/data/DAMENG/DAMENG03.log' size 10;
                                                              [-2410]:Error in line: 1
                                                              Data file [/dm8/data/DAMENG/DAMENG03.log] size is invalid.
                                                              used time: 0.382(ms). Execute id is 0.

                                                              报错信息也是魔幻,不能小于多大你到是显示出来呀?

                                                                SQL> alter database add logfile '/dm8/data/DAMENG/DAMENG03.log' size 350;
                                                                executed successfully
                                                                used time: 74.590(ms). Execute id is 634.

                                                                文章转载自IT小Chen,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                                评论