1.1 linux 下导出
sqlplus >连接到dba
SQL> create directory data_dir as '/opt/oracle_dump';
SQL> grant read,write on directory DMPDIR to TAX;
SQL> expdp user/passwd@sid dumpfile=full.dmp DMPDIR =data_dir full=y;
最终导出文件为/oracle_dump/full.dmp.将他拷贝至 windows 下 E:/oracel_dump/full.dmp
导出的是pdb 名为TAX,用户名为TAX,表空间为TAX的数据库。
1.2 widnows下下载安装Oracle并配置
1.安装oracle12c,安装完成后默认是cdb和一个pdb.cdb与pdb的区别:Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。下面是官方文档关于CDB与PDB的关系图 :
CDB组件(Components of a CDB)一个CDB数据库容器包含了下面一些组件:
ROOT组件:ROOT又叫CDB$ROOT, 存储着ORACLE提供的元数据和Common User,元数据的一个例子是ORACLE提供的PL/SQL包的源代码,Common User 是指在每个容器中都存在的用户。(创建时以C##开头)
SEED组件: Seed又叫PDB$SEED,这个是你创建PDBS数据库的模板,你不能在Seed中添加或修改一个对象。一个CDB中有且只能有一个Seed. 这个感念,个人感觉非常类似SQL SERVER中的model数据库。
PDBS: CDB中可以有一个或多个PDBS,PDBS向后兼容,可以像以前在数据库中那样操作PDBS,这里指大多数常规操作。
这些组件中的每一个都可以被称为一个容器。因此,ROOT(根)是一个容器,Seed(种子)是一个容器,每个PDB是一个容器。每个容器在CDB中都有一个独一无二的的ID和名称。
2. 利用开始菜单中Database Configuration Assistant 创建一个新的名仍然为导出时名【TAX】的pdb。
3. sys 登陆oracle后
(1)启动pdb,切换当前会话为TAX的pdb
SQL> alter pluggable database TAX open;
SQL> alter session set container=TAX;
SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;
SQL> alter pluggable database TAX save state; --保存状态,即开机可自启动
(2) 创建pdb的用户(TAX)、表空间(TAX),创建Directory并授予权限。与导出时相同。
SQL> create tablespace TAX datafile 'F:app表空间名称.dbf' size 5120M autoextend on next 150M maxsize unlimited --datafile 表空间数据存放位置 自动扩展
SQL> alter database datafile 'F:appTAX.dbf' AUTOEXTEND ON NEXT 200M MAXSIZE UNLIMITED; --表空间过小时
SQL> create user 用户名(TAX) identified by 密码 default tablespace 表空间名称(TAX);
SQL> grant create user,drop user,alter user,create any view,connect,resource,dba,create session,create any sequence to 用户名(TAX);
SQL> CREATE OR REPLACE DIRECTORY DMPDIR AS 'E:oracle_dump';
SQL> grant read,write on directory DMPDIR to 用户(TAX);
(3)导入数据【各个表的导入】
SQL> impdp 用户名/密码@SID【TAX】 DIRECTORY=DMPDIR file=full.dmp TABLES=(lg_fr2,ABC_TEMP)
Attention:
当报错为:UDI-12541: 操作产生了 ORACLE 错误 12541
ORA-12541: TNS: 无监听程序
解决方案:从windows的开始菜单中“Net Configuration Assistance”重新配置监听程序。链接
当报错为:ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
解决方案:①先在oracle 中创建未完成的建表语句,再将数据append进去。
impdp [email protected] DIRECTORY=DMPDIR file=full.dmp TABLES=DJ_NSRXX TABLE_EXISTS_ACTION = APPEND
②创建表空间时设置大一点。 或者为表空间添加新的datafile.
alter tablespace TAX add datafile 'F:appTAX1.DBF' size 1000M;Resumable error: ORA-01653: 表 TAX.SB_ZZS_XGMNSR_2005 无法通过 8192 (在表空间 TAX 中) 扩展 Resumable stmt: BEGIN SYS.KUPW$WORKER.MAIN(‘SYS_IMPORT_TABLE_01’, ‘TAX’, 0); END; Resumable stmt status: SUSPENDED
解决方案:注意可能是导出的字符集与将导入的数据库的字符集不同。将数据的字符集设置为与导出的相同。方法链接
(4)开放windows下的1521端口。
windows防火墙——>高级设置——>入站规则——>新建规则——>端口——>1521——>允许连接。此时其他oracle客户端即可连接使用数据库。