«

2021年7月13日 Oracle新建表空间异常排查

Mahalalel 发布于 阅读:3414 Oracle


导出导入操作

导出数据

expdp 数据库用户名/密码 directory=虚拟目录 dumpfile=dump文件名.dmp logfile=日志文件名.log schemas=schemas名称

数据库连接工具中创建表空间、用户、赋予权限

创建表空间

    create tablespace 表空间名称
    logging
    datafile 数据文件位置,例如:'/data/oracle/db/表空间.dbf'
    size 100m
    autoextend on
    next 32m maxsize 500m
    extent management local;

创建数据库用户

    create user 用户名 identified by 密码
    default tablespace 表空间名称
    temporary tablespace temp;

数据库用户授权

    grant connect,dba to 用户;

导入目录授权

    grant read,write to directory 虚拟目录 to 用户;

导入数据

impdp 新用户/密码 directory=虚拟目录 dumpfile=导出dump文件名.dmp logfile=导入日志.log remap_schema=被导入schema:新用户schema  remap_tablespace=导出的表空间:新建的表空间  schemas=导出的schemas

异常及问题解决

ORA-39171: 作业出现可恢复的等待。
ORA-01653: 表 A.COURSE 无法通过 1024 (在表空间 B_DATA 中) 扩展

网络上搜索了下异常,大概的意思是B用户的表空间不足了;
首先我们来看第一个问题:

一、表空间容量是否够用?

1、查看表空间的名字及文件所在位置

select
    tablespace_name,
    file_id,
    file_name,
    round(bytes / (1024 * 1024), 0) total_space
from sys.dba_data_files
where tablespace_name = 'B_DATA'

2、查询表空间信息

select
    username,
    default_tablespace,
    t.*
from dba_users t

3、查询当前表空间下使用情况

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
AND b.tablespace_name='B_DATA'
ORDER BY
    ((a.bytes-b.bytes)/a.bytes) DESC;

4、扩展表空间的方式

①、扩大表空间

alter database datafile '/data/oracle/db/B_DATA.DBF' resize 20480m;

②、增加新的数据文件

alter tablespace  add datafile '/data/oracle/db/B_DATA_01.DBF' size 20480m;

③、设置表空间的自动增长

alter database datafile '/data/oracle/db/B_DATA.DBF' autoextend on next 100m maxsize 20480m;

我使用的是第一种,直接扩大表空间,再次查看日志时,数据已经导入到新的表空间中了。

再来看第二个问题,就是导入到A用户的表COURSE,表空间却是B_DATA,而不是A_DATA;

二、修复表空间问题

1、指定表空间复制表结构及数据

CREATE TABLE COURSE_A TABLESPACE A_DATA AS SELECT * FROM COURSE;

2、删除表

DROP TABLE COURSE;

3、修改表名称

ALTER TABLE COURSE_A RENAME TO COURSE;

至此,Oracle导出导入库操作以及问题解决完成。

Oracle 导入导出