나는 오랫동안 이동 경로를 사용하고 있습니다. 아주 좋은/완벽한 도구!Flyway 2.0.1로 Oracle 동의어를 처리하는 방법은 무엇입니까?
는 실제로 예상치 못한 상황에 직면하고있어... 나는 두 스키마가 : 테이블과 시퀀스는 소유자에 액세스 할 수 동의어를 사용하는 사용자는 을
- 소유자
사용자 지정 사용자가 '동의어 만들기/동의어 삭제'권한을 소유자에게 부여하지 않기를 바랍니다. 하지만 사용자에게 '동의어 생성 동의어'를 제공 할 수 있습니다.
그래서 나는 만들기
- 삭제,
- 그랜트 선택 (소유자와 연결) 테이블/시퀀스 만들기 ... 내 사용자의 스키마 (소유자와 연결)
- 필요 User와 연결된 Owner 객체에 대한 동의어
포인트 3은 제 문제입니다.
나는 주인에게 '동의어를 부여'와 이동 경로의 자리 표시자를 사용하여, 나는 그런 일 할 수있는 줄 경우
CREATE OR REPLACE SYNONYM ${user}.WORKITEMINFO FOR WORKITEMINFO;
을하지만 난 못해, 난이 구현)
그래서 솔루션을 User 스키마에 연결된 다른 DataSource를 사용하여 Java 마이그레이션을 사용하는 것입니다.
private final static String[] queries = {"CREATE OR REPLACE SYNONYM TASK_COMMENT FOR ${flyway.user}.TASK_COMMENT"} @Override public void migrate(final Connection connection) throws Exception { final DataSource dataSource = MigrationUtils.getUserDataSource(); final Connection connectionForMigrations = dataSource.getConnection(); final JdbcTemplate jdbcTemplate = new JdbcTemplate(connectionForMigrations); new TransactionTemplate(connectionForMigrations).execute(new TransactionCallback<Void>() { @Override public Void doInTransaction() { try { for (final String query : queries) { final String replacedQuery = MigrationUtils.replacePlaceholders(query); LOG.debug("Executing SQL: " + replacedQuery); jdbcTemplate.executeStatement(replacedQuery); } } catch (final SQLException exc) { throw new FlywayException("Could not drop synonym", exc); } return null; } }); }
이 문제를 해결하는 또 다른 방법이 있나요 (내 MigrationUtils.replacePlaceholders 나를 자리로 flyway.properties의 모든 속성에 대한 액세스 권한을 얻을 수 있습니다)?
감사합니다.
왜 동의어 구문을 작성하는 것이 정확하지 않습니까? –
동의어 만들기가 작동하지만 동의어를 삭제해야합니다. 진정한 문제는 고객이 소유자에게 '동의어 드롭 어구 동의어'를 제공하지 않기를 바랍니다. –