前言
前阵子遇到一个任务,需要把数据库中某个用户下所有对象复制到一个新用户上面,和常规的需求有些不同的是这里并不需要复制表对象中的数据。写一篇文章记录一下这种场景的解决方案。
一、创建新用户
这一步主要是创建用户对象和赋权,为后面复制对象做准备
CREATE USER USER_CTEST IDENTIFIED BY USER_CTEST;
GRANT CONNECT, RESOURCE TO USER_CTEST;
二、创建导出目录
我们需要指定一下我们后面用于存放备份数据的文件路径,执行完成后我们可以在USER_DIRECTORIES
视图中找到我们刚刚定义的目录。
create directory ctest_dir as '/home/oracle/oradata/ORCL'
三、导出旧用户对象
使用expdp
命令,导出指定用户的所有对象数据。需要注意的是,下面这条命令是直接在数据库服务器的命令行窗口执行的。
expdp username/passwd DIRECTORY=CTEST_DIR DUMPFILE=userCtest.dmp SCHEMAS=USER_OLD CONTENT=METADATA_ONLY
- DIRECTORY:这里需要和我们第二步定义的目录名称保持一致。
- SCHEMAS:指定我们想要导出的schemas对象,也就是用户对象
- dumpfile:自定义就行,这个文件就是临时用于存放具体数据的文件
- content:
metadata_only
表示只复制表结构,不复制表数据
我们还可以通过下面这些参数去自定义的导出我们想要的数据 - TABLES:指定要导出的表。
- QUERY:指定要导出的数据的查询条件。
需要注意的是,如果希望连同数据一起复制,这里可以不写content
参数。
四、导入到新用户对象中
使用impdp
命令,将第三步生成的临时文件数据导入到我们新建的用户对象中。
impdp username/passwd DIRECTORY=CTEST_DIR DUMPFILE=userCtest.dmp REMAP_SCHEMA=USER_OLD:USER_CTEST
下面介绍一下使用到的参数含义
- DIRECTORY:临时文件的存放路径,这里和第三步的参数保持一致就行
- DUMPFILE:临时文件的文件名,这里也是和第三步的参数保持一致就行
- REMAP_SCHEMA:临时文件要变更的对象,我们按照
OLD_SCHEMA_NAME:NEW_SCHEMA_NAME
这种格式去写就行
五、删除临时文件
第四步执行成功后,如果没有文件备份需要的话,我们就可以删除第三步生成的临时文件了。
网友评论