Oracle 部分命令介绍

owner
2024-01-25 / 0 评论 / 59 阅读 / 正在检测是否收录...

Oracle学习记录

表空间和数据文件

表空间分类
  • 系统表空间
    • system表空间

      system表空间用来存储整个数据库的数据字典表(data dictionary table),该表空间不能被损坏,一旦损坏,数据库将无法打开。

      SQL> select ts#,name from v$tablespace where name='SYSTEM';
             TS# NAME
      ---------- --------------------------------------------------------------------------------
         0       SYSTEM
      SQL>
    • sysaux表空间

      从oracle 10g开始,oracle将工具放到SYSAUX,减轻system的压力。SYSAUX表空间不影响系统,但是会影响性能。

      SQL> select ts#,name from v$tablespace where name='SYSAUX';
             TS# NAME
      ---------- --------------------------------------------------------------------------------
         1 SYSAUX
      SQL>
  • 非系统表空间
    • undo

      undo表空间中会自动分配undo段,这些undo段用来保存事务中的DML语句的undo信息,也就是来保存数据在被修改之前的值。undo数据用来:

      1)事务的回滚;

      2)实例恢复(回滚);

      3)一致性读时需要构造CR块;

      SQL> select ts#,name from v$tablespace where name='UNDOTBS1';
             TS# NAME
      ---------- --------------------------------------------------------------------------------
         2       UNDOTBS1
      SQL> show parameter undo_tablespace;
      NAME             TYPE     VALUE
      ------------------------------------ -------------------- ------------------------------
      undo_tablespace          string     UNDOTBS1
      SQL>

      查看回滚段信息:

      SQL> select * from v$rollname;
             USN NAME         CON_ID
      ---------- -------------------- ----------
         0 SYSTEM      0
         1 _SYSSMU1_1261223759$    0
         2 _SYSSMU2_27624015$    0
         3 _SYSSMU3_2421748942$    0
         4 _SYSSMU4_625702278$     0
         5 _SYSSMU5_2101348960$    0
         6 _SYSSMU6_813816332$     0
         7 _SYSSMU7_2329891355$    0
         8 _SYSSMU8_399776867$     0
         9 _SYSSMU9_1692468413$    0
        10 _SYSSMU10_930580995$    0
      11 rows selected.
      SQL>
    • temp

      temp表空间,即临时表空间,用来存放用户排序,分组等操作时的数据信息。

      SQL> select ts#,name from v$tablespace where name='TEMP';
             TS# NAME
      ---------- --------------------
         3 TEMP
      SQL>
    • users

      从oracle 10g开始,oracle将用户数据信息单独存放到users表空间中。

      SQL> select ts#,name from v$tablespace where name='USERS';
             TS# NAME
      ---------- --------------------
         4 USERS
      SQL>
    • 用户表空间

      SQL> select ts#,name from v$tablespace where name not in('SYSTEM','SYSAUX','TEMP','USERS','UNDOTBS1');
             TS# NAME
      ---------- --------------------
         6 HR
      SQL>
表空间操作
  • 创建表空间
    SQL> create tablespace ORA_TEST_DAT datafile '/u01/app/oracle/oradata/ORADB/ORA_TEST_DAT01.DBF' size 1G autoextend on next 200M maxsize 2G;
    Tablespace created.
    SQL>
  • 删除表空间

    不能删除的表空间为系统表空间,正在用的undo表空间,默认临时/永久表空间

    SQL> drop tablespace ORA_TEST_DAT including contents and datafiles;
    Tablespace dropped.
    SQL>
  • 修改表空间权限
    SQL> alter tablespace ORA_TEST_DAT read only;
    Tablespace altered.
    SQL> alter tablespace ORA_TEST_DAT read write;
    Tablespace altered.
    SQL>
  • 脱机表空间
    SQL> alter tablespace ORA_TEST_DAT offline;
    Tablespace altered.
    SQL> alter tablespace ORA_TEST_DAT  online;
    Tablespace altered.
    SQL>
  • 表空间改名

    sysaux system不能改名

    用户表空间users,undo表空间,temp表空间最好不要改名,因为系统中部分参数定义名还是以原来的表空间名,下次数据库启动会报错。

    SQL> alter tablespace ORA_TEST_DAT rename to ORA_TEST_DAT01;
    Tablespace altered.
    SQL> alter tablespace ORA_TEST_DAT01 rename to ORA_TEST_DAT;
    Tablespace altered.
    SQL>
  • 表空间说明

    system 表空间必须online 必须是read write

    sysaux 表空间可以offline 不能read only

    undo 表空间不能offline 不能read only

    只读表空间的对象可以删除,但是不能被update和insert

数据文件操作
  • 修改数据文件自动扩展
    SQL> alter database datafile '/u01/app/oracle/oradata/ORADB/ORA_TEST_DAT01.DBF' autoextend off;
    Database altered.
    SQL> alter database datafile '/u01/app/oracle/oradata/ORADB/ORA_TEST_DAT01.DBF' autoextend on;
    Database altered.
    SQL>
  • 修改数据文件大小
    SQL> alter database datafile '/u01/app/oracle/oradata/ORADB/ORA_TEST_DAT01.DBF' resize 100M;
    Database altered.
    SQL> alter database datafile '/u01/app/oracle/oradata/ORADB/ORA_TEST_DAT01.DBF' resize 1G;
    Database altered.
    SQL>
  • 添加数据文件
    SQL> alter tablespace ORA_TEST_DAT add datafile '/u01/app/oracle/oradata/ORADB/ORA_TEST_DAT02.DBF' size 200M autoextend off;
    Tablespace altered.
    SQL>
  • 删除数据文件
    SQL> alter database datafile '/u01/app/oracle/oradata/ORADB/ORA_TEST_DAT03.DBF' offline drop;
    Database altered.
    SQL>
  • 数据文件重命名(必须要在归档模式下)

    如果数据库只在mont状态,那么只要在操作系统级别移动数据文件,执行数据库文件改名,启动数据库即可

    SQL> alter tablespace ORA_TEST_DAT offline;
    Tablespace altered.
    SQL> ho cp '/u01/app/oracle/oradata/ORADB/ORA_TEST_DAT02.DBF' '/u01/app/oracle/oradata/ORADB/ORA_TEST_DAT03.DBF'
    SQL> alter database rename file '/u01/app/oracle/oradata/ORADB/ORA_TEST_DAT02.DBF' to '/u01/app/oracle/oradata/ORADB/ORA_TEST_DAT03.DBF';
     
    Database altered.
    SQL> alter tablespace ORA_TEST_DAT online;
    Tablespace altered.
    SQL>
注意事项
  • 修改数据文件
    • ALTER DATABASE 语句修改单独的 DataFile
    • ALTER TABLESPACE 语句修改所有的 DataFile

      • ARCHIVRLOG 模式下的更改 DataFile

        1. 只有在 ARCHIVELOG 模式下才可使用 ALTER DATABASE 来更改DataFile

          ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' ONLINE;

          ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' OFFLINE;

        2. 由于在 NOARCHIVELOG 模式下,数据文件脱机后会造成数据的遗失,所以只能使用 ALTER DATABASE 语句下带有 DATAFILE 和 OFFLINE DROP 子句的选项将该 DataFile 直接取消,例如该 DataFile 只包含临时段数据,并没有备份时:

          alter database datafile '/u02/oracle/rbdb1/users3.dbf' offline drop;

          alter tablespace ....offline,会对数据文件进行检查点,并冻结数据文件SCN表空间 online 时,Oracle 会取得当前 SCN,解冻 offline 文件 SCN,和当前 SCN同步tablespace offline 有几种选项可供选择: normal, temporary,immediate, for recovery,而在 datafile 中则没有这些选项。

      • 数据文件reuse参数

        1. 如果 file 已经存在,并且在创建时指定了 file size,那么就重用原文件,并应用新的 size,如果没有指定 file size,则保留原有的大小
        2. 如果 file 不存在,oracle 将忽略该参数
        3. 如果 Oracle 使用了已经存在的 file,那么之前 file 里的数据将全部丢失
      • offline drop

        offline drop 并不会 drop datafile, 仅仅是将 datafile 标记为 offline, 我们 online之后还可以 recover 回来。

        alter database datafile '/usr/ORA_TEST_DAT01.dbf' offline drop;

        该命令不会删除数据文件,只是将数据文件的状态更改为recover。 offline drop命令相当于把一个数据文件至于离线状态,并且需要恢复,并非删除数据文件。 数据文件的相关信息还会存在数据字典和控制文件中

        归档模式下,alter database datafile 'file_name' offline 和 offline drop 没有什么区别。 因为offline 之后多需要进行recover 才可以online。

        alter database datafile '/usr/ORA_TEST_DAT01.dbf' online;

        recover datafile '/usr/ORA_TEST_DAT01.dbf';

        alter tablespace ORA_TEST_DAT drop datafile '/usr/ORA_TEST_DAT01.dbf';

        该语句会删除控制文件和磁盘上的文件,删除之后的原数据文件序列号可以重用。该语句只能是datafile online的时候才可以使用。如果说对应的数据文件已经是offline for drop,那么仅针对 dictionary managed tablespaces 可用。

控制文件

控制文件概述
  • 二进制文件,初始化大小由CREATE DATABASE指定,可以使用RMAN备份
  • 记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等等
  • 在参数文件中描述其位置,个数等等。通常采用分散放开,多路复用的原则。在mount阶段被读取,open阶段一直被使用
  • 维护数据库一致性(数据库启动时会比较控制文件与联机日志文件中的ckpt,即起始scn号,如相等则正常启动,否则需要介质恢复)
  • 一个控制文件只能属于一个数据库
  • 控制文件的任意修改将写入到初始化参数中指定的所有控制文件中,读取时则仅读取第一个控制文件
  • 控制文件只能连接一个数据库,控制文件的大小一般不要超过MB,最多为个,最少一个,互为镜像
  • 控制文件中包含的内容

    • 数据库的名字、ID、创建的时间戳
    • 表空间的名字
    • 联机日志文件、数据文件的位置、个数、名字
    • 联机日志的Sequence号码
    • 检查点的信息
    • 撤销段的开始或结束
    • 归档信息
    • 备份信息
查看控制文件信息
  • 列出实例中所有控制文件的名字及状态信息

    SQL> select * from v$controlfile;
    STATUS
    ---------------------
    NAME
    --------------------------------------------------------------------------------
    IS_RECOVE BLOCK_SIZE FILE_SIZE_BLKS  CON_ID
    --------- ---------- -------------- ----------
    /u01/app/oracle/oradata/ORADB/control01.ctl
    NO        16384    646      0
    /u01/app/oracle/oradata/ORADB/control02.ctl
    NO        16384    646      0
    STATUS
    ---------------------
    NAME
    --------------------------------------------------------------------------------
    IS_RECOVE BLOCK_SIZE FILE_SIZE_BLKS  CON_ID
    --------- ---------- -------------- ----------
    SQL>
  • 列出所有参数的位置及状态信息

    SQL> select name,value from v$parameter where name='control_files';
    NAME
    --------------------------------------------------------------------------------
    VALUE
    --------------------------------------------------------------------------------
    control_files
    /u01/app/oracle/oradata/ORADB/control01.ctl, /u01/app/oracle/oradata/ORADB/contr
    ol02.ctl
    SQL>
    • 列出控制文件中记录的部分信息
    SQL> select * from v$CONTROLFILE_RECORD_SECTION;
    TYPE                         RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID   CON_ID
    ------------------------------------------------------------------------------------ ----------- ------------- ------------ ----------- ---------- ---------- ----------
    DATABASE                         316       1      1       0    0      0        0
    CKPT PROGRESS                       8180      11      0       0    0      0        0
    REDO THREAD                        256       8      1       0    0      0        0
    REDO LOG                          72      16      3       0    0      3        0
    DATAFILE                         520     100      8       0    0     18        0
    FILENAME                         524    2298     11       0    0      0        0
    TABLESPACE                         180     100      7       0    0      7        0
    TEMPORARY FILENAME                        56     100      1       0    0      1        0
    RMAN CONFIGURATION                      1108      50      0       0    0      0        0
    LOG HISTORY                         56     292      9       1    9      9        0
    OFFLINE RANGE                        200     163      2       1    2      2        0
    TYPE                         RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID   CON_ID
    ------------------------------------------------------------------------------------ ----------- ------------- ------------ ----------- ---------- ---------- ----------
    ARCHIVED LOG                         584      28      0       0    0      0        0
    BACKUP SET                          96     170      0       0    0      0        0
    BACKUP PIECE                         780     209      0       0    0      0        0
    BACKUP DATAFILE                        200     245      0       0    0      0        0
    BACKUP REDOLOG                          76     215      0       0    0      0        0
    DATAFILE COPY                        736     200      0       0    0      0        0
    BACKUP CORRUPTION                       44     371      0       0    0      0        0
    COPY CORRUPTION                         40     409      0       0    0      0        0
    DELETED OBJECT                          20     818      1       1    1      1        0
    PROXY COPY                         928     246      0       0    0      0        0
    BACKUP SPFILE                        124     131      0       0    0      0        0
    TYPE                         RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID   CON_ID
    ------------------------------------------------------------------------------------ ----------- ------------- ------------ ----------- ---------- ---------- ----------
    DATABASE INCARNATION                        56     292      2       1    2      2        0
    FLASHBACK LOG                         84    2048      0       0    0      0        0
    RECOVERY DESTINATION                       180       1      0       0    0      0        0
    INSTANCE SPACE RESERVATION                      28    1055      1       0    0      0        0
    REMOVABLE RECOVERY FILES                      32    1000      0       0    0      0        0
    RMAN STATUS                        116     141      0       0    0      0        0
    THREAD INSTANCE NAME MAPPING                      80       8      8       0    0      0        0
    MTTR                           100       8      1       0    0      0        0
    DATAFILE HISTORY                       568      57      0       0    0      0        0
    STANDBY DATABASE MATRIX                      400     128    128       0    0      0        0
    GUARANTEED RESTORE POINT                     256    2048      0       0    0      0        0
    TYPE                         RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID   CON_ID
    ------------------------------------------------------------------------------------ ----------- ------------- ------------ ----------- ---------- ---------- ----------
    RESTORE POINT                        256    2108      0       0    0      0        0
    DATABASE BLOCK CORRUPTION                     80    8384      0       0    0      0        0
    ACM OPERATION                        104      64     11       0    0      0        0
    FOREIGN ARCHIVED LOG                       604    1002      0       0    0      0        0
    PDB RECORD                         780      10      0       0    0      0        0
    AUXILIARY DATAFILE COPY                      584     128      0       0    0      0        0
    MULTI INSTANCE REDO APPLY                    556       1      0       0    0      0        0
    PDBINC RECORD                        144     113      0       0    0      0        0
    TABLESPACE KEY HISTORY                       108     151      0       0    0      0        0
    42 rows selected.
    SQL>
  • 列出控制文件的名字、状态、位置等

    SQL> SHOW PARAMETER CONTROL_FILES
    NAME             TYPE            VALUE
    ------------------------------------ --------------------------------- ------------------------------
    control_files          string            /u01/app/oracle/oradata/ORADB/
                           control01.ctl, /u01/app/oracle
                           /oradata/ORADB/control02.ctl
    SQL>
  • 使用STRINGS命令来查看控制文件中的具体内容
[oracle@oracle ~]$ strings /u01/app/oracle/oradata/ORADB/control01.ctl
  • 备份控制文件到平面文件(然后查看控制文件中的具体内容)
SQL> alter database backup controlfile  to trace as '/home/oracle/ctl.txt';
Database altered.
SQL>
  • 转储控制文件内容(查看控制文件中的具体内容)
0

评论 (0)

取消