做乙方的朋友负责某甲方公司信息系统维护,甲方给了他一个dmp格式数据库备份文件让他导入到测试系统,但是他对oracle数据库不是特别熟悉,于是找上我帮他完成导入操作。
首先查看一下与dmp文件一起的导出日志文件,确认导出使用的是expdp工具(与exp有区别),所有本次使用impdp工具导入数据文件。
由于目标数据库是生产系统的测试库,测试库中肯定是存在需要导入的表空间历史数据和用户数据的,为了确保导入顺利,建议先删除用户和表空间历史数据。
删除数据之前一定要备份!
删除数据之前一定要备份!
删除数据之前一定要备份!
本次操作的数据库是测试库,而且询问过后确认数据不重要,于是没有执行备份操作。
SQL> SELECT 'SELECT dbms_metadata.get_ddl(''TABLESPACE'',''' || tablespace_name || ''') FROM dual;' FROM dba_tablespaces;
SCADA创建的SQL语句SQL> SELECT dbms_metadata.get_ddl('TABLESPACE','SCADA') FROM dual;
SQL> SELECT
'CREATE USER ' || du.username || ' IDENTIFIED BY VALUES ''' || du.password || ''' ' ||
'DEFAULT TABLESPACE ' || du.default_tablespace || ' ' ||
'TEMPORARY TABLESPACE ' || du.temporary_tablespace || ' ' ||
'PROFILE ' || du.profile || ' ' ||
'ACCOUNT ' || CASE WHEN du.account_status LIKE 'OPEN%' THEN 'UNLOCK' ELSE 'LOCK' END || ';' AS create_user_sql
FROM
dba_users du
WHERE
du.username = 'SCADA';
SQL> DROP USER scada CASCADE;
SQL> DROP TABLESPACE SCADA INCLUDING CONTENTS AND DATAFILES;
SCADA创建的SQL语句:SQL> CREATE TABLESPACE "SCADA" DATAFILE 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SCADA01.DBF'
SIZE 67108864 AUTOEXTEND ON NEXT 67108864 MAXSIZE 32767M,
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SCADA02.DBF' SIZE 32212254720,
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SCADA03.DBF' SIZE 32212254720,
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SCADA04.DBF' SIZE 32212254720,
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SCADA05.DBF' SIZE 3221225472
LOGGING ONLINE PERMANENT BLOCKSIZE 8192 EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO
SQL> CREATE USER scada IDENTIFIED BY "scada" DEFAULT TABLESPACE SCADA TEMPORARY TABLESPACE SCADA1_TEMP;
SQL> GRANT RESOURCE,CONNECT to scada;
SQL> GRANT dba to scada;
SQL> CREATE DIRECTORY DPUMP_DIR AS 'E:\oracle\backup';
SQL> grant read,write on directory DPUMP_DIR to scada;
impdp scada/scada directory=DPUMP_DIR dumpfile=scada_20260206.DMP logfile=imp.log parallel=4
如果数据量比较大,导入过程会比较慢,可以通过以下SQL语句查询导入任务和会话:
SQL> select * from DBA_DATAPUMP_JOBS;
SQL> select * from DBA_DATAPUMP_SESSIONS;
SQL> select sid,sql_id,event from v$session where action = 'SYS_IMPORT_FULL_01';
导入成功或失败的结果都可以通过查看imp.log日志文件。

· · · · · END · · · · ·