前言
- 用户:userzs
- 密码:passzs
- IP和端口:192.168.0.10:1521/orcl
- oracle版本:11和12
oracle自带exp
和expdp
程序用于数据导出备份,imp
和impdp
程序用于数据导入还原。使用exp
导出的数据文件,不能使用impdp
进行还原;同理,使用expdp
导出的数据文件也不能使用imp
进行还原。
建议使用expdp
和impdp
。
备份导出
注意,在oracle 11,exp
默认不会导出空表,除非改一些参数;否则尽量使用expdp
expdp
示例。注意directory名。生成的dmg文件在directory_name对应的directory_path目录下。
./expdp userzs/passzs@192.168.0.10:1521/orcl \ directory=DATA_DUMP_DIR \ dumpfile=backup20220426.dmp \ logfile=export20220426.log
- 导出整个数据库
./expdp userzs/passzs@192.168.0.10:1521/orcl \ directory=DATA_DUMP_DIR \ dumpfile=backup20220426.dmp \ logfile=export20220426.log \ full=y
还原导入
impdp
示例
./impdp userzs/passzs@192.168.0.10:1521/orcl \ directory=DATA_DUMP_DIR \ dumpfile=backup20220426.dmp \ logfile=import20220426.log
- 覆盖导入
./impdp userzs/passzs@192.168.0.10:1521/orcl \ directory=DATA_DUMP_DIR \ dumpfile=backup20220426.dmp \ logfile=import20220426.log \ table_exists_action=replace
问题记录
windows下找不到expdp和impdp命令
windows命令行下如果没有expdp
和impdp
命令,但是有exp
和imp
命令,可以在cmd
(注意不是powershell)下执行where exp
,在输出结果的目录下找找expdp
和impdp
。
导入时提示unable to extend table
这个是因为表空间不足,如果开了自动扩增但还是满了,就要增加表空间数据文件。
- 假设名为
SYSAUX
的表空间满了。 - 查看SYSAUX表空间的使用情况。数据文件,表空间名,已使用空间,最大空间
SELECT file_name, tablespace_name, bytes / 1024 / 1024 "bytes MB", maxbytes / 1024 / 1024 "maxbytes MB" FROM dba_data_files WHERE tablespace_name = 'SYSAUX'; -- 查看表空间数据文件是否已开启自动扩增 SELECT file_id, file_name, tablespace_name, autoextensible, increment_by FROM dba_data_files WHERE tablespace_name = 'SYSAUX' ORDER BY file_id desc;
- 假设表空间
SYSAUX
下只有一个数据文件为/home/oracle/oradata/ORCL/datafile/o1_mf_sysaux_qwerty_.dbf
- 扩增数据文件的大小。一般情况下,最大只能扩增到32g
alter database datafile '/home/oracle/oradata/ORCL/datafile/o1_mf_sysaux_qwerty_.dbf' resize 32g;
- 如果数据文件已经到了32g,那么就要使用dba权限为
SYSAUX
表空间添加一个数据文件
-- 添加数据文件 /home/oracle/oradata/ORCL/datafile/sysaux_002.dbf 到 SYSAUX -- 数据文件大小为 1024MB,可以自动扩增到16GB alter tablespace SYSAUX add datafile '/home/oracle/oradata/ORCL/datafile/sysaux_002.dbf' size 1024M autoextend on maxsize 16G;
- 使用第2步的SQL,查看SYSAUX表空间的数据文件,查看是否添加成功。
补充
- oracle查看所有directory的命令,(需要在控制台执行)
select * from all_directories;