变cdbOracle12从CDB变为PDB(oracle12从cdb)

变cdbOracle12:从CDB变为PDB

在Oracle 12c中,引入了一个新概念,即多租户架构,即可以在一个CDB中包含多个PDB。在实际应用中,我们可能需要将原来的CDB转换为PDB,以便更好地管理数据库。本文将详细介绍如何将CDB转换为PDB,以及可能遇到的问题和解决方法。

我们需要使用sqlplus连接到原来的CDB,并检查其中是否存在PDB。方法如下:

sqlplus / as sysdba
show pdbs;

如果显示的结果有多个PDB,则说明我们的CDB已经是多租户数据库,如果只有一个PDB,则可以考虑将CDB转换为PDB。

在转换之前,我们需要创建一个新的CDB,并将原来的CDB导出,然后导入到新的CDB中。操作步骤如下:

1.使用dbca工具创建新的CDB

dbca

在创建过程中,需要选择创建CDB,将系统表空间、undo表空间、临时表空间和用户表空间分别分配给PDB。

2.将原来的CDB导出

expdp system/password full=y directory=datapump dumpfile=dbname.dmp logfile=dbname.log

其中,directory为当前Oracle用户的导出目录,可以使用以下命令查看:

select * from dba_directories;

3.在新的CDB中创建PDB

sqlplus / as sysdba
create pluggable database pdb_name admin user admin_user identified by password;

其中,pdb_name是新的PDB的名称,admin_user是该PDB的管理员用户的用户名,password是管理员用户的密码。

4.在新的PDB中导入数据

impdp admin_user/password directory=datapump dumpfile=dbname.dmp logfile=dbname.log remap_schema=old_schema:new_schema remap_tablespace=old_tbs:new_tbs

其中,admin_user和password是PDB的管理员用户的用户名和密码,directory为Oracle的导入目录,dbname.dmp为原来的CDB的数据导出文件,old_schema为原来的CDB中的用户,new_schema为新的PDB中的用户,old_tbs为原来的CDB中的表空间,new_tbs为新的PDB中的表空间。

在导入过程中,可能会出现以下错误:

1.导入速度太慢

可以使用dbms_network_acl_admin包来开启网络连接,从而提高导入速度。

sqlplus / as sysdba
declare
begin
dbms_network_acl_admin.create_acl(
acl => 'network.xml',
description => 'Network ACL',
principal =>'admin_user',
is_grant => TRUE,
privilege => 'connect'
);
dbms_network_acl_admin.assign_acl(
acl => 'network.xml',
host => '127.0.0.1'
);
end;

其中,admin_user为PDB的管理员用户,127.0.0.1为主机IP地址,可以根据实际情况进行修改。

2.导入过程中出现权限问题

可以使用以下语句授权PDB的管理员用户

grant create pluggable database to admin_user;
grant dba to admin_user;

其中,admin_user为PDB的管理员用户。

通过以上步骤,我们就可以轻松地将原来的CDB转换为PDB。当然,在实际操作中还需要注意其他细节,比如数据库版本、表空间大小、用户访问控制等。我们可以根据实际情况进行修改和优化。


数据运维技术 » 变cdbOracle12从CDB变为PDB(oracle12从cdb)