我就知道导入也有很多坑。。。
DROP USER XXX CASCADE; --删除用户 CREATE USER XXX IDENTIFIED BY XXX --创建用户 GRANT DBA TO XXX; --赋DBA权限 GRANT EXECUTE ON EMULATION.UTILS to XXX; --从SqlServer迁移的触发器有用到Emulation的Utils同义词,如果不单独赋权限的话会报错
1、加上CASCADE,删除用户时会同时删除相应数据
2、原以为用system用户去导就可以自动成生用户和表空间了,像SqlServer那样【恢复备份】一样,原来是不行的。。。要先建用户,再恢复表结构/存储过程/序列/触发器等(即导入用户数据),再导入表数据。
3、建完用户后,想仍然用system账号来导入结构和数据,结果那些导出的SQL脚本,建表之类是有加上用户前缀,即有完整的XXX.TableName,可用管理员账号导。但触发器脚本是直接使用TableName的,那就需要直接使用XXX用户的账号来导。
4、新建的XXX权限不足,需要赋权限。建表、建存储过程、建触发器。。。一个个添加,加一个试一个,总是权限不够,无奈直接赋DBA省事。
5、导完后发现触发器编译不通过,都是提示UTILS不存在。查了后发现EMULATION账号下有一个UTILS,会自动在XXX下生成一个同义词。都DBA了怎么还没权限,只好手动再专门赋一下权限。
错误:PLS-00201: 必须声明标识符 'UTILS'
行:21
文本:utils.identity_value := v_newVal;
-- save this to emulate @@identity
utils.identity_value := v_newVal;
应该是专门用来模拟自增列的。
6、从头再来一次,终于全部成功了,也够折腾的。SqlServer在SSMS里,用sa,随便恢复bak文件,多方便。