Restarting a completed workflow is impossible, it's completed. You can fake this replacing the end-event by a a receive-task or signal-catch event in the process to be signalled later on, when the process needs to be continued/restarted. As Martin said, this can influence runtime performance (active processes live in other table than completed ones) if you have several hundred thousands of those processes running, depends on your usecase and DB.
Another approach is to start a new process instance, using variables from the history entities associated with the completed process.