1 srvctlsql
[root@wangzilong oracle]# srvctl Usage: srvctl <command> <object> [<options>] commands: enable|disable|start|stop|status|add|remove|modify|getenv|setenv|unsetenv|config|upgrade objects: database|service|asm|diskgroup|listener|home|ons For detailed help on each command and object and its options use: srvctl <command> -h or srvctl <command> <object> -h
1.1 看帮助数据库
srvctl start -h安全
[root@wangzilong oracle]# srvctl start -h The SRVCTL start command starts, Oracle Restart enabled, non-running objects. Usage: srvctl start database -d <db_unique_name> [-o <start_options>] Usage: srvctl start service -d <db_unique_name> [-s "<service_name_list>"] [-o <start_options>] Usage: srvctl start asm [-o <start_options>] Usage: srvctl start listener [-l <lsnr_name>] Usage: srvctl start diskgroup -g <dg_name> Usage: srvctl start ons [-v] Usage: srvctl start home -o <oracle_home> -s <state_file> For detailed help on each command and object and its options use: srvctl <command> <object> -h
1.2 看数据库是否已经启动bash
bash-4.1$ srvctl status database -d orcl Database is running.
bash-4.1$ crs_stat -t ora.orcl.db Name Type Target State Host ------------------------------------------------------------ ora.orcl.db ora....se.type ONLINE ONLINE wangzilong # bash-4.1$ crs_stat -t ora.orcl.db Name Type Target State Host ------------------------------------------------------------ ora.orcl.db ora....se.type ONLINE ONLINE wangzilong bash-4.1$ crs_stat ora.orcl.db NAME=ora.orcl.db TYPE=ora.database.type TARGET=ONLINE STATE=ONLINE on wangzilong #crs_start 启动 #crs_stop 关闭
2 实例启动的阶段服务器
sqlplus启动的三个阶段session
2.1 nomount 实例启动阶段(参数文件)数据结构
startup nomount;oracle
根据参数文件的位置启动实例,工具
根据参数文件中定义数据库的名字,参数文件中内存的分配状况,参数文件定义的权限、位置和个数,将这些过程写入到用户日志和告警日志,启动后台进程,初始化部分视图。(v$parameter,v$spprameter 就能够访问)spa
2.2 mount 数据库的装载(使用参数文件和控制文件)
alter database mount;
更具参数文件中定义的控制文件的位置和个数装载数据库。
2.3 open 阶段,叫作数据库的打开阶段
根据控制文件中定义的数据库名,数据文件和日志文件的名字,位置,个数。(控制文件中的记录的SCN 号和数据库文件,日志文件是否一致,若是一致,数据库打开,若是不一致,启动的时候作实例恢复)
3 实例关闭的阶段
3.1 close-- 关闭数据库
alter database close;关闭数据库文件和日志文件
3.2 dismount 卸载数据库
alter database dismount 将实例与数据库连接断开
3.3 shutdown 关闭实例
shutdown
4 实例关闭的模式
4.1 shutdonw |shutdown normal 正常关闭(不推荐)
old connect 等待
ckpt
如同有用户尚未推出,则要一直等待,因此不推荐
4.2 shutdown immediate 一致性关闭
相比上面的关闭,若是有老的连接不会等待,直接回滚。
4.3 shutdown transactional 居于事务的关闭数据库
old connect 等事物结束
ckpt
4.4 shutdown abort 强制关闭
通常不会使用,只有前面三种没有办法关闭的时候(出了故障)强制关闭
5 文件管理
生命周期:nomount--mount--open--close--dismount--shutdown
5.1 参数文件管理
5.2 密码文件管理
5.3 控制文件管理
5.4 日志文件管理
1 日志文件做用
记录用户的DML,部分DDL 操做,以及管理员对数据库的更改。主要用来作恢复使用。
2 日志文件的工做原理
日志文件经过lgwr 进程将日志缓冲区中的内容顺序存放在日志文件中。
current:表示当前正在使用的日志组
active 活动状态:表示记录的日志信息有可能尚未写入日志文件,若是丢失会丢数据
inactive:表示非活动状态,表示这种状态的信息已经所有记录在日志文件中,文件丢失不会影响数据库数据的丢失
unused:表示历来都没有使用过,通常不会看见的。
日志组:一个数据库中至少要有两个组,一个组下面的日志文件叫作日志成员,每一个组下面至少要有一个日志文件。每一个组下面的日志文件都是同样的,互为镜像。1个日志中的成员日志文件大小都是同样的。日志文件中有lsn 日志编号。
select group#,status from v$log;
SQL> select group#,status from v$log; GROUP# STATUS ---------- ---------------- 1 INACTIVE 2 INACTIVE 3 CURRENT
3 日志文件在项目中的规划
至少有3个组,一个组下面至少有2个日志成员,且分开存放。日志切换表示一个组写慢再写下一个组,日志切换时间保证在15到30分钟切一次才三正常。v$log_history 里面记录了每一次切换日志的时间
SQL> select recid,first_time from v$log_history; RECID FIRST_TIM ---------- --------- 1 18-NOV-16 2 18-NOV-16 3 18-NOV-16 4 18-NOV-16 5 18-NOV-16
4 日志文件的管理
日志组的增长:日志组不能知足业务须要的时候增长一个日志组。alter database add logfile group groupname (‘log_file_path1’,'log_file_path2',…) size group_size
SQL> select group#,bytes/1024/1024 from v$log; GROUP# BYTES/1024/1024 ---------- --------------- 1 50 2 50 3 50 1* alter database add logfile group 4 ('/u01/product/oradata/orcl/redo04.log','/u01/product/oradata/orcl/redo041.log') size 50M SQL> / Database altered. 1* select a.group#,b.member from v$log a,v$logfile b where a.group# = b.group# SQL> / GROUP# MEMBER ---------- -------------------- ########## /u01/product/oradata /orcl/redo03.log ########## /u01/product/oradata /orcl/redo02.log ########## /u01/product/oradata /orcl/redo01.log ########## /u01/product/oradata /orcl/redo04.log GROUP# MEMBER ---------- -------------------- ########## /u01/product/oradata /orcl/redo041.log #日志增长成功
日志组的删除:
current 的日志是不能删除的。只有最后两个日志组的时候是不能删除的。
actinve 的日志不能删除
alter database drop logfile group group_name.组删除以后实体文件能够不删除,也能够删除,不影响系统的运行。
SQL> select a.group#,b.member,a.status from v$log a,v$logfile b where a.group# = b.group#; GROUP# MEMBER STATUS ---------- -------------------------------------------------- ---------------- 3 /u01/product/oradata/orcl/redo03.log CURRENT 2 /u01/product/oradata/orcl/redo02.log INACTIVE 1 /u01/product/oradata/orcl/redo01.log INACTIVE 4 /u01/product/oradata/orcl/redo04.log UNUSED 4 /u01/product/oradata/orcl/redo041.log UNUSED # 下面准备删除current状态下的日志 SQL> alter database drop logfile group 3; alter database drop logfile group 3 * ERROR at line 1: ORA-01623: log 3 is current log for instance orcl (thread 1) - cannot drop ORA-00312: online log 3 thread 1: '/u01/product/oradata/orcl/redo03.log' # 报错,不能删除current状态的日志组 SQL> alter database drop logfile group 1; Database altered. # 删除inactive 状态下的是能够的。 SQL> select a.group#,b.member,a.status from v$log a,v$logfile b where a.group# = b.group#; GROUP# MEMBER STATUS ---------- -------------------------------------------------- ---------------- 3 /u01/product/oradata/orcl/redo03.log CURRENT 2 /u01/product/oradata/orcl/redo02.log INACTIVE 4 /u01/product/oradata/orcl/redo04.log UNUSED 4 /u01/product/oradata/orcl/redo041.log UNUSED
日志组下成员的增长:
alter database add logfile member 'path' to group group_name;
SQL> alter database add logfile member '/u01/product/oradata/orcl/redo21.log' to group 2; Database altered. SQL> select a.group#,b.member,a.status from v$log a,v$logfile b where a.group# = b.group#; GROUP# MEMBER STATUS ---------- -------------------------------------------------- ---------------- 3 /u01/product/oradata/orcl/redo03.log CURRENT 2 /u01/product/oradata/orcl/redo02.log INACTIVE 2 /u01/product/oradata/orcl/redo21.log INACTIVE 4 /u01/product/oradata/orcl/redo04.log UNUSED 4 /u01/product/oradata/orcl/redo041.log UNUSED # 组下成员增长成功
日志组下成员的删除:
若是一个组下面只有一个成员不能删除
current,active 状态的日志成员是不能被删除的。
alter database drop logfile member ‘path’;
SQL> alter database drop logfile member '/u01/product/oradata/orcl/redo21.log'; Database altered. # 组下成员删除成功
日志组的扩容,先新建符合大小的日志文件,在用下面的命令切换,最后在把原来的日志文件删除。
切换日志(多切换几回) alter system switch logfile; 把原来的日志文件都切换成inactive 状态下删除就能够了。
SQL> select a.group#,b.member,a.status ,a.bytes from v$log a,v$logfile b where a.group# = b.group#; GROUP# MEMBER STATUS BYTES ---------- -------------------------------------------------- ---------------- ---------- 5 /u01/product/oradata/orcl/redo05.log CURRENT 104857600 6 /u01/product/oradata/orcl/redo06.log INACTIVE 104857600 7 /u01/product/oradata/orcl/redo07.log INACTIVE 104857600 # 日志文件已经扩大到100M
日志文件的丢失:
inactive 丢失(运行状态下)
alter database clear logfile group group_name ;这个系统会自动建立系统中配置的有的日志文件,只是从新建的日志文件里面没有内容。
若是在重启数据库的状况下须要作一下三步:
SQL> select a.group#,b.member,a.status ,a.bytes from v$log a,v$logfile b where a.group# = b.group#; GROUP# MEMBER STATUS BYTES ---------- -------------------------------------------------- ---------------- ---------- 5 /u01/product/oradata/orcl/redo05.log CURRENT 104857600 6 /u01/product/oradata/orcl/redo06.log INACTIVE 104857600 7 /u01/product/oradata/orcl/redo07.log INACTIVE 104857600 # redo06.log 里面的文件是inactive 状态的,若是它丢失会怎么了? [root@wangzilong orcl]# rm -rf redo06.log SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. # 关闭数据库 SQL> startup mount; ORACLE instance started. Total System Global Area 2438529024 bytes Fixed Size 2230792 bytes Variable Size 570426872 bytes Database Buffers 1845493760 bytes Redo Buffers 20377600 bytes Database mounted. # 数据库挂载成功 SQL> recover database until cancel; Media recovery complete. # 须要让数据库不检查日志 SQL> alter database open resetlogs; Database altered. # 在从新生成序列号的状况下打开数据库 [root@wangzilong orcl]# ll redo06.log -rw-r----- 1 oracle dba 104858112 Dec 6 14:13 redo06.log # 日志文件6 已经从新建回来了。
active 丢失
alter system checkpoint;触发ckpt 会把日志文件中的写入磁盘文件,而后日志文件就会从active 文件切换到inactive 状态下,而后再用上面的clear 把文件建回去。这只能保证系统正常运行,可是会丢数据的。
GROUP# MEMBER STATUS BYTES ---------- --------------------------------------------- ---------------- ---------- 5 /u01/product/oradata/orcl/redo05.log ACTIVE 104857600 6 /u01/product/oradata/orcl/redo06.log CURRENT 104857600 7 /u01/product/oradata/orcl/redo07.log UNUSED 104857600 # 若是上面的文件5丢失了怎么办? # 因为active 文件表示日志里面还有脏数据没有写入磁盘,因此咱们须要手动触发ckpt写数据 SQL> alter system checkpoint; System altered. SQL> select a.group#,b.member,a.status ,a.bytes from v$log a,v$logfile b where a.group# = b.group#; GROUP# MEMBER STATUS BYTES ---------- --------------------------------------------- ---------------- ---------- 5 /u01/product/oradata/orcl/redo05.log INACTIVE 104857600 6 /u01/product/oradata/orcl/redo06.log CURRENT 104857600 7 /u01/product/oradata/orcl/redo07.log UNUSED 104857600 # 日志文件5 已经变成inactive SQL> alter database clear logfile group 5; Database altered. # 用clear 日志5从新建 [root@wangzilong orcl]# ll redo05.log -rw-r----- 1 oracle dba 104858112 Dec 6 14:24 redo05.log
若是是active状态的日志文件丢失后关闭数据库,没法重启,如何处理?也和上面的inactive 同样的操做。
current 丢失(启动状态下)
alter system switch logfile;
alter system checkpoing;
alter database clear logfile group group_name
current 丢失(关闭状态下):
三部:启动到mount,recover 不使用恢复,重建日志方式打开
日志丢失重启的时候报错,须要不使用恢复,recover database until calcle
alter datrabase open resetlogs;
5 日志文件相关的视图
v$log
v$logfile
v$log_history
重点:组3个以上,成员分开,会增长组,增长成员,删除成员如何处理。
6 归档日志 archivelog
inactive -- arc 进程处理归档
默认状况下归档日志放在闪回区,由db_recovery_file_dest='path'
若是上面的路径放满列,能够设置log_archive_dest
archive log list或者v$database;
SQL> archive log list; Database log mode No Archive Mode Automatic archival Disabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 1 Current log sequence 1 # 查看是否有归档功能,Oldest online log sequence 表示下一个归档的日志是1号
设置为归档:
startup mount
alter database archivelog;
SQL> startup mount; ORACLE instance started. Total System Global Area 2438529024 bytes Fixed Size 2230792 bytes Variable Size 570426872 bytes Database Buffers 1845493760 bytes Redo Buffers 20377600 bytes Database mounted. SQL> alter database archivelog; Database altered. SQL> alter database open; Database altered. SQL> archive log list; Database log mode Archive Mode # 已经开启归档 Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 1 Next log sequence to archive 1 Current log sequence 1 # 归档日志路径 SQL> show parameter DB_RECOVERY_FILE_DEST; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string /u01/product/fast_recovery_are a db_recovery_file_dest_size big integer 4122M SQL> desc v$archived_log; # 上面v$archived_log 里面记录归档日志的详细信息 SQL> alter database noarchivelog; Database altered. # 上面关闭归档 SQL> archive log list; Database log mode No Archive Mode Automatic archival Disabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 1 Current log sequence 1
5.5 用户管理
5.6 对象管理
7 控制文件
7.1 控制文件的做用
记录数据结构与行为
7.2 控制文件在项目中的规划
控制文件最大能够达到8个,最少1个。工做当中控制文件规划是少2个以上,且分开存放。
控制文件大小在100M 之内,若是超过100M就须要重建
SQL> desc v$controlfile; Name Null? Type ----------------------------------------- -------- ---------------------------- STATUS VARCHAR2(7) NAME VARCHAR2(513) IS_RECOVERY_DEST_FILE VARCHAR2(3) BLOCK_SIZE NUMBER FILE_SIZE_BLKS NUMBER # 名字,大小,下面还有一个也能看控制文件信息 SQL> desc v$controlfile_record_section; Name Null? Type ----------------------------------------- -------- ---------------------------- TYPE VARCHAR2(28) RECORD_SIZE NUMBER RECORDS_TOTAL NUMBER RECORDS_USED NUMBER FIRST_INDEX NUMBER LAST_INDEX NUMBER LAST_RECID NUMBER # 下面能够看到控制文件的个数等信息 SQL> show parameter control_files; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_files string /u01/product/oradata/orcl/cont rol01.ctl, /u01/product/fast_r ecovery_area/orcl/control02.ct l
7.3 控制文件的管理
7.3.1 控制文件增长
1 若是数据库是关闭状态,则启动,start nomount
2 修改参数 control_files
3 将存在的控制文件复制给新建的
4 启动。alter database mount;
5 alter database open;
alter system set control_file = …………,这里原来的控制文件照抄,在本身增长一个
6 若是数据库是打开的,先修改参数control_files,shutdown immediate,将控制文件复制一份给新建的,startup
SQL> alter system set control_files='/u01/product/oradata/orcl/control01.ctl','/u01/product/fast_recovery_area/orcl/control02.ctl','/u01/product/oradata/orcl/control02.ctl' scope=spfile; * ERROR at line 1: ORA-02095: specified initialization parameter cannot be modified # 增长完后报错了,下面须要重启并新建 [root@wangzilong orcl]# cp control01.ctl control02.ctl # 新建登陆sqlplus 并启动 [root@wangzilong orcl]# sqlplus sys/123456 as sysdba SQL*Plus: Release 11.2.0.3.0 Production on Mon Dec 5 15:49:07 2016 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to an idle instance. # 启动 SQL> startup ORACLE instance started. Total System Global Area 2438529024 bytes Fixed Size 2230792 bytes Variable Size 570426872 bytes Database Buffers 1845493760 bytes Redo Buffers 20377600 bytes Database mounted. Database opened. # 启动成功,下面检查添加的控制文件是否成功 SQL> select name from v$controlfile; NAME -------------------------------------------------------------------------------- /u01/product/oradata/orcl/control01.ctl /u01/product/fast_recovery_area/orcl/control02.ctl /u01/product/oradata/orcl/control02.ctl
注意:复制控制文件的时候必定要在oracle 用户下
7.3.2 控制文件减小
1 shutdown immediate;shut abort;
2 startup nomount
3 修改参数
4 alter database mount;
alter database open;
解释:直接把须要移除的控制文件删除,配置文件里面删除重启就能够了。
7.3.3 控制文件版本不一致的处理
只须要高版本的复制给低版本的就能够了。
7.3.4 控制文件部分丢失的处理
已有的复制给丢失的,或者直接删除丢失的控制文件就能够了。(前提是有备份)
7.3.5 控制文件有备份全丢失的处理
备份:alter database backup controlfile to '/tmp/con.ctl';备份的就是二进制控制文件。
SQL> alter database backup controlfile to '/tmp/cron.ctl'; Database altered. [root@wangzilong tmp]# ll cron.ctl -rw-r----- 1 oracle dba 9748480 Dec 5 16:24 cron.ctl # 这样备份,若是控制文件丢失能够直接把备份的拷贝过去就能够用
alter database backup controlfile to trace as '/tmp/con.sql'; 备份控制文件成一个脚本。
SQL> alter database backup controlfile to trace as '/tmp/con.sql'; Database altered.
这个备份若是要使用的须要用@ /tmp/con.sql 调用便可。
7.3.6 控制文件没有备份全丢失的处理
只能手动写了。
create controlfile reuse database database_name noresetlogs noarchivelog
logfile
group 1 '/u01/oracle/oradata/updba/redo01.log' size 50M
group 2 '/u01/oracle/oradata/updba/redo01.log' size 50M
group 3 ^^^^^
datafile
'/u01/oracle/oradata/updba/system01.dbf',
'/u01/oracle/oradata/updba/sysaux01.dbf',
'/u01/oracle/oradata/updba/undotbs01.dbf',
^^^^
charater set al32utf8
上面的logfile,datafile 能够在视图里面查:
# 日志文件 SQL> select group#,member from v$logfile; GROUP# ---------- MEMBER -------------------------------------------------------------------------------- 3 /u01/product/oradata/orcl/redo03.log 2 /u01/product/oradata/orcl/redo02.log 1 /u01/product/oradata/orcl/redo01.log
# 数据文件 SQL> select file#,name from v$datafile; FILE# ---------- NAME -------------------------------------------------------------------------------- 1 /u01/product/oradata/orcl/system01.dbf 2 /u01/product/oradata/orcl/sysaux01.dbf 3 /u01/product/oradata/orcl/undotbs01.dbf FILE# ---------- NAME -------------------------------------------------------------------------------- 4 /u01/product/oradata/orcl/users01.dbf
8 存储逻辑
存储结构与数据文件
存储结构
database---tablespace-- segment--extent--bloks-- datafile
tablespace 表空间:
8.1 表空间分类
1 永久表空间,指的是建立数据
system 系统表空间/字典表空间/永久表空间,存储当前数据库数据字典的信息。
oracle 内部的基表也放在永久表空间。好比user_,dba_,all_ 开头的都在这里。
内部使用的工具也放在这里
sysaux 辅助表空间,10G 后才有,主要用来减轻system 表空间的负担,里面放oracle内部工具
v$sysaux_occupants;
2 undo (回退)表空间 ,处理事物等
主要存放用户对数据块更改前的前镜像,主要用来作闪会操做或者rollback
3 临时表空间,存放临时数据,好比排序
temp 表空间,存放用户的临时数据,排序的时候也要使用临时表空间。
当排序时内存不足的时候,就用到临时表空间。
4 用户表空间
users/example 用户表空间,是oracle 内部使用的模板数据库使用的表空间。工做中用户表空间须要手动建立。
8.2 表空间建立
表空间状态:online 表示联机,可读可写。
offline 离线,表示表空间和实例断开连接。
read write 可读可写
read only 只读
system 表空间,undo ,tmpe 不能够offline,也不能够read only。sysaux 不能read only,能够offline。其余的用户表空间随便哪一个操做均可以;
alter tablespace sysaux offline
表空间大小分类:
小表表空间:一个表空间下面能够存放多个数据文件。能够存放1024个,每个数据文件不能超过32G ,数据文件的头只占用4K
大表表空间:一个表空间下面只能存放一个数据文件。最大能够达到128T,最小能够达到8T,能够放40亿个数据块,数据文件头占4M
查看表空间文件的位置:
1* select file_name,tablespace_name from dba_data_files SQL> / FILE_NAME TABLESPACE_NAME ---------------------------------------- ------------------------------ /u01/product/oradata/orcl/wzl01.dbf WZL_TABLESPACE /u01/product/oradata/orcl/users01.dbf USERS /u01/product/oradata/orcl/undotbs01.dbf UNDOTBS1 /u01/product/oradata/orcl/sysaux01.dbf SYSAUX /u01/product/oradata/orcl/system01.dbf SYSTEM
create [smallfile|bigfile] tablespace tablespace_name datafile 'path' size <> [extend uniform size <>|autoextend on <> segment management local|auto ];
create tablespace sarah datafile 'path.dbf' size 50M ;
SQL> create tablespace wzl_tablespace datafile '/u01/product/oradata/orcl/wzl01.dbf' size 50M; Tablespace created. # 下面再建一个50M 自动增加的大表空间 SQL> create bigfile tablespace wzl_big_tablespace datafile '/u01/product/oradata/orcl/wzl02.dbf' size 50M autoextend on; Tablespace created.
select bigfile,tablespace_name from dba_tablespaces;
SQL> select TABLESPACE_NAME,BLOCK_SIZE,NEXT_EXTENT,STATUS from dba_tablespaces; TABLESPACE_NAME BLOCK_SIZE NEXT_EXTENT STATUS ------------------------------ ---------- ----------- --------- SYSTEM 8192 ONLINE SYSAUX 8192 ONLINE UNDOTBS1 8192 ONLINE TEMP 8192 1048576 ONLINE USERS 8192 ONLINE WZL_TABLESPACE 8192 ONLINE 6 rows selected.
select tablespace_name,bytes from dba_data_files; 能够查看表空间有多大
、SQL> select tablespace_name,bytes from dba_data_files; TABLESPACE_NAME BYTES ------------------------------ ---------- WZL_TABLESPACE 52428800 USERS 5242880 UNDOTBS1 162529280 SYSAUX 639631360 SYSTEM 744488960
alter database default tablespace <> 能够制定对象默认存放的表空间
SQL> alter database default tablespace WZL_TABLESPACE; Database altered. SQL> select tablespace_name,table_name from user_tables; TABLESPACE_NAME TABLE_NAME ------------------------------ ------------------------------ USERS EMPNEW WZL_TABLESPACE TMP_WZL_20161206_1 USERS TMP_20161206_2 USERS TMP_20161206 USERS LEMP USERS TMP1 USERS EMP1 USERS DEPT1 USERS SALGRADE USERS BONUS USERS EMP # 建表后默认都放在指定的表空间下
SQL> select property_name,property_value from database_properties where property_name like '%DEF%'; PROPERTY_NAME PROPERTY_VALUE -------------------- ------------------------------ DEFAULT_TEMP_TABLESP TEMP ACE DEFAULT_PERMANENT_TA WZL_TABLESPACE BLESPACE DEFAULT_EDITION ORA$BASE DEFAULT_TBS_TYPE SMALLFILE # 查看默认使用的表空间信息
8.3 表空间的管理
8.3.1 表空间的修改
只有用户本身新建的报表空间能够修改。
alter tablespace <> rename to <>;
TABLESPACE_NAME ------------------------------ SYSTEM SYSAUX UNDOTBS1 TEMP USERS WZL_TABLESPACE WZL_BIG_TABLESPACE 7 rows selected. SQL> alter tablespace WZL_TABLESPACE rename to WZL_TABLESPACE_tmp; Tablespace altered. #表空间更名成功 SQL> select tablespace_name from dba_tablespaces; TABLESPACE_NAME ------------------------------ SYSTEM SYSAUX UNDOTBS1 TEMP USERS WZL_TABLESPACE_TMP WZL_BIG_TABLESPACE 7 rows selected.
8.3.2 表空间下数据库文件或者表空间的迁移
只有用户建的表空间能够迁移(磁盘空间已满),若是表空间不够又不迁移数据文件中的数据会被清空。
1 在open 状态下迁移
不可以离线的都不能够作迁移操做。
总体迁移表空间:
第一步:alter tablespace <> offline;
TABLESPACE_NAME STATUS ------------------------------ --------- SYSTEM ONLINE SYSAUX ONLINE UNDOTBS1 ONLINE TEMP ONLINE USERS ONLINE WZL_TABLESPACE_TMP ONLINE WZL_BIG_TABLESPACE ONLINE 7 rows selected. SQL> alter tablespace WZL_TABLESPACE_TMP offline; Tablespace altered. # 已经离线
第二部:在dba_data_files;里面能看到数据文件,能够把它用cp 拷贝走
1* select TABLESPACE_NAME,FILE_NAME from dba_data_files SQL> / TABLESPACE_NAME FILE_NAME -------------------- ---------------------------------------- WZL_TABLESPACE_TMP /u01/product/oradata/orcl/wzl01.dbf WZL_BIG_TABLESPACE /u01/product/oradata/orcl/wzl02.dbf USERS /u01/product/oradata/orcl/users01.dbf UNDOTBS1 /u01/product/oradata/orcl/undotbs01.dbf SYSAUX /u01/product/oradata/orcl/sysaux01.dbf SYSTEM /u01/product/oradata/orcl/system01.dbf # 下面将数据文件拷贝到其余地方 SQL> ho cp /u01/product/oradata/orcl/wzl01.dbf /u01/product/oradata/wzl001.dbf
第三步:而后在系统中修改:
alter tablespasce <> rename datafile 'oldpath' to 'new_path';
SQL> alter tablespace WZL_TABLESPACE_TMP rename datafile '/u01/product/oradata/orcl/wzl01.dbf' to '/u01/product/oradata/wzl001.dbf'; Tablespace altered.
第四步:最后在online
SQL> select TABLESPACE_NAME,FILE_NAME from dba_data_files; TABLESPACE_NAME FILE_NAME -------------------- ---------------------------------------- WZL_TABLESPACE_TMP /u01/product/oradata/wzl001.dbf WZL_BIG_TABLESPACE /u01/product/oradata/orcl/wzl02.dbf USERS /u01/product/oradata/orcl/users01.dbf UNDOTBS1 /u01/product/oradata/orcl/undotbs01.dbf SYSAUX /u01/product/oradata/orcl/sysaux01.dbf SYSTEM /u01/product/oradata/orcl/system01.dbf SQL> alter tablespace WZL_TABLESPACE_TMP online; Tablespace altered. # 表空间上线成功
迁移表空间下的某个数据文件:
第一步:离线数据文件:
alter database datafile 6 offline; oracle 会将数据文件头部scn号码锁住状态变为recover
1* select file#,name,status from v$datafile SQL> / FILE# NAME STATUS ---------- ---------------------------------------- ------- 1 /u01/product/oradata/orcl/system01.dbf SYSTEM 2 /u01/product/oradata/orcl/sysaux01.dbf ONLINE 3 /u01/product/oradata/orcl/undotbs01.dbf ONLINE 4 /u01/product/oradata/orcl/users01.dbf ONLINE 5 /u01/product/oradata/wzl001.dbf ONLINE 6 /u01/product/oradata/orcl/wzl02.dbf ONLINE # 下面数据文件被离线,状态改成recoer SQL> select a.tablespace_name,a.file_name,a.bytes,b.status from dba_data_files a,v$datafile b where a.file_name = b.name; TABLESPACE_NAME FILE_NAME BYTES STATUS -------------------- ---------------------------------------- ---------- ------- WZL_TABLESPACE_TMP /u01/product/oradata/wzl001.dbf RECOVER WZL_BIG_TABLESPACE /u01/product/oradata/orcl/wzl02.dbf 52428800 ONLINE USERS /u01/product/oradata/orcl/users01.dbf 5242880 ONLINE UNDOTBS1 /u01/product/oradata/orcl/undotbs01.dbf 162529280 ONLINE SYSAUX /u01/product/oradata/orcl/sysaux01.dbf 639631360 ONLINE SYSTEM /u01/product/oradata/orcl/system01.dbf 744488960 SYSTEM WZL_TABLESPACE_TMP /u01/product/oradata/wzl002.dbf 52428800 ONLINE
第二步:物理文件拷贝走
[root@wangzilong orcl]# ll wzl001.dbf -rw-r----- 1 root root 62922752 Dec 7 11:43 wzl001.dbf [root@wangzilong orcl]# pwd /u01/product/oradata/orcl
第三步:修改系统数据
alter database rename file 'oldpath' to 'newpath';
SQL> alter database rename file '/u01/product/oradata/wzl001.dbf' to '/u01/product/oradata/orcl/wzl001.dbf'; Database altered.
第四步: 恢复数据文件
recover datafile 5;
SQL> recover datafile 5; Media recovery complete. SQL> select file#,name,status from v$datafile; FILE# NAME STATUS ---------- ---------------------------------------- ------- 1 /u01/product/oradata/orcl/system01.dbf SYSTEM 2 /u01/product/oradata/orcl/sysaux01.dbf ONLINE 3 /u01/product/oradata/orcl/undotbs01.dbf ONLINE 4 /u01/product/oradata/orcl/users01.dbf ONLINE 5 /u01/product/oradata/orcl/wzl001.dbf OFFLINE 6 /u01/product/oradata/orcl/wzl02.dbf ONLINE 7 /u01/product/oradata/wzl002.dbf ONLINE 7 rows selected. # 数据文件5 已经恢复成功。状态从recoer 变为 offline
第五步:online 联机数据文件
alter database datafile 6 online;
SQL> alter database datafile '/u01/product/oradata/orcl/wzl001.dbf' online; Database altered. SQL> select file#,name,status from v$datafile; FILE# NAME STATUS ---------- ---------------------------------------- ------- 1 /u01/product/oradata/orcl/system01.dbf SYSTEM 2 /u01/product/oradata/orcl/sysaux01.dbf ONLINE 3 /u01/product/oradata/orcl/undotbs01.dbf ONLINE 4 /u01/product/oradata/orcl/users01.dbf ONLINE 5 /u01/product/oradata/orcl/wzl001.dbf ONLINE 6 /u01/product/oradata/orcl/wzl02.dbf ONLINE 7 /u01/product/oradata/wzl002.dbf ONLINE 7 rows selected. # 数据文件5 已经上线成功
注意:在非归档模式下是不能够对表空间里面的某个数据文件下线的。用archive log list 查看是不是归档,若是是非归档,则设置为归档。若是设置归档失败,则须要恢复数据库recover database。而后关闭数据库,重启数据库到mount 状态下,这个时候设置归档alter database archivelog 就会成功,而后再继续对表空间中的数控文件下线就没有问题
2 在mount 状态下迁移(工做中不建议使用)
第一步:把文件拷贝走
第二步:修改系统中文件的路径
alter database rename file ‘oldpath' to 'newpath';
第三步:打开数据库alter database open;
8.3.3 表空间的扩容
表空间的使用率达到85%以上须要扩容
desc dba_data_files; 里面能看到总的大小
SQL> select tablespace_name,bytes/1024/1024 from dba_data_files; TABLESPACE_NAME BYTES/1024/1024 -------------------- --------------- WZL_TABLESPACE_TMP 50 WZL_BIG_TABLESPACE 50 USERS 5 UNDOTBS1 155 SYSAUX 610 SYSTEM 710
desc dba_free_space 里面能看到剩余表空间
SQL> select tablespace_name,bytes/1024/1024 from dba_free_space where tablespace_name = 'WZL_TABLESPACE_TMP'; TABLESPACE_NAME BYTES/1024/1024 -------------------- --------------- WZL_TABLESPACE_TMP 48.9375
上面表空间和剩余空间能够计算除表空间的使用率
SQL> select a.tablespace_name,a.bytes/1024/1024 total_space,b.bytes/1024/1024 free_space,(a.bytes/1024/1024-b.bytes/1024/1024)/a.bytes/1024/1024 use_l from dba_data_files a,dba_free_space b where a.tablespace_name = b.tablespace_name and a.tablespace_name = 'WZL_TABLESPACE_TMP'; TABLESPACE_NAME TOTAL_SPACE FREE_SPACE USE_L -------------------- ----------- ---------- ---------- WZL_TABLESPACE_TMP 50 48.9375 1.9327E-14
8.3.3.1 修改表空间为自动增加(以后只须要关注磁盘就能够了) autoextend on
dba_data_file.autoextensible 表示是不是自动增加
alter database <> datafile 'oldpath' autoextend on;
SQL> select tablespace_name,AUTOEXTENSIBLE,file_name from dba_data_files; TABLESPACE_NAME AUT FILE_NAME -------------------- --- ---------------------------------------- WZL_TABLESPACE_TMP NO /u01/product/oradata/wzl001.dbf WZL_BIG_TABLESPACE YES /u01/product/oradata/orcl/wzl02.dbf USERS YES /u01/product/oradata/orcl/users01.dbf UNDOTBS1 YES /u01/product/oradata/orcl/undotbs01.dbf SYSAUX YES /u01/product/oradata/orcl/sysaux01.dbf SYSTEM YES /u01/product/oradata/orcl/system01.dbf 6 rows selected. # 表空间WZL_TABLESPACE_TMP 不自动增加 SQL> alter database datafile '/u01/product/oradata/wzl001.dbf' autoextend on; Database altered. # 设置自动增加成功 SQL> select tablespace_name,AUTOEXTENSIBLE,file_name from dba_data_files; TABLESPACE_NAME AUT FILE_NAME -------------------- --- ---------------------------------------- WZL_TABLESPACE_TMP YES /u01/product/oradata/wzl001.dbf WZL_BIG_TABLESPACE YES /u01/product/oradata/orcl/wzl02.dbf USERS YES /u01/product/oradata/orcl/users01.dbf UNDOTBS1 YES /u01/product/oradata/orcl/undotbs01.dbf SYSAUX YES /u01/product/oradata/orcl/sysaux01.dbf SYSTEM YES /u01/product/oradata/orcl/system01.dbf 6 rows selected.
8.3.3.2 从新修改表空间大小
alter database datafile ‘path’ resize 60M;
SQL> alter database datafile '/u01/product/oradata/wzl001.dbf' resize 60M; Database altered. # 增长到60M SQL> select tablespace_name,AUTOEXTENSIBLE,file_name,bytes from dba_data_files; TABLESPACE_NAME AUT FILE_NAME BYTES -------------------- --- ---------------------------------------- ---------- WZL_TABLESPACE_TMP YES /u01/product/oradata/wzl001.dbf 62914560 WZL_BIG_TABLESPACE YES /u01/product/oradata/orcl/wzl02.dbf 52428800 USERS YES /u01/product/oradata/orcl/users01.dbf 5242880 UNDOTBS1 YES /u01/product/oradata/orcl/undotbs01.dbf 162529280 SYSAUX YES /u01/product/oradata/orcl/sysaux01.dbf 639631360 SYSTEM YES /u01/product/oradata/orcl/system01.dbf 744488960 6 rows selected. # 修改表空间大小成功
8.3.3.3 给表空间下增长数据文件
alter tablespace <> add datafile 'newpath' size 50M;
建议增长的数据文件放在不一样的磁盘,利于IO 访问,利于数据库安全
SQL> alter tablespace WZL_TABLESPACE_TMP add datafile '/u01/product/oradata/wzl002.dbf' size 50M; Tablespace altered. SQL> select tablespace_name,AUTOEXTENSIBLE,file_name,bytes from dba_data_files; TABLESPACE_NAME AUT FILE_NAME BYTES -------------------- --- ---------------------------------------- ---------- WZL_TABLESPACE_TMP YES /u01/product/oradata/wzl001.dbf 62914560 WZL_BIG_TABLESPACE YES /u01/product/oradata/orcl/wzl02.dbf 52428800 USERS YES /u01/product/oradata/orcl/users01.dbf 5242880 UNDOTBS1 YES /u01/product/oradata/orcl/undotbs01.dbf 162529280 SYSAUX YES /u01/product/oradata/orcl/sysaux01.dbf 639631360 SYSTEM YES /u01/product/oradata/orcl/system01.dbf 744488960 WZL_TABLESPACE_TMP NO /u01/product/oradata/wzl002.dbf 52428800 7 rows selected. # 上面表空间WZL_TABLESPACE_TMP 中添加列一个数据文件
8.3.4 表空间的删除
表空间下没有对象能够这么删除 drop tablespasce <> ;
表空间下的对象也同时删除 drop tablespace <> including contents;
可是上面两种方法不会删除物理文件。
drop tablespace <> including contents and datafiles; 删除表空间,删除表空间里面的对象,删除物理文件。
8.3.5 表空间视图的查询
dba_tablespaces :查询全部的表空间有那些
dba_data_files; dba_free_space ; 查询表空间下大小。
v$tablespace; 也能够看到,表空间的信息。是动态的。
8.4 undo 表空间
8.4.1 做用
8.4.1.1 回退操做
8.4.1.2 闪回操做
8.4.1.3 一致性
8.4.2 建立
undo 表空间出问题了须要建立表空间,并设置为默认的undo
create undo tablespace <> datafile 'path' size <> autoextend on;
工做中须要undo 表空间建立为自动增加的表空间。
SQL> create undo tablespace undowzl1 datafile '/u01/product/oradata/orcl/undowzl1.dbf' size 100M autoextend on; Tablespace created. # undo 表空间已经建立成功 SQL> select tablespace_name,contents from dba_tablespaces; TABLESPACE_NAME CONTENTS -------------------- --------- SYSTEM PERMANENT SYSAUX PERMANENT UNDOTBS1 UNDO TEMP TEMPORARY USERS PERMANENT WZL_TABLESPACE_TMP PERMANENT WZL_BIG_TABLESPACE PERMANENT UNDOWZL1 UNDO 8 rows selected. SQL> select tablespace_name,segment_name from dba_rollback_segs where tablespace_name like 'UNDOW%'; TABLESPACE_NAME SEGMENT_NAME -------------------- ------------------------------ UNDOWZL1 _SYSSMU11_1766216107$ UNDOWZL1 _SYSSMU12_2229279369$ UNDOWZL1 _SYSSMU13_1058550138$ UNDOWZL1 _SYSSMU14_3194392635$ UNDOWZL1 _SYSSMU15_2910016055$ UNDOWZL1 _SYSSMU16_3978893589$ UNDOWZL1 _SYSSMU17_3298471941$ UNDOWZL1 _SYSSMU18_485156876$ UNDOWZL1 _SYSSMU19_1750812237$ UNDOWZL1 _SYSSMU20_3915053547$ 10 rows selected. # 本身新建的表空间默认也是10个段
设置为默认undo 表空间
alter system set undo_tablespace = undowzl1 scope=spfile;
SQL> alter system set undo_tablespace=UNDOWZL1; System altered.
1* select tablespace_name,segment_name,status from dba_rollback_segs where tablespace_name like 'UNDOT%' SQL> / TABLESPACE_NAME SEGMENT_NAME STATUS -------------------- ------------------------------ ---------------- UNDOTBS1 _SYSSMU1_1240252155$ OFFLINE UNDOTBS1 _SYSSMU2_111974964$ OFFLINE UNDOTBS1 _SYSSMU3_4004931649$ OFFLINE UNDOTBS1 _SYSSMU4_1126976075$ OFFLINE UNDOTBS1 _SYSSMU5_4011504098$ OFFLINE UNDOTBS1 _SYSSMU6_3654194381$ OFFLINE UNDOTBS1 _SYSSMU7_4222772309$ OFFLINE UNDOTBS1 _SYSSMU8_3612859353$ OFFLINE UNDOTBS1 _SYSSMU9_3945653786$ OFFLINE UNDOTBS1 _SYSSMU10_3271578125$ OFFLINE 10 rows selected. # offline 表示不使用
8.4.3 查看undo 表空间
查看当前使用的undo表空间是哪个,大小是多大
show parameter undo_
SQL> show parameter undo_; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO # 自动|手动管理方式 undo_retention integer 900 #事物操做在保持时间 undo_tablespace string UNDOTBS1 # undo 表空间名称
查看当前系统使用的默认的永久undo 表空间
8.4.4 undo 的管理
9i 叫回退段 rollback segment
10g 的时候有rollback segment 和undo
aum:auto undo management 自动管理
mum:manual undo management 手动管理
11g:undo 若是设置为手动管理,普通用户就不能够作DML 操做,sys 能够作。
10个段
SQL> select tablespace_name,segment_name from dba_rollback_segs where tablespace_name like 'UNDO%'; TABLESPACE_NAME SEGMENT_NAME -------------------- ------------------------------ UNDOTBS1 _SYSSMU1_1240252155$ UNDOTBS1 _SYSSMU2_111974964$ UNDOTBS1 _SYSSMU3_4004931649$ UNDOTBS1 _SYSSMU4_1126976075$ UNDOTBS1 _SYSSMU5_4011504098$ UNDOTBS1 _SYSSMU6_3654194381$ UNDOTBS1 _SYSSMU7_4222772309$ UNDOTBS1 _SYSSMU8_3612859353$ UNDOTBS1 _SYSSMU9_3945653786$ UNDOTBS1 _SYSSMU10_3271578125$ 10 rows selected.
默认undo100M 大小。
SQL> select tablespace_name,bytes/1024/1024 bytes from dba_data_files where tablespace_name like 'UNDO%'; TABLESPACE_NAME BYTES -------------------- ---------- UNDOTBS1 155
删除undo :
undo 默认是不能够offline,不能够删除。若是要删除,能够设置为手动不要自动管理,重启状态就能够看到是offline 不使用,这个时候就能够删除了
SQL> alter system set undo_management=manual scope=spfile; System altered. # 修改成手动 SQL> show parameter undo_; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string MANUAL undo_retention integer 900 undo_tablespace string UNDOWZL1 # 已经改不不自动了 SQL> select tablespace_name,status from dba_rollback_segs where tablespace_name='UNDOWZL1'; TABLESPACE_NAME STATUS -------------------- ---------------- UNDOWZL1 OFFLINE UNDOWZL1 OFFLINE UNDOWZL1 OFFLINE UNDOWZL1 OFFLINE UNDOWZL1 OFFLINE UNDOWZL1 OFFLINE UNDOWZL1 OFFLINE UNDOWZL1 OFFLINE UNDOWZL1 OFFLINE UNDOWZL1 OFFLINE # 这个时候能够删除了 SQL> drop tablespace UNDOWZL1; Tablespace dropped. # 再在mount条件下修改默认使用undo 表空间 1* alter system set undo_tablespace=undotbs1 scope=spfile SQL> / System altered. # 在重启数据库 SQL> startup force; ORACLE instance started. Total System Global Area 2438529024 bytes Fixed Size 2230792 bytes Variable Size 570426872 bytes Database Buffers 1845493760 bytes Redo Buffers 20377600 bytes Database mounted. Database opened. SQL> show parameter undo_ NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 900 undo_tablespace string UNDOTBS1
若是undo 表空间中有内容丢失如何处理:
1 shutdown immediate;
2 修改undo 管理方式为手动
alter system set undo_management=manual scope=spfile;
SQL> show parameter undo_; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string MANUAL undo_retention integer 900 undo_tablespace string UNDOTBS1 # 已经设置为手动
3 重启数据库
shutdown immediate;
startup mount;
4 将数据文件离线
alter database datafile <> offline drop;
SQL> alter database datafile '/u01/product/oradata/orcl/undotbs01.dbf' offline drop; Database altered. # 已经删除了undo 表空间
5 打开数据库
alter database open;
6 删除丢失的undo 表空间
drop tablespace undotbs;
SQL> drop tablespace UNDOTBS1; Tablespace dropped.
7 新建一个undo 设为默认的
create undo tablespace undotbs2 autoextend on;
SQL> create undo tablespace undotbs2 datafile '/u01/product/oradata/orcl/undotbs02.dbf' size 50M autoextend on; Tablespace created.
alter system set undo_tablespace=undotbs2;
SQL> alter system set undo_tablespace=undotbs2 scope=spfile; System altered.
注意:因为以前为了删除undo 表空间修改管理模式为吗怒阿里手动,这个时候系统不会使用undo 表空间了才能够删除。可是若是本身新建了新的表空间顺便设置为默认的undo 表空间的时候会报错说只能在auto模式下设置,可是当咱们在mount模式下修改成auto的时候 数据库又没法open,因此没法将新建的undo设置为默认undo表空间,会陷入死循环的尴尬,这个时候须要从新设置为手动,而后在修改成默认表空间的语句后面加上 scope=spfile,就行了,最后在重启到mount 模式喜好修改成auto 就能够open。
8 把undo 的管理设置为自动管理
alter system set undo_management=auto scpoe=spfile;
SQL> alter system set undo_management=auto scope=spfile; System altered.
startup force;
SQL> show parameter undo_; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 900 undo_tablespace string UNDOTBS2
若是6删除不成功
7 建立隐藏除数文件
create pfile= ‘path' from spfile;
8 加隐藏参数过滤活动的undo 段
select segment_name from dba_rollback_segs where tablespace_name = '';
查到活动的undo 段用vi 添加到上面建立的pfile 中:
添加:corrupted_rollback=segments=('',''^)
9 使用pfile 启动数据库
startup pfile=‘path’;
10 删除undotbs1;
drop tablespace undotbs1 including conents and datafiles;
从新建立一个undo 并设置为自动管理,且设置为默认 undo 文件重启数据库就能够了。
8.4.5 undo 表空间的扩容
有三种方法
1 将undo 表空间下数据文件改成autoextend on
alter database datafile 'path' autoextend on;
2 将undo 表空间下的数据文件大小从新设置resize
alter database datafile 'path' resize <>;
3 给undo表空间增长爱数据文件
alter tablespace <> add datafile 'path' size <> ;
8.5 临时表空间temp
1 临时表空间的做用
a:存放临时文件
b:排序内存不够用的时候是使用临时表空间
select tablespace_name from database_properties;
desc dba_temp_files;能看到临时表空间的详细信息。
1* select TABLESPACE_NAME,FILE_NAME from dba_temp_files SQL> / TABLESPACE_NAME FILE_NAME -------------------- -------------------------------------------------- TEMP /u01/product/oradata/orcl/temp01.dbf
2 临时表空间的建立
create tmporary tablespace <> tempfile 'path' size <>;
SQL> create temporary tablespace tempwzl1 tempfile '/u01/product/oradata/orcl/tempwzl01.dbf' size 20M; Tablespace created.
3 临时表空间的管理
扩容有三种方法:改成自动增加,修改大小,添加数据文件
4 临时表空间丢失如何处理
11g -- 中临时表空间丢失只须要重启就能够了。或者建立一个临时表空间并设置为默认就能够了。
alter database default temporary tablespace <>;
dba_temp_files;
SQL> alter database default temporary tablespace tempwzl1; Database altered. SQL> select tablespace_name,file_name from dba_temp_files; TABLESPACE_NAME FILE_NAME -------------------- -------------------------------------------------- TEMP /u01/product/oradata/orcl/temp01.dbf TEMPWZL1 /u01/product/oradata/orcl/tempwzl01.dbf # 下面能够看到默认的临时表空间已经修改了 1* select PROPERTY_NAME,PROPERTY_VALUE from database_properties where PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE' SQL> / PROPERTY_NAME PROPERTY_VALUE ------------------------------ ---------------------------------------- DEFAULT_TEMP_TABLESPACE TEMPWZL1