首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理论2 Symfony 5迁移到oracle数据库

理论2 Symfony 5迁移到oracle数据库
EN

Stack Overflow用户
提问于 2021-04-29 13:39:32
回答 1查看 480关注 0票数 0

我有过

运行在VM 2.8.2

  • doctrine/dbal 2.12.1

  • doctrine/migrations

  • Symfony中的
  • PHP8.0
  • Ubuntu20.4版本5
  • PHP/orm

3.1.1F 213

和oracle19c运行

我也有一些我现在想要建立的实体:随教条迁移。但在这一点上,我坚持这个错误:

更多信息:

doctrine.yaml:中的

dbal:

代码语言:javascript
复制
default_connection: oracle

    connections:
        default:
            schema_filter: ~^(?!t_cmdb_|m_cmdb_|migration_versions)~
            mapping_types:
                enum: string
   
            # configure these for your database server
            url: '%env(resolve:DATABASE_URL)%'
            driver: 'pdo_mysql'
            server_version: '5.7'
            charset: utf8mb4
        oracle:
            schema_filter: ~^(?!t_cmdb_|m_cmdb_|migration_versions)~
            mapping_types:
                enum: string
                
            # configure these for your database server
            url: '%env(resolve:DATABASE_CUSTOMER_URL)%'
            servicename: 'pdb'
            service: true
            driver: 'oci8'
            server_version: ~
            charset: AL32UTF8

我有一个oracle数据库,它是用以下内容创建的:

代码语言:javascript
复制
php bin/console doctrine:database:create --connection oracle

没有任何问题

比我叫的还多

代码语言:javascript
复制
php bin/console make:migration -vvv

我收到了一条错误消息:

代码语言:javascript
复制
[Doctrine\DBAL\Exception]
  Unknown database type interval day(3) to second(2) requested, Doctrine\DBAL\Platforms\OraclePlatform may not support it.

我所有的日期列都有日期时间类型,那里没有间隔!

我已经找过这个问题了,但我没办法解决。有人在为教条迁移的时候遇到了这个问题吗?

非常感谢你的暗示。

迈克尔

EN

回答 1

Stack Overflow用户

发布于 2022-05-06 16:26:20

原则命令通常扫描Symfony的.env文件中定义的用户/模式中的所有表(查找DATABASE_USER)。该错误意味着该模式中至少有一个表有一个类型为“INTERVAL.”的列。

如果你确信没有“间隔”的表.类型列,可能是直接使用系统用户/架构(或任何其他Oracle保留的用户/架构)。在这种情况下,您需要为项目创建一个单独的用户/模式,并将项目表移到那里。

无论如何,运行此命令以检查哪些表在哪些用户/模式(所有者)中有类型为“INTERVAL.”的列:

代码语言:javascript
复制
SELECT 
OWNER,
TABLE_NAME ,
    COLUMN_NAME,
    DATA_TYPE,
    DATA_LENGTH,
    DATA_PRECISION,
    DATA_SCALE
FROM ALL_TAB_COLUMNS
where 
data_type like 'INTERVAL%'
-- and OWNER = 'YOUR_USER_SCHEMA' -- must be in uppercase
ORDER BY TABLE_NAME

如果在项目中确实使用了这样的列类型,则必须在Doctrine的配置:https://www.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/custom-mapping-types.html中添加该列类型

如果您发现您正在直接使用系统用户/模式(可能在Docker容器中?),那么创建单独的项目用户/模式:

代码语言:javascript
复制
CREATE USER your_separate_user_schema IDENTIFIED BY oracle; -- oracle is the password
Grant create session to your_separate_user_schema ; -- to be able to login with the new user
ALTER USER your_separate_user_schema quota unlimited on USERS; -- give your user schema disk space

要只将必要的表从SYSTEM复制到your_separate_user_schema:而在system/sysdba中,对于每个表,请执行以下操作:

代码语言:javascript
复制
create table your_separate_user_schema.table_name as select * from table_name ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67318571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档