Oracle
varchar2( ? ) ?最大值为4000
- test: create table test ( name varchar2(4000) );
权限问题
从达梦数据迁移视图到Oracle视图 (就是复制视图的创建语句到Oracle中执行)
报错 “找不到表或视图” 经检查表是存在的,且可以通过select访问
解决方法:用户赋权
比如 VIEW_BASE (相关信息的视图)的创建语句中包含了多个模式下的表(其中包括DB_YZGL,而我在创建DB_F这个模式的时候 建了一个用户 DB_F ) ,对这些模式的用户执行如下语句
grant all privileges to DB_F;
grant dba to DB_F;
最后再执行创建视图的语句,就可以了;
Oracle启动和停止
shell连到服务器
sqlplus / as sysdba
startup #启动
shutdown immediate #停止
ps -ef|grep ora_dbw0_$Oracle_SID #查找进程
kill -9 pid 杀掉进程
sqlplus / as sysdba
startup;
# 修改process
alter system set processes=500 scope=spfile;
# 修改session
alter system set sessions=555 scope=spfile;
[oracle@jia ~]$ cd $ORACLE_HOME/bin //进入oracle安装目录
[oracle@jia ~]$ ./lsnrctl start //起动监听
Oracle数据迁移到Oracle
导出dmp (linux系统为例)
1、执行sql语句
grant dba to DB_F; //给迁移的模式赋权(因为一个模式名会对应一个账号,所以也是给账号赋权)
grant all privileges to DB_F;
2、连接服务器
3、建一个用来保存数据的dmp文件 比如 DB_F.dmp 并赋权 777
我这里是用Xftp直接赋权的(命令赋权,先进入到dmp文件所在的目录,再执行:chmod 777 BASE_FMWK.dmp )
4、切换用户
su - oracle
5、然后执行命令
# exp 用户名/密码@实例名 file=导出的dmp文件存放路径 log=导出日志存放路径
# TABLES=table1,table2 导出指定表
exp DB_F/1@ORCL file=/opt/data/tmp/DB_F.dmp
expdp DB_F/ @ORCL dumpfile=DB_F.dmp
//导出指定表
exp DB_F/B@ORCL file=/opt/data/tmp/DB_F.dmp tables=(table1,table2)
// rows=n 只导出表结构
exp DB_Q/1@ORCL file=/opt/data/tmp/outOnlyConstruct/DB_DB_Q.dmp rows=n
// 覆盖导出 先查导出文件所在目录 sqlplus / as sysdba
select * from dba_directories
/opt/data/app/oracle/admin/orcl/dpdump/
expdp DB_D/1@ORCL dumpfile=DB_D.dmp
导入dmp
1、执行sql语句
grant dba to DB_D; //给目的数据库的模式也要赋权
2、连接linux
3、切换到oracle用户
4、执行
# imp 用户名/密码@实例名 file=导入的dmp文件路径 full=y ignore=y 表已存在则导入数据
# IGNORE=Y GRANTS=N INDEXES=N CONSTRAINTS=N FULL=Y 只导入数据
imp BASE_FMWK/BASE20_FMWK@ORCL file=/opt/data/tmp/BASE_FMWK.dmp full=y ignore=y
imp DGPMSYS/1@ORCL file=/opt/data/dmp/20211117dgpmsys.dmp IGNORE=Y GRANTS=N INDEXES=N CONSTRAINTS=N FULL=Y
imp DB_SJDJ/1@ORCL file=/tmp/DB_SJDJ.dmp full=y ignore=y rows=n
// 默认是导出含有数据的表 即 如果一个表没有数据 那么不会导出这个表的结构
// 导出的内容包含没有数据的表 执行以下操作
// 打开两个sql执行窗口 其中一个执行下面的语句
SELECT
'alter table ' || 'DB_XFZX.' || table_name || ' allocate extent;'
FROM
user_tables
WHERE
num_rows = 0
OR num_rows IS NULL;
//另一个执行查询结果
// 最后执行
select table_name, segment_created
from user_tables where num_rows = 0 or num_rows is null;
//如果 segment_created 为YES 则该无数据表可以被导出成dmp文件
表空间相关
// 查看表空间
SELECT * FROM dba_data_files;
// 删除表空间
drop tablespace PMSYS including contents;
//创建表空间 PMSYS_ARCH是表空间的名字
CREATE TABLESPACE PMSYS_ARCH DATAFILE
'/opt/data/app/oracle/oradata/orcl/PMSYS_ARCH01.dbf' SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
LOGGING
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT MANUAL
FLASHBACK ON;
连接数
// 查看当前连接数
select count(*) from v$process
// 查看最大连接数
select value from v$parameter where name = 'processes';
# 命令行执行
# 切换Oracle实例
export ORACLE_SID=orcl
echo $ORACLE_SID
修改最大连接数
#如果没有spfile 则执行 create spfile from pfile;
alter system set processes=500 scope=spfile;
alter system set sessions=500 scope=spfile;
shutdown immediate;
startup;
密码过期处理 the password has expired
sqlplus / as sysdba命令,进入oracle数据库
select * from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';
alter profile default limit password_life_time unlimited;
// 最后再修改一下密码
alter user DB_Y identified by 1;