• DCA培训心得笔记(二)


    DM8产品使用

    删除归档日志文件

    #开启归档
    alter database mount;
    alter database ARCHIVELOG;
    alter database add ARCHIVELOG 'type=local, dest=/dm8/arch, file_size=64,space_limit=10240';
    alter database open;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    归档开启后会生成一个归档日志文件,该归档文件运行在active状态下,可以用如下语句查询:

    SQL> select * from SYS."V$ARCH_FILE";
    
    • 1

    在这里插入图片描述
    参数ARCH_LSN可以理解为归档文件的头,CLSN理解为归档文件的尾。一头一尾记录了归档文件的记录的片段。
    使用: SF_ARCHIVELOG_DELETE_BEFORE_LSN参数可以删除归档日志文件。

    当归档文件处于active状态下,该参数无法删除正在运行的归档文件,所以需要先将归档文件变为inactive状态:将数据库转换为mount状态再转换为开启状态,此时之前的归档文件则会变成inactive状态,同时由于开启了归档,会自动生成一个新的active状态的归档文件。
    在这里插入图片描述

    此时可以删除inactive的归档文件。
    可以看到第一个归档文件的ARCH_LSN为82820,CLSN为84324。
    当我这样删除时:

    select sf_archivelog_delete_before_lsn(82820);
    
    • 1

    在这里插入图片描述
    参数返回值为0,代表没有删除任何归档文件,这是因为该参数的作用是删除该lsn值之前的归档文件,所以其实上面的语句删除的是82820之前的归档文件,所以删不掉这里的第一条归档。那么将语句改为:

    select sf_archivelog_delete_before_lsn(84324);
    
    • 1

    在这里插入图片描述
    结果仍然返回1,我理解为要删除一个归档文件,不能删除其片段,只能整个删除,这一行语句实际操作的是删除84324之前的归档文件也就是把LSN值为1至84323之间的归档文件删除,但是我们的第一个归档文件的尾是84324,所以该语句没有完全删除我们的第一条归档文件,也就默认不删除。
    此时将语句改成:

    select sf_archivelog_delete_before_lsn(84325);
    
    • 1

    在这里插入图片描述
    成功删除了第一条inactive的归档文件。
    再尝试:看看能否删除active的归档文件

    select sf_archivelog_delete_before_lsn(100000);
    
    • 1

    在这里插入图片描述证实无法删除正在运行的归档文件。
    此时关闭归档:

    #关闭归档
    alter database mount;
    alter database NOARCHIVELOG;
    alter database delete ARCHIVELOG 'type=local, dest=/dm8/arch, file_size=64,space_limit=10240';
    alter database open;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    可以发现查不到任何归档文件记录:
    在这里插入图片描述重新开启归档:

    在这里插入图片描述由于之前的归档文件因为数据库转换过mount状态而变成inactive,同时因为开启了归档,生成了一个新的归档文件,同时因为关闭过归档,会发现两个归档文件的LSN值不是连续的,而之前没有关闭归档时,inactive和active的归档文件之间得LSN值都是连续的。如果LSN值不连续,当进行归档文件备份的时候会报错:归档文件不连续,这个时候就需要删除不需要的归档文件,保证归档文件的连续性。

    backup ARCHIVE LOG ALL to ARCHFULLBAK backupset '/dm8/backup/ARCHFULLBAK';
    
    • 1

    ODBC配置

    将odbc安装包放在opt目录下解压:

    tar -xzvf unixODBC-2.3.0.tar.gz
    #进入unixODBC-2.3.0目录下源码安装
    ./configure
    make
    make install
    #安装好后配置驱动信息和数据源信息
    #配置信息文件默认在usr/local/etc下
    cat odbc.ini
    [DM8]
    Description = DM ODBC DSN
    Driver = DM8 ODBC DRIVER
    SERVER = localhost
    UID = SYSDBA
    PWD = SYSDBA
    TCP_PORT = 5236
    
    cat odbcinst.ini
    [DM8 ODBC DRIVER]
    Description = ODBC DRIVER FOR DM8
    Driver = /dm8/bin/libdodbc.so
    
    #测试数据源
    odbcinst -j
    
    #启动
    isql dm8 -v
    
    #退出
    quit 或ctrl+c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    故障模拟:表空间数据文件丢失

    #创建表空间
    create tablespace tbs DATAFILE 'TBS01.DBF' SIZE 32;
    #备份表空间
    backup tablespace tbs to TBSFULLBAK01 backupset '/dm8/backup/TBSFULLBAK01';
    #删除表空间数据文件模拟故障
    rm TBS01.DBF
    #关闭数据库
    ./DmServiceDMSERVER stop
    #表空间还原 dmrman
    restore database '/dm8/data/DAMENG/dm.ini' tablespace tbs from backupset  '/dm8/backup/TBSFULLBAK01';
    #表空间恢复 dmrman
    recover database '/dm8/data/DAMENG/dm.ini' tablespace tbs;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    故障模拟:SYSTEM表空间数据文件丢失

    #数据库备份
    backup DATABASE;
    backup DATABASE full to FULLBAK01 BACKUPSET '/dm8/backup/FULLBAK01';
    backup database INCREMENT to INCRBAK01 BACKUPSET '/dm8/backup/INCRBAK01';
    backup database INCREMENT to INCRBAK02 BACKUPSET '/dm8/backup/INCRBAK02';
    backup database INCREMENT CUMULATIVE to INCRBAK03 BACKUPSET '/dm8/backup/INCRBAK03';
    backup database INCREMENT WITH BACKUPDIR '/dm8/backup/full' to INCRBAK04 BACKUPSET '/dm8/backup/INCRBAK04';
    
    #删除数据文件
    rm SYSTEM.DBF
    #关闭数据库
    ./DmServiceDMSERVER stop
    #还原
    recover database '/dm8restore database '/dm8/data/DAMENG/dm.ini' from backupset  '/dm8/backup/FULLBAK01';
    #恢复
     recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/arch';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    故障模拟:MAIN.DBF丢失

    #数据库备份
    backup DATABASE full to FULLBAK01 BACKUPSET '/dm8/backup/FULLBAK01';
    #MAIN.DBF丢失后模式、用户、角色等内容在manager中都查不到了
    #还原数据库
    restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup/FULLBAK01';
    #恢复数据库
    recover database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup/FULLBAK01';
    #库级还原需要更新数据库魔数
    recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    添加外键约束:将非主键约束的列添加外键约束到主键列

    假设此时TEST用户有两个表:
    EMPLOYEE:

    名字属性
    EMPLOYEE_IDINTEGER
    EMPLOYEE_NAMEVARCHAR(20)
    DEPARTMENT_IDINTEGER
    EMPLOYEE_SALARYINTEGER

    其中EMPLOYEE_ID是该表的主键。
    DEPARTMENT :

    名字属性
    DEPARTMENT_IDINTEGER
    DEPARTMENT_NAMEVARCHAR(20)

    其中DEPARTMENT_ID是该表的主键。
    当想要为两个表添加外键约束时:
    如果用如下语句:

    alter table "TEST"."DEPARTMENT" add CONSTRAINT fk_employee_departmentid FOREIGN key("DEPARTMENT_ID") REFERENCES "TEST"."EMPLOYEE"("DEPARTMENT_ID");
    
    • 1

    在这里插入图片描述
    由于DEPARTMENT_ID是DEPARTMENT表的主键,所以不能用DEPAERMENT的DEPARTMENT_ID向EMPLOYEE添加外键约束,只能反过来。

    alter table "TEST"."EMPLOYEE" add CONSTRAINT fk_employee_departmentid FOREIGN key("DEPARTMENT_ID") REFERENCES "TEST"."DEPARTMENT"("DEPARTMENT_ID");
    
    • 1

    在这里插入图片描述

    创建视图:包含group by

    使用 GROUP BY 要注意以下问题:
    1 在 GROUP BY 子句中的每一列必须明确地命名属于在 FROM 子句中命名的表的一列。
    分组列的数据类型不能是多媒体数据类型;
    2 分组列不能为集函数表达式或者在 SELECT 子句中定义的别名;
    3 当分组列值包含空值时,则空值作为一个独立组;
    4 当分组列包含多个列名时,则按照 GROUP BY 子句中列出现的顺序进行分组;
    5 GROUP BY 子句中至多可包含 255 个分组列;
    6 ROLLUP\CUBE\GROUPING SETS 组合不能超过 9 个。

    以上表为例,要建立一个部门员工工资总和的视图,显示部门编号和部门名称和部门工资总和:

    create or replace view "TEST". "VIEW_DSA" as
    select a.DEPARTMENT_ID ,a.DEPARTMENT_NAME , sum(b.EMPLOYEE_SALARY)
    FROM "TEST"."DEPARTMENT" a ,"TEST"."EMPLOYEE" b
    group by a. DEPARTMENT_ID;
    
    • 1
    • 2
    • 3
    • 4

    当select中出现的表中原有的列没有出现在group by中会报错:
    请添加图片描述
    只有select和group by中的列相互对应才能编译通过:

    create or replace view "TEST". "VIEW_DSA" as
    select a.DEPARTMENT_ID ,a.DEPARTMENT_NAME , sum(b.EMPLOYEE_SALARY)
    FROM "TEST"."DEPARTMENT" a ,"TEST"."EMPLOYEE" b
    group by a. DEPARTMENT_ID,b.DEPARTMENT_NAME;
    
    • 1
    • 2
    • 3
    • 4

    请添加图片描述

  • 相关阅读:
    【App自动化测试】(十五)手机浏览器(webview)自动化测试
    java springboot application中设置正确的数字密码连不上数据库问题解决
    【音视频开发】为什么无损音频会有44.1Khz这样的奇葩采样率?
    Harbor企业级私服Docker镜像仓库搭建及应用
    《实验细节》上手使用PEFT库方法和常见出错问题
    【物理应用】基于Matlab模拟RANS湍流
    RAR压缩包,去除密码?
    数据库迁移-国产化-Oracle迁移至GBase8a(数据类型)
    Docker在边缘计算中的崭露头角:探索容器技术如何驱动边缘计算的新浪潮
    剑指offer 40. 数组中出现次数超过一半的数字
  • 原文地址:https://blog.csdn.net/qq_44229840/article/details/126638324