扩展表空间
表空间是数据库的逻辑划分,一个表空间只能属于一个数据库,所有的数据库对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间。一旦表空间占满了,再往里面插数据,就会有提示。
具体表空间步骤如下所示:
① 查看表空间的名字及文件所在位置。
select tablespace_name,file_id,file_name,round(bytes / (1024 * 1024), 0) total_space
from sys.dba_data_files order by tablespace_name;
② 查询表空间信息。
select username,default_tablespace,t.* from dba_users t
③ 查询当前表空间下使用情况。(从下面查询结果看出,这个表空间已经满了,存不下任何东西,需要进行扩展表空间)
select a.tablespace_name,
a.bytes / 1024 / 1024 "sum MB",
(a.bytes - b.bytes) / 1024 / 1024 "used MB",
b.bytes / 1024 / 1024 "free MB",
round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "used%"
from (select tablespace_name, sum(bytes) bytes
from dba_data_files
group by tablespace_name) a,
(select tablespace_name, sum(bytes) bytes, max(bytes) largest
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name
order by ((a.bytes - b.bytes) / a.bytes) desc;
④ 扩展表空间到2G(执行扩展语句后即可操作数据库,无需重启)。
alter database datafile '/u01/app/oracle/oracledata/ebidding_ztb_data.dbf' resize 2048M;
数据迁移
Oracle数据迁移在日常的开发工作中是必须掌握的一个操作,如今有很多工具可以做数据迁移的,如:navicat等。本文中数据迁移不借助工具,仅使用Oracle原始的命令数据迁移。数据迁移的情景目前我总结一下两种情况:
一、同一个用户/表空间中的数据迁移步骤如下:
① 登陆oracle
命令:su - oracle
② 创建备份文件夹并授权(本文中文件夹路径为:/u01/dbbak)
命令:mkdir dbbak
sudo chmod 777 dbbak
③ 建立导出文件所在目录(该命令需要登陆数据库才可以执行,即输入命令:sqlplus / as sysdba)
命令:create or replace directory DBBAK as '/u01/dbbak';
select * from dba_directories;(查看命令)
④ 备份dmp文件(用户/密码是数据库登陆用户和密码,dbbak.dmp和dbbak.log中dbbak为自定义名称)
命令:expdp 用户/密码 schemas=用户 directory=DBBAK dumpfile=dbbak.dmp logfile=dbbak.log
⑤ 还原dmp文件
命令:impdp 用户/密码 schemas=用户 directory=DBBAK dumpfile=dbbak.dmp logfile=dbbak.log
注意:有一些情况下,执行备份或者还原命令会报错:directory name DBBAK is invalid,其主要的原因是权限问题,请更换拥有权限的账号密码即可。
二、不同用户/表空间中的数据迁移步骤如下:
备份数据如上述第一种情况中,①~④的步骤不变,其变化的是创建用户及还原dmp文件不同。
① 创建用户/表空间
创建用户命令:create user 用户名 profile default identified by 密码 default tablespace 表空间名称 temporary tablespace 临时表空间名称 account unlock;
创建表空间命令:create tablespace 表间名 datafile '数据文件名(自己安装oracle时的路径,如:/u01/app/oracle/oradata/bpas/XXXX.dbf)' size 表空间大小,如:create tablespace data_name datafile 'E:\oracle\oradata\data_name.dbf' size 2000M;
② 授权
命令:grant dba to 创建的用户名;
grant connect to 创建的用户名;
grant resource to 创建的用户名;
grant create sequence to 创建的用户名;
grant create session to 创建的用户名;
grant create any view to 创建的用户名;
grant create any table to 创建的用户名;
grant delete any table to 创建的用户名;
grant insert any table to 创建的用户名;
grant select any table to 创建的用户名;
grant update any table to 创建的用户名;
grant create any index to 创建的用户名;
grant unlimited tablespace to 创建的用户名;
grant create any index to 创建的用户名;
③ 还原
命令:impdp 用户名/密码 directory=DBBAK dumpfile=dbbak.dmp logfile=dbbak.log REMAP_SCHEMA=数据所在用户名:创建的用户名;(用户名称不相同,表空间名称相同)
命令:impdp 用户名/密码 directory=DBBAK dumpfile=dbbak.dmp logfile=dbbak.log REMAP_SCHEMA=数据所在用户名:创建的用户名 remap_tablespace=数据库所在表空间:创建的表空间;(用户名称不相同,表空间名称也不相同)
注意:如果在还原的过程中,报文件的权限不足的时候,需要退出oracle到linux下,执行相关的授权命令。
命令:chown -R oracle:oinstall dbbak;(dbbak为备份文件夹,自定义即可)。
三、注意不同的命令有不同的还原
Oracle数据库中,有不同的备份和还原命令,上述中使用的是expdp和impdp命令,除此以外,还有exp和imp命令,切记不能混淆着用。exp和imp的命令如下(以下内容来源于百度):
基本语法和实例:
①EXP:有三种主要的方式(完全、用户、表)
1、完全:EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y
如果要执行完全导出,必须具有特殊的权限
2、用户模式:EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC
这样用户SONIC的所有对象被输出到文件中。
3、表模式:EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC)
这样用户SONIC的表SONIC就被导出
②IMP:具有三种模式(完全、用户、表)
1、完全: IMP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y
2、用户模式: IMP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP FROMUSER=SONIC TOUSER=SONIC
这样用户SONIC的所有对象被导入到文件中。必须指定FROMUSER、TOUSER参数,这样才能导入数据。
3、表模式: EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC)
这样用户SONIC的表SONIC就被导入。