I would like know what would be the best practice to do Sync data between Prd Sql server to another server(Reportal server)?
As they say, it depends. There are many ways to skin the cat, and what is the best depends on the local circumstances and requirements. Here is a list of options:
- Do as you do, copy a database every morning. Simple-minded, but if users are happy, why make it more complex. If reports benefit from indexes not in the OLTP database, you can add them as part of the RESTORE operation.
- Log shipping. By applying logs throughout the day, the report database can be more up to date. But every time you apply logs, users needs to be kicked out. You cannot add extra indexes.
- Database snapshot. This is the fastest way to provide the report database, since taking the snapshot is instantaneous. But the snapshot is on the same machine as the source database, so report queries will compete with the source system for CPU and memory. You cannot add extra indexes.
- Transactional replication. This permits you get a copy which is a near-realtime copy of the source database and you can add indexes supporting the report queries. If you are not a good boy and have PKs on tables that can be a bummer. Overall, Replication is complex to set up and maintain.
- Availability Groups with a readonly secondary. This gives you a report database which is even closer to a real-time copy of the source database. Also complex to set up and maintain, but maybe less than Replication. You cannot have local indexing. Requires Enterprise Edition, so if you have Standard Edition today, it's not a cheap solution.
- Some sort of home brew, built in triggers, Service Broker, Agent jobs, you name it. I can only see in point in engaging in something like this if you only want to replicate a subset of the data. (Of the techniques above, Replication is the only one that supports this approach.)