变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
declarebegin
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。当然,在实际操作中还需要注意其他细节,比如数据库版本、表空间大小、用户访问控制等。我们可以根据实际情况进行修改和优化。